if_bge driver problem. - Upgrade to RELEASE :)
husnu demir
hdemir at metu.edu.tr
Tue Jan 31 23:11:27 PST 2006
Hi,
No I am not tired. We would like to be part of that, even like testers. I did try to compile but gave these error messages. I did not make CVSUP because of the pci error in the tree.
Here is the error messages;
cc -O2 -fno-strict-aliasing -pipe -Werror -D_KERNEL -DKLD_MODULE -nostdinc -I- -DHAVE_KERNEL_OPTION_HEADERS -include /usr/obj/usr/src/sys/METU/opt_global.h -I. -I@ -I@/contrib/altq -I@/../include -finline-limit=8000 -fno-common -I/usr/obj/usr/src/sys/METU -mno-align-long-strings -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -ffreestanding -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -fformat-extensions -std=c99 -c /usr/src/sys/modules/bge/../../dev/bge/if_bge.c
/usr/src/sys/modules/bge/../../dev/bge/if_bge.c: In function `bge_poll_locked':
/usr/src/sys/modules/bge/../../dev/bge/if_bge.c:2749: error: structure has no member named `bge_link_evt'
/usr/src/sys/modules/bge/../../dev/bge/if_bge.c:2754: error: structure has no member named `bge_link_evt'
/usr/src/sys/modules/bge/../../dev/bge/if_bge.c: In function `bge_intr':
/usr/src/sys/modules/bge/../../dev/bge/if_bge.c:2806: error: structure has no member named `bge_link_evt'
/usr/src/sys/modules/bge/../../dev/bge/if_bge.c: In function `bge_tick_locked':
/usr/src/sys/modules/bge/../../dev/bge/if_bge.c:2857: error: structure has no member named `bge_link_evt'
/usr/src/sys/modules/bge/../../dev/bge/if_bge.c: In function `bge_link_upd':
/usr/src/sys/modules/bge/../../dev/bge/if_bge.c:3741: error: structure has no member named `bge_link_evt'
*** Error code 1
1 error
*** Error code 2
1 error
*** Error code 2
2 errors
*** Error code 2
1 error
*** Error code 2
1 error
HUsnu Demir.
On Wed, Feb 01, 2006 at 04:05:43AM +0300, Oleg Bulyzhin wrote:
> On Tue, Jan 31, 2006 at 04:23:12PM +0200, husnu demir wrote:
> > On Tue, Jan 31, 2006 at 05:16:55PM +0300, Oleg Bulyzhin wrote:
> > > On Tue, Jan 31, 2006 at 03:31:11PM +0200, husnu demir wrote:
> > > > Anyway, let me learn to use cvs some other day. I do what u said and applied patch. It is working. At least I can ping and when I gave an IP address to the Interface and remove the physical connection, it shows UP/DOWN. If it is made UP but has no IP address, It shows nothing. But I will use it with an IP address so no problem.
> > > >
> > >
> > > Excuse me, I didnt understand this one:
> > > "If it is made UP but has no IP address, It shows nothing."
> > >
> > > Are you talking about running 'ifconfig bge2 up' (without ip bound to bge2)?
> > > "It shows nothing" - does it mean no UP/DOWN messages in console.log or
> > > ifconfig bge2 reports status 'no carrier'?
> > >
> >
> > Yes, I made ifconfig bge2 up without ip bound. Then remove the physical connection but no messages seen on the console. Even it did not show 'no carrier' messages. Still sees active.
> >
>
> If you are not tired yet - new patch attached (it's against RELENG_6 so you have
> to revert previous patch).
>
> P.S. Thanks for your testing. Unfortunatly i've got only copper bges so i cant
> test it myself.
> P.P.S. if possible, test polling mode too.
>
> --
> Oleg.
>
> Index: if_bgereg.h
> ===================================================================
> RCS file: /home/ncvs/src/sys/dev/bge/if_bgereg.h,v
> retrieving revision 1.45
> diff -u -r1.45 if_bgereg.h
> --- if_bgereg.h 18 Jan 2006 14:31:21 -0000 1.45
> +++ if_bgereg.h 1 Feb 2006 00:52:12 -0000
> @@ -2421,7 +2421,8 @@
> u_int32_t bge_tx_buf_ratio;
> int bge_if_flags;
> int bge_txcnt;
> - int bge_link;
> + int bge_link; /* link state */
> + int bge_link_evt; /* pending link event */
> struct callout bge_stat_ch;
> char *bge_vpd_prodname;
> char *bge_vpd_readonly;
> Index: if_bge.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/dev/bge/if_bge.c,v
> retrieving revision 1.118
> diff -u -r1.118 if_bge.c
> --- if_bge.c 30 Jan 2006 13:45:55 -0000 1.118
> +++ if_bge.c 1 Feb 2006 00:52:20 -0000
> @@ -2732,31 +2732,33 @@
> bge_poll_locked(struct ifnet *ifp, enum poll_cmd cmd, int count)
> {
> struct bge_softc *sc = ifp->if_softc;
> + uint32_t statusword;
>
> BGE_LOCK_ASSERT(sc);
>
> - sc->rxcycles = count;
> - bge_rxeof(sc);
> - bge_txeof(sc);
> - if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
> - bge_start_locked(ifp);
> + bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
> + sc->bge_cdata.bge_status_map, BUS_DMASYNC_POSTREAD);
>
> - if (cmd == POLL_AND_CHECK_STATUS) {
> - uint32_t statusword;
> + statusword = atomic_readandclear_32(&sc->bge_ldata.bge_status_block->bge_status);
>
> - bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
> - sc->bge_cdata.bge_status_map, BUS_DMASYNC_POSTREAD);
> + bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
> + sc->bge_cdata.bge_status_map, BUS_DMASYNC_PREREAD);
>
> - statusword = atomic_readandclear_32(&sc->bge_ldata.bge_status_block->bge_status);
> + /* Note link event. It will be processed by POLL_AND_CHECK_STATUS cmd */
> + if (statusword & BGE_STATFLAG_LINKSTATE_CHANGED)
> + sc->bge_link_evt++;
>
> + if (cmd == POLL_AND_CHECK_STATUS)
> if ((sc->bge_asicrev == BGE_ASICREV_BCM5700 &&
> sc->bge_chipid != BGE_CHIPID_BCM5700_B1) ||
> - statusword & BGE_STATFLAG_LINKSTATE_CHANGED)
> + sc->bge_link_evt || sc->bge_tbi)
> bge_link_upd(sc);
>
> - bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
> - sc->bge_cdata.bge_status_map, BUS_DMASYNC_PREREAD);
> - }
> + sc->rxcycles = count;
> + bge_rxeof(sc);
> + bge_txeof(sc);
> + if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
> + bge_start_locked(ifp);
> }
> #endif /* DEVICE_POLLING */
>
> @@ -2787,6 +2789,9 @@
> statusword =
> atomic_readandclear_32(&sc->bge_ldata.bge_status_block->bge_status);
>
> + bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
> + sc->bge_cdata.bge_status_map, BUS_DMASYNC_PREREAD);
> +
> #ifdef notdef
> /* Avoid this for now -- checking this register is expensive. */
> /* Make sure this is really our interrupt. */
> @@ -2798,7 +2803,7 @@
>
> if ((sc->bge_asicrev == BGE_ASICREV_BCM5700 &&
> sc->bge_chipid != BGE_CHIPID_BCM5700_B1) ||
> - statusword & BGE_STATFLAG_LINKSTATE_CHANGED)
> + statusword & BGE_STATFLAG_LINKSTATE_CHANGED || sc->bge_link_evt)
> bge_link_upd(sc);
>
> if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
> @@ -2826,12 +2831,9 @@
> struct bge_softc *sc;
> {
> struct mii_data *mii = NULL;
> - struct ifnet *ifp;
>
> BGE_LOCK_ASSERT(sc);
>
> - ifp = sc->bge_ifp;
> -
> if (sc->bge_asicrev == BGE_ASICREV_BCM5705 ||
> sc->bge_asicrev == BGE_ASICREV_BCM5750)
> bge_stats_update_regs(sc);
> @@ -2841,6 +2843,20 @@
> if (!sc->bge_tbi) {
> mii = device_get_softc(sc->bge_miibus);
> mii_tick(mii);
> + } else {
> + /*
> + * Since in TBI mode auto-polling can't be used we should poll
> + * link status manually. Here we register pending link event
> + * and trigger interrupt.
> + */
> +#ifdef DEVICE_POLLING
> + /* In polling mode we poll link state in bge_poll_locked() */
> + if (!(sc->bge_ifp->if_capenable & IFCAP_POLLING))
> +#endif
> + {
> + sc->bge_link_evt++;
> + BGE_SETBIT(sc, BGE_MISC_LOCAL_CTL, BGE_MLC_INTR_SET);
> + }
> }
>
> callout_reset(&sc->bge_stat_ch, hz, bge_tick, sc);
> @@ -3722,6 +3738,9 @@
>
> BGE_LOCK_ASSERT(sc);
>
> + /* Clear 'pending link event' flag */
> + sc->bge_link_evt = 0;
> +
> /*
> * Process link state changes.
> * Grrr. The link status word in the status block does
> @@ -3770,23 +3789,9 @@
> }
>
> if (sc->bge_tbi) {
> - /*
> - * Sometimes PCS encoding errors are detected in
> - * TBI mode (on fiber NICs), and for some reason
> - * the chip will signal them as link changes.
> - * If we get a link change event, but the 'PCS
> - * encoding error' bit in the MAC status register
> - * is set, don't bother doing a link check.
> - * This avoids spurious "link UP" messages
> - * that sometimes appear on fiber NICs during
> - * periods of heavy traffic. (There should be no
> - * effect on copper NICs.)
> - */
> status = CSR_READ_4(sc, BGE_MAC_STS);
> - if (!(status & (BGE_MACSTAT_PORT_DECODE_ERROR|
> - BGE_MACSTAT_MI_COMPLETE))) {
> - if (!sc->bge_link &&
> - (status & BGE_MACSTAT_TBI_PCS_SYNCHED)) {
> + if (status & BGE_MACSTAT_TBI_PCS_SYNCHED) {
> + if (!sc->bge_link) {
> sc->bge_link++;
> if (sc->bge_asicrev == BGE_ASICREV_BCM5704)
> BGE_CLRBIT(sc, BGE_MAC_MODE,
> @@ -3794,11 +3799,13 @@
> CSR_WRITE_4(sc, BGE_MAC_STS, 0xFFFFFFFF);
> if (bootverbose)
> if_printf(sc->bge_ifp, "link UP\n");
> - } else if (sc->bge_link) {
> - sc->bge_link = 0;
> - if (bootverbose)
> - if_printf(sc->bge_ifp, "link DOWN\n");
> + if_link_state_change(sc->bge_ifp, LINK_STATE_UP);
> }
> + } else if (sc->bge_link) {
> + sc->bge_link = 0;
> + if (bootverbose)
> + if_printf(sc->bge_ifp, "link DOWN\n");
> + if_link_state_change(sc->bge_ifp, LINK_STATE_DOWN);
> }
> } else {
> /*
More information about the freebsd-stable
mailing list