Ticket #1590: broadcom_1.diff

File broadcom_1.diff, 4.6 KB (added by PieterPanman, 15 years ago)

cleaned up and working version

  • build/jam/HaikuImage

     
    143143    #vlance
    144144    $(X86_ONLY)marvell_yukon $(X86_ONLY)syskonnect usb_ecm
    145145    $(GPL_ONLY)bcm570x
     146    broadcom570x
    146147;
    147148#BEOS_ADD_ONS_DRIVERS_ACPI = $(X86_ONLY)acpi_button ;
    148149BEOS_ADD_ONS_BUS_MANAGERS = pci $(X86_ONLY)ps2 $(X86_ONLY)isa ide scsi
  • src/add-ons/kernel/drivers/network/broadcom570x/dev/bge/if_bgereg.h

     
    25862586#define BGE_LOCK_ASSERT(_sc)    mtx_assert(&(_sc)->bge_mtx, MA_OWNED)
    25872587#define BGE_UNLOCK(_sc)     mtx_unlock(&(_sc)->bge_mtx)
    25882588#define BGE_LOCK_DESTROY(_sc)   mtx_destroy(&(_sc)->bge_mtx)
     2589
     2590// these functions declarations are placed here because they are used in glue.c
     2591void bge_writembx(struct bge_softc *, int, int);
     2592void bge_link_upd(struct bge_softc *);
  • src/add-ons/kernel/drivers/network/broadcom570x/dev/bge/if_bge.c

     
    378378static int bge_has_eaddr(struct bge_softc *);
    379379static uint32_t bge_readmem_ind(struct bge_softc *, int);
    380380static void bge_writemem_ind(struct bge_softc *, int, int);
    381 static void bge_writembx(struct bge_softc *, int, int);
    382381#ifdef notdef
    383382static uint32_t bge_readreg_ind(struct bge_softc *, int);
    384383#endif
     
    398397static void bge_sig_legacy(struct bge_softc *, int);
    399398static void bge_sig_pre_reset(struct bge_softc *, int);
    400399static int bge_reset(struct bge_softc *);
    401 static void bge_link_upd(struct bge_softc *);
    402400
    403401/*
    404402 * The BGE_REGISTER_DEBUG option is only for low-level debugging.  It may
     
    553551    CSR_WRITE_4(sc, off, val);
    554552}
    555553
    556 static void
     554void
    557555bge_writembx(struct bge_softc *sc, int off, int val)
    558556{
    559557    if (sc->bge_asicrev == BGE_ASICREV_BCM5906)
     
    43204318    return (0);
    43214319}
    43224320
    4323 static void
     4321void
    43244322bge_link_upd(struct bge_softc *sc)
    43254323{
    43264324    struct mii_data *mii;
  • src/add-ons/kernel/drivers/network/broadcom570x/dev/bge/glue.c

     
    3131}
    3232
    3333
    34 // copied from if_bge.c
    35 static void
    36 bge_writembx(struct bge_softc *sc, int off, int val)
    37 {
    38     if (sc->bge_asicrev == BGE_ASICREV_BCM5906)
    39         off += BGE_LPMBX_IRQ0_HI - BGE_MBX_IRQ0_HI;
    40 
    41     CSR_WRITE_4(sc, off, val);
    42 }
    43 
    44 
    4534int
    4635__haiku_disable_interrupts(device_t dev)
    4736{
    4837    struct bge_softc *sc = device_get_softc(dev);
    4938
    50     uint32 statusword = CSR_READ_4(sc, BGE_MAC_STS) & BGE_MACSTAT_LINK_CHANGED;
     39    uint32 linkChanged = CSR_READ_4(sc, BGE_MAC_STS)
     40        & BGE_MACSTAT_LINK_CHANGED;
     41    uint32 notInterrupted = pci_read_config(sc->bge_dev, BGE_PCI_PCISTATE, 4)
     42        & BGE_PCISTATE_INTR_STATE;
     43    // bit of a strange register name. a nonzero actually means
     44    // it is _not_ interrupted
    5145
    52     if ((sc->bge_ifp->if_drv_flags & IFF_DRV_RUNNING) == 0 && !statusword
    53         && (pci_read_config(sc->bge_dev, BGE_PCI_PCISTATE,4) & BGE_PCISTATE_INTR_STATE))
     46    if (notInterrupted)
    5447        return 0;
    5548
     49    // this part is copied from bge_intr. Perhaps it is needed here
     50    // to stop the storm of interrupts.
     51    if ((sc->bge_asicrev == BGE_ASICREV_BCM5700 &&
     52        sc->bge_chipid != BGE_CHIPID_BCM5700_B2) ||
     53        linkChanged || sc->bge_link_evt)
     54        bge_link_upd(sc);
     55
    5656    BGE_SETBIT(sc, BGE_PCI_MISC_CTL, BGE_PCIMISCCTL_MASK_PCI_INTR);
    5757    bge_writembx(sc, BGE_MBX_IRQ0_LO, 1);
    5858
  • src/libs/compat/freebsd_network/fbsd_mii_physubr.c

     
    510510    }
    511511
    512512    if (sc->mii_capabilities & BMSR_ANEG) {
    513         ADD(IFM_MAKEWORD(IFM_ETHER, IFM_AUTO, 0, sc->mii_inst),
    514             MII_NMEDIA);    /* intentionally invalid index */
     513        //ADD(IFM_MAKEWORD(IFM_ETHER, IFM_AUTO, 0, sc->mii_inst),
     514        //    MII_NMEDIA);  /* intentionally invalid index */
     515        //TODO: Why was this done? Incomplete code?
     516        dprintf("don't know how to handle sc->mii_capabilities & BMSR_ANEG\n");
    515517        PRINT("auto");
    516518    }
    517519#undef ADD