Deleted Added
full compact
if_ep.c (148581) if_ep.c (148887)
1/*-
2 * Copyright (c) 1994 Herb Peyerl <hpeyerl@novatel.ca>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 15 unchanged lines hidden (view full) ---

24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 1994 Herb Peyerl <hpeyerl@novatel.ca>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 15 unchanged lines hidden (view full) ---

24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31#include <sys/cdefs.h>
32__FBSDID("$FreeBSD: head/sys/dev/ep/if_ep.c 148581 2005-07-31 03:33:22Z imp $");
32__FBSDID("$FreeBSD: head/sys/dev/ep/if_ep.c 148887 2005-08-09 10:20:02Z rwatson $");
33
34/*
35 * Modified from the FreeBSD 1.1.5.1 version by:
36 * Andres Vega Garcia
37 * INRIA - Sophia Antipolis, France
38 * avega@sophia.inria.fr
39 */
40

--- 312 unchanged lines hidden (view full) ---

353 EP_ASSERT_UNLOCKED(sc);
354 ifp = sc->ifp;
355
356 if (sc->gone)
357 return (0);
358 if (bus_child_present(dev))
359 epstop(sc);
360
33
34/*
35 * Modified from the FreeBSD 1.1.5.1 version by:
36 * Andres Vega Garcia
37 * INRIA - Sophia Antipolis, France
38 * avega@sophia.inria.fr
39 */
40

--- 312 unchanged lines hidden (view full) ---

353 EP_ASSERT_UNLOCKED(sc);
354 ifp = sc->ifp;
355
356 if (sc->gone)
357 return (0);
358 if (bus_child_present(dev))
359 epstop(sc);
360
361 ifp->if_flags &= ~IFF_RUNNING;
361 ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
362 ether_ifdetach(ifp);
363 if_free(ifp);
364
365 sc->gone = 1;
366 ep_free(dev);
367 EP_LOCK_DESTROY(sc);
368
369 return (0);

--- 63 unchanged lines hidden (view full) ---

433 FIL_MULTICAST | FIL_BRDCST);
434
435 if (!sc->epb.mii_trans)
436 ep_ifmedia_upd(ifp);
437
438 CSR_WRITE_2(sc, EP_COMMAND, RX_ENABLE);
439 CSR_WRITE_2(sc, EP_COMMAND, TX_ENABLE);
440
362 ether_ifdetach(ifp);
363 if_free(ifp);
364
365 sc->gone = 1;
366 ep_free(dev);
367 EP_LOCK_DESTROY(sc);
368
369 return (0);

--- 63 unchanged lines hidden (view full) ---

433 FIL_MULTICAST | FIL_BRDCST);
434
435 if (!sc->epb.mii_trans)
436 ep_ifmedia_upd(ifp);
437
438 CSR_WRITE_2(sc, EP_COMMAND, RX_ENABLE);
439 CSR_WRITE_2(sc, EP_COMMAND, TX_ENABLE);
440
441 ifp->if_flags |= IFF_RUNNING;
442 ifp->if_flags &= ~IFF_OACTIVE; /* just in case */
441 ifp->if_drv_flags |= IFF_DRV_RUNNING;
442 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; /* just in case */
443
444#ifdef EP_LOCAL_STATS
445 sc->rx_no_first = sc->rx_no_mbuf =
446 sc->rx_overrunf = sc->rx_overrunl = sc->tx_underrun = 0;
447#endif
448 EP_FSET(sc, F_RX_FIRST);
449 if (sc->top) {
450 m_freem(sc->top);

--- 24 unchanged lines hidden (view full) ---

475 struct mbuf *m, *m0;
476 int pad;
477
478 sc = ifp->if_softc;
479 if (sc->gone)
480 return;
481 EP_ASSERT_LOCKED(sc);
482 EP_BUSY_WAIT(sc);
443
444#ifdef EP_LOCAL_STATS
445 sc->rx_no_first = sc->rx_no_mbuf =
446 sc->rx_overrunf = sc->rx_overrunl = sc->tx_underrun = 0;
447#endif
448 EP_FSET(sc, F_RX_FIRST);
449 if (sc->top) {
450 m_freem(sc->top);

--- 24 unchanged lines hidden (view full) ---

475 struct mbuf *m, *m0;
476 int pad;
477
478 sc = ifp->if_softc;
479 if (sc->gone)
480 return;
481 EP_ASSERT_LOCKED(sc);
482 EP_BUSY_WAIT(sc);
483 if (ifp->if_flags & IFF_OACTIVE)
483 if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
484 return;
485startagain:
486 /* Sneak a peek at the next packet */
487 IF_DEQUEUE(&ifp->if_snd, m0);
488 if (m0 == NULL)
489 return;
490 for (len = 0, m = m0; m != NULL; m = m->m_next)
491 len += m->m_len;

--- 11 unchanged lines hidden (view full) ---

503 m_freem(m0);
504 goto readcheck;
505 }
506 if (CSR_READ_2(sc, EP_W1_FREE_TX) < len + pad + 4) {
507 /* no room in FIFO */
508 CSR_WRITE_2(sc, EP_COMMAND, SET_TX_AVAIL_THRESH | (len + pad + 4));
509 /* make sure */
510 if (CSR_READ_2(sc, EP_W1_FREE_TX) < len + pad + 4) {
484 return;
485startagain:
486 /* Sneak a peek at the next packet */
487 IF_DEQUEUE(&ifp->if_snd, m0);
488 if (m0 == NULL)
489 return;
490 for (len = 0, m = m0; m != NULL; m = m->m_next)
491 len += m->m_len;

--- 11 unchanged lines hidden (view full) ---

503 m_freem(m0);
504 goto readcheck;
505 }
506 if (CSR_READ_2(sc, EP_W1_FREE_TX) < len + pad + 4) {
507 /* no room in FIFO */
508 CSR_WRITE_2(sc, EP_COMMAND, SET_TX_AVAIL_THRESH | (len + pad + 4));
509 /* make sure */
510 if (CSR_READ_2(sc, EP_W1_FREE_TX) < len + pad + 4) {
511 ifp->if_flags |= IFF_OACTIVE;
511 ifp->if_drv_flags |= IFF_DRV_OACTIVE;
512 IF_PREPEND(&ifp->if_snd, m0);
513 goto done;
514 }
515 } else
516 CSR_WRITE_2(sc, EP_COMMAND,
517 SET_TX_AVAIL_THRESH | EP_THRESH_DISABLE);
518
519 /* XXX 4.x and earlier would splhigh here */

--- 82 unchanged lines hidden (view full) ---

602 /* first acknowledge all interrupt sources */
603 CSR_WRITE_2(sc, EP_COMMAND, ACK_INTR | (status & S_MASK));
604
605 if (status & (S_RX_COMPLETE | S_RX_EARLY))
606 epread(sc);
607 if (status & S_TX_AVAIL) {
608 /* we need ACK */
609 ifp->if_timer = 0;
512 IF_PREPEND(&ifp->if_snd, m0);
513 goto done;
514 }
515 } else
516 CSR_WRITE_2(sc, EP_COMMAND,
517 SET_TX_AVAIL_THRESH | EP_THRESH_DISABLE);
518
519 /* XXX 4.x and earlier would splhigh here */

--- 82 unchanged lines hidden (view full) ---

602 /* first acknowledge all interrupt sources */
603 CSR_WRITE_2(sc, EP_COMMAND, ACK_INTR | (status & S_MASK));
604
605 if (status & (S_RX_COMPLETE | S_RX_EARLY))
606 epread(sc);
607 if (status & S_TX_AVAIL) {
608 /* we need ACK */
609 ifp->if_timer = 0;
610 ifp->if_flags &= ~IFF_OACTIVE;
610 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
611 GO_WINDOW(sc, 1);
612 CSR_READ_2(sc, EP_W1_FREE_TX);
613 epstart_locked(ifp);
614 }
615 if (status & S_CARD_FAILURE) {
616 ifp->if_timer = 0;
617#ifdef EP_LOCAL_STATS
618 device_printf(sc->dev, "\n\tStatus: %x\n", status);

--- 57 unchanged lines hidden (view full) ---

676 */
677 if (ifp->if_snd.ifq_head)
678 CSR_WRITE_2(sc, EP_COMMAND,
679 SET_TX_AVAIL_THRESH | 8);
680 }
681 /* pops up the next status */
682 CSR_WRITE_1(sc, EP_W1_TX_STATUS, 0x0);
683 } /* while */
611 GO_WINDOW(sc, 1);
612 CSR_READ_2(sc, EP_W1_FREE_TX);
613 epstart_locked(ifp);
614 }
615 if (status & S_CARD_FAILURE) {
616 ifp->if_timer = 0;
617#ifdef EP_LOCAL_STATS
618 device_printf(sc->dev, "\n\tStatus: %x\n", status);

--- 57 unchanged lines hidden (view full) ---

676 */
677 if (ifp->if_snd.ifq_head)
678 CSR_WRITE_2(sc, EP_COMMAND,
679 SET_TX_AVAIL_THRESH | 8);
680 }
681 /* pops up the next status */
682 CSR_WRITE_1(sc, EP_W1_TX_STATUS, 0x0);
683 } /* while */
684 ifp->if_flags &= ~IFF_OACTIVE;
684 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
685 GO_WINDOW(sc, 1);
686 CSR_READ_2(sc, EP_W1_FREE_TX);
687 epstart_locked(ifp);
688 } /* end TX_COMPLETE */
689 }
690
691 CSR_WRITE_2(sc, EP_COMMAND, C_INTR_LATCH); /* ACK int Latch */
692

--- 212 unchanged lines hidden (view full) ---

905 struct ep_softc *sc = ifp->if_softc;
906 struct ifreq *ifr = (struct ifreq *) data;
907 int error = 0;
908
909 switch (cmd) {
910 case SIOCSIFFLAGS:
911 EP_LOCK(sc);
912 if (((ifp->if_flags & IFF_UP) == 0) &&
685 GO_WINDOW(sc, 1);
686 CSR_READ_2(sc, EP_W1_FREE_TX);
687 epstart_locked(ifp);
688 } /* end TX_COMPLETE */
689 }
690
691 CSR_WRITE_2(sc, EP_COMMAND, C_INTR_LATCH); /* ACK int Latch */
692

--- 212 unchanged lines hidden (view full) ---

905 struct ep_softc *sc = ifp->if_softc;
906 struct ifreq *ifr = (struct ifreq *) data;
907 int error = 0;
908
909 switch (cmd) {
910 case SIOCSIFFLAGS:
911 EP_LOCK(sc);
912 if (((ifp->if_flags & IFF_UP) == 0) &&
913 (ifp->if_flags & IFF_RUNNING)) {
914 ifp->if_flags &= ~IFF_RUNNING;
913 (ifp->if_drv_flags & IFF_DRV_RUNNING)) {
914 ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
915 epstop(sc);
916 } else
917 /* reinitialize card on any parameter change */
918 epinit_locked(sc);
919 EP_UNLOCK(sc);
920 break;
921#ifdef notdef
922 case SIOCGHWADDR:

--- 28 unchanged lines hidden (view full) ---

951
952static void
953epwatchdog(struct ifnet *ifp)
954{
955 struct ep_softc *sc = ifp->if_softc;
956
957 if (sc->gone)
958 return;
915 epstop(sc);
916 } else
917 /* reinitialize card on any parameter change */
918 epinit_locked(sc);
919 EP_UNLOCK(sc);
920 break;
921#ifdef notdef
922 case SIOCGHWADDR:

--- 28 unchanged lines hidden (view full) ---

951
952static void
953epwatchdog(struct ifnet *ifp)
954{
955 struct ep_softc *sc = ifp->if_softc;
956
957 if (sc->gone)
958 return;
959 ifp->if_flags &= ~IFF_OACTIVE;
959 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
960 epstart(ifp);
961 ep_intr(ifp->if_softc);
962}
963
964static void
965epstop(struct ep_softc *sc)
966{
967 if (sc->gone)

--- 19 unchanged lines hidden ---
960 epstart(ifp);
961 ep_intr(ifp->if_softc);
962}
963
964static void
965epstop(struct ep_softc *sc)
966{
967 if (sc->gone)

--- 19 unchanged lines hidden ---