SIS_CFG_EDB_MASTER_EN indicates the EDB bus is used instead of the PCI bus. When this bit is set, the Max DMA Burst Size for TX/RX DMA should be no larger than 16 double words Obtained from: Linux driver source. (idea) --- sys/pci/if_sisreg.h.orig Sun Jan 5 01:29:53 2003 +++ sys/pci/if_sisreg.h Sun Jan 5 01:38:08 2003 @@ -114,6 +114,7 @@ #define SIS_CFG_OUTOFWIN_TIMER 0x00000020 #define SIS_CFG_SINGLE_BACKOFF 0x00000040 #define SIS_CFG_PCIREQ_ALG 0x00000080 +#define SIS_CFG_EDB_MASTER_EN 0x00002000 #define SIS_EECTL_DIN 0x00000001 #define SIS_EECTL_DOUT 0x00000002 @@ -259,8 +260,10 @@ #define SIS_RXDMA_128BYTES 0x00600000 #define SIS_RXDMA_256BYTES 0x00700000 -#define SIS_RXCFG \ +#define SIS_RXCFG256 \ (SIS_RXCFG_DRAIN(64)|SIS_RXDMA_256BYTES) +#define SIS_RXCFG64 \ + (SIS_RXCFG_DRAIN(64)|SIS_RXDMA_64BYTES) #define SIS_RXFILTCTL_ADDR 0x000F0000 #define NS_RXFILTCTL_MCHASH 0x00200000 --- sys/pci/if_sis.c.orig Sun Jan 5 01:23:52 2003 +++ sys/pci/if_sis.c Sun Jan 5 01:45:26 2003 @@ -2014,8 +2014,16 @@ CSR_WRITE_4(sc, SIS_RX_LISTPTR, sc->sis_cdata.sis_rx_paddr); CSR_WRITE_4(sc, SIS_TX_LISTPTR, sc->sis_cdata.sis_tx_paddr); - /* Set RX configuration */ - CSR_WRITE_4(sc, SIS_RX_CFG, SIS_RXCFG); + /* SIS_CFG_EDB_MASTER_EN indicates the EDB bus is used instead of + * the PCI bus. When this bit is set, the Max DMA Burst Size + * for TX/RX DMA should be no larger than 16 double words. + */ + if (CSR_READ_4(sc, SIS_CFG) & SIS_CFG_EDB_MASTER_EN) { + CSR_WRITE_4(sc, SIS_RX_CFG, SIS_RXCFG64); + } else { + CSR_WRITE_4(sc, SIS_RX_CFG, SIS_RXCFG256); + } + /* Accept Long Packets for VLAN support */ SIS_SETBIT(sc, SIS_RX_CFG, SIS_RXCFG_RX_JABBER);