Deleted Added
full compact
29c29
< __FBSDID("$FreeBSD: head/sys/dev/ed/if_ed.c 154895 2006-01-27 08:25:47Z imp $");
---
> __FBSDID("$FreeBSD: head/sys/dev/ed/if_ed.c 154924 2006-01-27 19:10:13Z imp $");
90,91d89
< static u_short ed_pio_write_mbufs(struct ed_softc *, struct mbuf *,
< bus_size_t);
279c277,281
<
---
> if (sc->sc_write_mbufs == NULL) {
> device_printf(dev, "No write mbufs routine set\n");
> return (ENXIO);
> }
>
714,784c716,719
< if (sc->mem_shared) {
< /*
< * Special case setup for 16 bit boards...
< */
< if (sc->isa16bit) {
< switch (sc->vendor) {
< #ifdef ED_3C503
< /*
< * For 16bit 3Com boards (which have 16k of
< * memory), we have the xmit buffers in a
< * different page of memory ('page 0') - so
< * change pages.
< */
< case ED_VENDOR_3COM:
< ed_asic_outb(sc, ED_3COM_GACFR,
< ED_3COM_GACFR_RSEL);
< break;
< #endif
< /*
< * Enable 16bit access to shared memory on
< * WD/SMC boards.
< *
< * XXX - same as ed_enable_16bit_access()
< */
< case ED_VENDOR_WD_SMC:
< ed_asic_outb(sc, ED_WD_LAAR,
< sc->wd_laar_proto | ED_WD_LAAR_M16EN);
< if (sc->chip_type == ED_CHIP_TYPE_WD790)
< ed_asic_outb(sc, ED_WD_MSR, ED_WD_MSR_MENB);
< break;
< }
< }
< for (len = 0; m != 0; m = m->m_next) {
< if (sc->isa16bit)
< bus_space_write_region_2(sc->mem_bst,
< sc->mem_bsh, buffer,
< mtod(m, uint16_t *), (m->m_len + 1)/ 2);
< else
< bus_space_write_region_1(sc->mem_bst,
< sc->mem_bsh, buffer,
< mtod(m, uint8_t *), m->m_len);
< buffer += m->m_len;
< len += m->m_len;
< }
<
< /*
< * Restore previous shared memory access
< */
< if (sc->isa16bit) {
< switch (sc->vendor) {
< #ifdef ED_3C503
< case ED_VENDOR_3COM:
< ed_asic_outb(sc, ED_3COM_GACFR,
< ED_3COM_GACFR_RSEL | ED_3COM_GACFR_MBS0);
< break;
< #endif
< case ED_VENDOR_WD_SMC:
< /* XXX - same as ed_disable_16bit_access() */
< if (sc->chip_type == ED_CHIP_TYPE_WD790)
< ed_asic_outb(sc, ED_WD_MSR, 0x00);
< ed_asic_outb(sc, ED_WD_LAAR,
< sc->wd_laar_proto & ~ED_WD_LAAR_M16EN);
< break;
< }
< }
< } else {
< len = ed_pio_write_mbufs(sc, m, buffer);
< if (len == 0) {
< m_freem(m0);
< goto outloop;
< }
---
> len = sc->sc_write_mbufs(sc, m, buffer);
> if (len == 0) {
> m_freem(m0);
> goto outloop;
1460c1395
< static u_short
---
> u_short
1470,1475d1404
< #ifdef ED_HPP
< /* HP PC Lan+ cards need special handling */
< if (sc->vendor == ED_VENDOR_HP && sc->type == ED_TYPE_HP_PCLANPLUS)
< return ed_hpp_write_mbufs(sc, m, dst);
< #endif
<
1710a1640,1710
>
> u_short
> ed_shmem_write_mbufs(struct ed_softc *sc, struct mbuf *m, bus_size_t dst)
> {
> u_short len;
>
> /*
> * Special case setup for 16 bit boards...
> */
> if (sc->isa16bit) {
> switch (sc->vendor) {
> #ifdef ED_3C503
> /*
> * For 16bit 3Com boards (which have 16k of
> * memory), we have the xmit buffers in a
> * different page of memory ('page 0') - so
> * change pages.
> */
> case ED_VENDOR_3COM:
> ed_asic_outb(sc, ED_3COM_GACFR, ED_3COM_GACFR_RSEL);
> break;
> #endif
> /*
> * Enable 16bit access to shared memory on
> * WD/SMC boards.
> *
> * XXX - same as ed_enable_16bit_access()
> */
> case ED_VENDOR_WD_SMC:
> ed_asic_outb(sc, ED_WD_LAAR,
> sc->wd_laar_proto | ED_WD_LAAR_M16EN);
> if (sc->chip_type == ED_CHIP_TYPE_WD790)
> ed_asic_outb(sc, ED_WD_MSR, ED_WD_MSR_MENB);
> break;
> }
> }
> for (len = 0; m != 0; m = m->m_next) {
> if (sc->isa16bit)
> bus_space_write_region_2(sc->mem_bst,
> sc->mem_bsh, dst,
> mtod(m, uint16_t *), (m->m_len + 1)/ 2);
> else
> bus_space_write_region_1(sc->mem_bst,
> sc->mem_bsh, dst,
> mtod(m, uint8_t *), m->m_len);
> dst += m->m_len;
> len += m->m_len;
> }
>
> /*
> * Restore previous shared memory access
> */
> if (sc->isa16bit) {
> switch (sc->vendor) {
> #ifdef ED_3C503
> case ED_VENDOR_3COM:
> ed_asic_outb(sc, ED_3COM_GACFR,
> ED_3COM_GACFR_RSEL | ED_3COM_GACFR_MBS0);
> break;
> #endif
> case ED_VENDOR_WD_SMC:
> /* XXX - same as ed_disable_16bit_access() */
> if (sc->chip_type == ED_CHIP_TYPE_WD790)
> ed_asic_outb(sc, ED_WD_MSR, 0x00);
> ed_asic_outb(sc, ED_WD_LAAR,
> sc->wd_laar_proto & ~ED_WD_LAAR_M16EN);
> break;
> }
> }
> return (len);
> }