From e11c40c4e2083759960713085ca8b6673382fbb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Fri, 21 Nov 2008 23:43:14 +0000 Subject: [PATCH] applied patch from PieterPanman for broadcom570x network chipsets. Thanks! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28712 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- build/jam/HaikuImage | 4 ++-- .../network/broadcom570x/dev/bge/glue.c | 19 +++++-------------- .../network/broadcom570x/dev/bge/if_bge.c | 6 ++++++ .../network/broadcom570x/dev/bge/if_bgereg.h | 5 +++++ 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/build/jam/HaikuImage b/build/jam/HaikuImage index b39489eddd..cd7c283127 100644 --- a/build/jam/HaikuImage +++ b/build/jam/HaikuImage @@ -138,12 +138,12 @@ BEOS_ADD_ONS_DRIVERS_GRAPHICS = $(X86_ONLY)radeon $(X86_ONLY)nvidia $(X86_ONLY)s3 $(X86_ONLY)vesa #$(X86_ONLY)via #$(X86_ONLY)vmware ; BEOS_ADD_ONS_DRIVERS_MIDI = emuxki ; -BEOS_ADD_ONS_DRIVERS_NET = $(X86_ONLY)3com $(X86_ONLY)broadcom440x etherpci $(X86_ONLY)ipro1000 +BEOS_ADD_ONS_DRIVERS_NET = $(X86_ONLY)3com $(X86_ONLY)broadcom440x + $(X86_ONLY)broadcom570x etherpci $(X86_ONLY)ipro1000 pegasus $(X86_ONLY)rtl8139 rtl8169 $(X86_ONLY)rtl81xx sis900 $(X86_ONLY)via_rhine wb840 $(X86_ONLY)ipro100 $(X86_ONLY)nforce #vlance $(X86_ONLY)marvell_yukon $(X86_ONLY)syskonnect usb_ecm - $(GPL_ONLY)bcm570x ; #BEOS_ADD_ONS_DRIVERS_ACPI = $(X86_ONLY)acpi_button ; BEOS_ADD_ONS_BUS_MANAGERS = pci $(X86_ONLY)ps2 $(X86_ONLY)isa ide scsi diff --git a/src/add-ons/kernel/drivers/network/broadcom570x/dev/bge/glue.c b/src/add-ons/kernel/drivers/network/broadcom570x/dev/bge/glue.c index 5f711cbfb5..c5a5ff7cae 100644 --- a/src/add-ons/kernel/drivers/network/broadcom570x/dev/bge/glue.c +++ b/src/add-ons/kernel/drivers/network/broadcom570x/dev/bge/glue.c @@ -31,26 +31,17 @@ __haiku_select_miibus_driver(device_t dev) } -// copied from if_bge.c -static void -bge_writembx(struct bge_softc *sc, int off, int val) -{ - if (sc->bge_asicrev == BGE_ASICREV_BCM5906) - off += BGE_LPMBX_IRQ0_HI - BGE_MBX_IRQ0_HI; - - CSR_WRITE_4(sc, off, val); -} - - int __haiku_disable_interrupts(device_t dev) { struct bge_softc *sc = device_get_softc(dev); - uint32 statusword = CSR_READ_4(sc, BGE_MAC_STS) & BGE_MACSTAT_LINK_CHANGED; + uint32 notInterrupted = pci_read_config(sc->bge_dev, BGE_PCI_PCISTATE, 4) + & BGE_PCISTATE_INTR_STATE; + // bit of a strange register name. a nonzero actually means + // it is _not_ interrupted by the network chip - if ((sc->bge_ifp->if_drv_flags & IFF_DRV_RUNNING) == 0 && !statusword - && (pci_read_config(sc->bge_dev, BGE_PCI_PCISTATE,4) & BGE_PCISTATE_INTR_STATE)) + if (notInterrupted) return 0; BGE_SETBIT(sc, BGE_PCI_MISC_CTL, BGE_PCIMISCCTL_MASK_PCI_INTR); diff --git a/src/add-ons/kernel/drivers/network/broadcom570x/dev/bge/if_bge.c b/src/add-ons/kernel/drivers/network/broadcom570x/dev/bge/if_bge.c index 9fdbcc6954..d2874171ea 100644 --- a/src/add-ons/kernel/drivers/network/broadcom570x/dev/bge/if_bge.c +++ b/src/add-ons/kernel/drivers/network/broadcom570x/dev/bge/if_bge.c @@ -378,7 +378,9 @@ static int bge_blockinit(struct bge_softc *); static int bge_has_eaddr(struct bge_softc *); static uint32_t bge_readmem_ind(struct bge_softc *, int); static void bge_writemem_ind(struct bge_softc *, int, int); +#ifndef __HAIKU__ static void bge_writembx(struct bge_softc *, int, int); +#endif #ifdef notdef static uint32_t bge_readreg_ind(struct bge_softc *, int); #endif @@ -553,7 +555,11 @@ bge_writemem_direct(struct bge_softc *sc, int off, int val) CSR_WRITE_4(sc, off, val); } +#ifndef __HAIKU__ static void +#else +void +#endif bge_writembx(struct bge_softc *sc, int off, int val) { if (sc->bge_asicrev == BGE_ASICREV_BCM5906) diff --git a/src/add-ons/kernel/drivers/network/broadcom570x/dev/bge/if_bgereg.h b/src/add-ons/kernel/drivers/network/broadcom570x/dev/bge/if_bgereg.h index 9753d81d44..9a256cce10 100644 --- a/src/add-ons/kernel/drivers/network/broadcom570x/dev/bge/if_bgereg.h +++ b/src/add-ons/kernel/drivers/network/broadcom570x/dev/bge/if_bgereg.h @@ -2586,3 +2586,8 @@ struct bge_softc { #define BGE_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->bge_mtx, MA_OWNED) #define BGE_UNLOCK(_sc) mtx_unlock(&(_sc)->bge_mtx) #define BGE_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->bge_mtx) + +#ifdef __HAIKU__ +// this function declaration is placed here because it is used in glue.c +void bge_writembx(struct bge_softc *, int, int); +#endif