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 --- |