if_arge.c (234862) | if_arge.c (234907) |
---|---|
1/*- 2 * Copyright (c) 2009, Oleksandr Tymoshenko 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 --- 12 unchanged lines hidden (view full) --- 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 */ 27 28#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2009, Oleksandr Tymoshenko 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 --- 12 unchanged lines hidden (view full) --- 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 */ 27 28#include <sys/cdefs.h> |
29__FBSDID("$FreeBSD: head/sys/mips/atheros/if_arge.c 234862 2012-05-01 06:18:30Z adrian $"); | 29__FBSDID("$FreeBSD: head/sys/mips/atheros/if_arge.c 234907 2012-05-02 04:51:43Z adrian $"); |
30 31/* 32 * AR71XX gigabit ethernet driver 33 */ 34#ifdef HAVE_KERNEL_OPTION_HEADERS 35#include "opt_device_polling.h" 36#endif 37 --- 733 unchanged lines hidden (view full) --- 771 if (mii == NULL || ifp == NULL || 772 (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) { 773 return; 774 } 775 776 if (mii->mii_media_status & IFM_ACTIVE) { 777 778 media = IFM_SUBTYPE(mii->mii_media_active); | 30 31/* 32 * AR71XX gigabit ethernet driver 33 */ 34#ifdef HAVE_KERNEL_OPTION_HEADERS 35#include "opt_device_polling.h" 36#endif 37 --- 733 unchanged lines hidden (view full) --- 771 if (mii == NULL || ifp == NULL || 772 (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) { 773 return; 774 } 775 776 if (mii->mii_media_status & IFM_ACTIVE) { 777 778 media = IFM_SUBTYPE(mii->mii_media_active); |
779 | |
780 if (media != IFM_NONE) { 781 sc->arge_link_status = 1; 782 duplex = mii->mii_media_active & IFM_GMASK; | 779 if (media != IFM_NONE) { 780 sc->arge_link_status = 1; 781 duplex = mii->mii_media_active & IFM_GMASK; |
782 ARGEDEBUG(sc, ARGE_DBG_MII, "%s: media=%d, duplex=%d\n", 783 __func__, 784 media, 785 duplex); |
|
783 arge_set_pll(sc, media, duplex); 784 } 785 } else { 786 sc->arge_link_status = 0; 787 } 788} 789 790static void 791arge_set_pll(struct arge_softc *sc, int media, int duplex) 792{ 793 uint32_t cfg, ifcontrol, rx_filtmask; | 786 arge_set_pll(sc, media, duplex); 787 } 788 } else { 789 sc->arge_link_status = 0; 790 } 791} 792 793static void 794arge_set_pll(struct arge_softc *sc, int media, int duplex) 795{ 796 uint32_t cfg, ifcontrol, rx_filtmask; |
794 uint32_t fifo_tx; | 797 uint32_t fifo_tx, pll; |
795 int if_speed; 796 797 ARGEDEBUG(sc, ARGE_DBG_MII, "set_pll(%04x, %s)\n", media, 798 duplex == IFM_FDX ? "full" : "half"); 799 cfg = ARGE_READ(sc, AR71XX_MAC_CFG2); 800 cfg &= ~(MAC_CFG2_IFACE_MODE_1000 801 | MAC_CFG2_IFACE_MODE_10_100 802 | MAC_CFG2_FULL_DUPLEX); --- 24 unchanged lines hidden (view full) --- 827 if_speed = 1000; 828 break; 829 default: 830 if_speed = 100; 831 device_printf(sc->arge_dev, 832 "Unknown media %d\n", media); 833 } 834 | 798 int if_speed; 799 800 ARGEDEBUG(sc, ARGE_DBG_MII, "set_pll(%04x, %s)\n", media, 801 duplex == IFM_FDX ? "full" : "half"); 802 cfg = ARGE_READ(sc, AR71XX_MAC_CFG2); 803 cfg &= ~(MAC_CFG2_IFACE_MODE_1000 804 | MAC_CFG2_IFACE_MODE_10_100 805 | MAC_CFG2_FULL_DUPLEX); --- 24 unchanged lines hidden (view full) --- 830 if_speed = 1000; 831 break; 832 default: 833 if_speed = 100; 834 device_printf(sc->arge_dev, 835 "Unknown media %d\n", media); 836 } 837 |
838 ARGEDEBUG(sc, ARGE_DBG_MII, "%s: if_speed=%d\n", __func__, if_speed); 839 |
|
835 switch (ar71xx_soc) { 836 case AR71XX_SOC_AR7240: 837 case AR71XX_SOC_AR7241: 838 case AR71XX_SOC_AR7242: 839 fifo_tx = 0x01f00140; 840 break; 841 case AR71XX_SOC_AR9130: 842 case AR71XX_SOC_AR9132: --- 5 unchanged lines hidden (view full) --- 848 849 ARGE_WRITE(sc, AR71XX_MAC_CFG2, cfg); 850 ARGE_WRITE(sc, AR71XX_MAC_IFCONTROL, ifcontrol); 851 ARGE_WRITE(sc, AR71XX_MAC_FIFO_RX_FILTMASK, 852 rx_filtmask); 853 ARGE_WRITE(sc, AR71XX_MAC_FIFO_TX_THRESHOLD, fifo_tx); 854 855 /* set PLL registers */ | 840 switch (ar71xx_soc) { 841 case AR71XX_SOC_AR7240: 842 case AR71XX_SOC_AR7241: 843 case AR71XX_SOC_AR7242: 844 fifo_tx = 0x01f00140; 845 break; 846 case AR71XX_SOC_AR9130: 847 case AR71XX_SOC_AR9132: --- 5 unchanged lines hidden (view full) --- 853 854 ARGE_WRITE(sc, AR71XX_MAC_CFG2, cfg); 855 ARGE_WRITE(sc, AR71XX_MAC_IFCONTROL, ifcontrol); 856 ARGE_WRITE(sc, AR71XX_MAC_FIFO_RX_FILTMASK, 857 rx_filtmask); 858 ARGE_WRITE(sc, AR71XX_MAC_FIFO_TX_THRESHOLD, fifo_tx); 859 860 /* set PLL registers */ |
856 ar71xx_device_set_pll_ge(sc->arge_mac_unit, if_speed); | 861 pll = ar71xx_device_get_eth_pll(sc->arge_mac_unit, if_speed); 862 863 /* XXX ensure pll != 0 */ 864 ar71xx_device_set_pll_ge(sc->arge_mac_unit, if_speed, pll); 865 866 /* set MII registers */ 867 ar71xx_device_set_mii_speed(sc->arge_mac_unit, if_speed); |
857} 858 859 860static void 861arge_reset_dma(struct arge_softc *sc) 862{ 863 ARGE_WRITE(sc, AR71XX_DMA_RX_CONTROL, 0); 864 ARGE_WRITE(sc, AR71XX_DMA_TX_CONTROL, 0); --- 1242 unchanged lines hidden --- | 868} 869 870 871static void 872arge_reset_dma(struct arge_softc *sc) 873{ 874 ARGE_WRITE(sc, AR71XX_DMA_RX_CONTROL, 0); 875 ARGE_WRITE(sc, AR71XX_DMA_TX_CONTROL, 0); --- 1242 unchanged lines hidden --- |