if_re.c (231622) | if_re.c (232145) |
---|---|
1/*- 2 * Copyright (c) 1997, 1998-2003 3 * Bill Paul <wpaul@windriver.com>. 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 --- 17 unchanged lines hidden (view full) --- 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 30 * THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1997, 1998-2003 3 * Bill Paul <wpaul@windriver.com>. 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 --- 17 unchanged lines hidden (view full) --- 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 30 * THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33#include <sys/cdefs.h> |
34__FBSDID("$FreeBSD: head/sys/dev/re/if_re.c 231622 2012-02-14 00:54:40Z yongari $"); | 34__FBSDID("$FreeBSD: head/sys/dev/re/if_re.c 232145 2012-02-25 04:54:51Z yongari $"); |
35 36/* 37 * RealTek 8139C+/8169/8169S/8110S/8168/8111/8101E PCI NIC driver 38 * 39 * Written by Bill Paul <wpaul@windriver.com> 40 * Senior Networking Software Engineer 41 * Wind River Systems 42 */ --- 1429 unchanged lines hidden (view full) --- 1472 case RL_HWREV_8169S: 1473 case RL_HWREV_8110S: 1474 sc->rl_flags |= RL_FLAG_MACRESET; 1475 break; 1476 default: 1477 break; 1478 } 1479 | 35 36/* 37 * RealTek 8139C+/8169/8169S/8110S/8168/8111/8101E PCI NIC driver 38 * 39 * Written by Bill Paul <wpaul@windriver.com> 40 * Senior Networking Software Engineer 41 * Wind River Systems 42 */ --- 1429 unchanged lines hidden (view full) --- 1472 case RL_HWREV_8169S: 1473 case RL_HWREV_8110S: 1474 sc->rl_flags |= RL_FLAG_MACRESET; 1475 break; 1476 default: 1477 break; 1478 } 1479 |
1480 if (sc->rl_hwrev->rl_rev == RL_HWREV_8139CPLUS) { 1481 sc->rl_cfg0 = RL_8139_CFG0; 1482 sc->rl_cfg1 = RL_8139_CFG1; 1483 sc->rl_cfg2 = 0; 1484 sc->rl_cfg3 = RL_8139_CFG3; 1485 sc->rl_cfg4 = RL_8139_CFG4; 1486 sc->rl_cfg5 = RL_8139_CFG5; 1487 } else { 1488 sc->rl_cfg0 = RL_CFG0; 1489 sc->rl_cfg1 = RL_CFG1; 1490 sc->rl_cfg2 = RL_CFG2; 1491 sc->rl_cfg3 = RL_CFG3; 1492 sc->rl_cfg4 = RL_CFG4; 1493 sc->rl_cfg5 = RL_CFG5; 1494 } 1495 |
|
1480 /* Reset the adapter. */ 1481 RL_LOCK(sc); 1482 re_reset(sc); 1483 RL_UNLOCK(sc); 1484 1485 /* Enable PME. */ 1486 CSR_WRITE_1(sc, RL_EECMD, RL_EE_MODE); | 1496 /* Reset the adapter. */ 1497 RL_LOCK(sc); 1498 re_reset(sc); 1499 RL_UNLOCK(sc); 1500 1501 /* Enable PME. */ 1502 CSR_WRITE_1(sc, RL_EECMD, RL_EE_MODE); |
1487 cfg = CSR_READ_1(sc, RL_CFG1); | 1503 cfg = CSR_READ_1(sc, sc->rl_cfg1); |
1488 cfg |= RL_CFG1_PME; | 1504 cfg |= RL_CFG1_PME; |
1489 CSR_WRITE_1(sc, RL_CFG1, cfg); 1490 cfg = CSR_READ_1(sc, RL_CFG5); | 1505 CSR_WRITE_1(sc, sc->rl_cfg1, cfg); 1506 cfg = CSR_READ_1(sc, sc->rl_cfg5); |
1491 cfg &= RL_CFG5_PME_STS; | 1507 cfg &= RL_CFG5_PME_STS; |
1492 CSR_WRITE_1(sc, RL_CFG5, cfg); | 1508 CSR_WRITE_1(sc, sc->rl_cfg5, cfg); |
1493 CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_OFF); 1494 1495 if ((sc->rl_flags & RL_FLAG_PAR) != 0) { 1496 /* 1497 * XXX Should have a better way to extract station 1498 * address from EEPROM. 1499 */ 1500 for (i = 0; i < ETHER_ADDR_LEN; i++) --- 1445 unchanged lines hidden (view full) --- 2946 2947 if (sc->rl_hwrev->rl_rev == RL_HWREV_8168E_VL) { 2948 pci_set_max_read_req(sc->rl_dev, 4096); 2949 return; 2950 } 2951 2952 CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_WRITECFG); 2953 if (jumbo != 0) { | 1509 CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_OFF); 1510 1511 if ((sc->rl_flags & RL_FLAG_PAR) != 0) { 1512 /* 1513 * XXX Should have a better way to extract station 1514 * address from EEPROM. 1515 */ 1516 for (i = 0; i < ETHER_ADDR_LEN; i++) --- 1445 unchanged lines hidden (view full) --- 2962 2963 if (sc->rl_hwrev->rl_rev == RL_HWREV_8168E_VL) { 2964 pci_set_max_read_req(sc->rl_dev, 4096); 2965 return; 2966 } 2967 2968 CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_WRITECFG); 2969 if (jumbo != 0) { |
2954 CSR_WRITE_1(sc, RL_CFG3, CSR_READ_1(sc, RL_CFG3) | | 2970 CSR_WRITE_1(sc, sc->rl_cfg3, CSR_READ_1(sc, sc->rl_cfg3) | |
2955 RL_CFG3_JUMBO_EN0); 2956 switch (sc->rl_hwrev->rl_rev) { 2957 case RL_HWREV_8168DP: 2958 break; 2959 case RL_HWREV_8168E: | 2971 RL_CFG3_JUMBO_EN0); 2972 switch (sc->rl_hwrev->rl_rev) { 2973 case RL_HWREV_8168DP: 2974 break; 2975 case RL_HWREV_8168E: |
2960 CSR_WRITE_1(sc, RL_CFG4, CSR_READ_1(sc, RL_CFG4) | 2961 0x01); | 2976 CSR_WRITE_1(sc, sc->rl_cfg4, 2977 CSR_READ_1(sc, sc->rl_cfg4) | 0x01); |
2962 break; 2963 default: | 2978 break; 2979 default: |
2964 CSR_WRITE_1(sc, RL_CFG4, CSR_READ_1(sc, RL_CFG4) | 2965 RL_CFG4_JUMBO_EN1); | 2980 CSR_WRITE_1(sc, sc->rl_cfg4, 2981 CSR_READ_1(sc, sc->rl_cfg4) | RL_CFG4_JUMBO_EN1); |
2966 } 2967 } else { | 2982 } 2983 } else { |
2968 CSR_WRITE_1(sc, RL_CFG3, CSR_READ_1(sc, RL_CFG3) & | 2984 CSR_WRITE_1(sc, sc->rl_cfg3, CSR_READ_1(sc, sc->rl_cfg3) & |
2969 ~RL_CFG3_JUMBO_EN0); 2970 switch (sc->rl_hwrev->rl_rev) { 2971 case RL_HWREV_8168DP: 2972 break; 2973 case RL_HWREV_8168E: | 2985 ~RL_CFG3_JUMBO_EN0); 2986 switch (sc->rl_hwrev->rl_rev) { 2987 case RL_HWREV_8168DP: 2988 break; 2989 case RL_HWREV_8168E: |
2974 CSR_WRITE_1(sc, RL_CFG4, CSR_READ_1(sc, RL_CFG4) & 2975 ~0x01); | 2990 CSR_WRITE_1(sc, sc->rl_cfg4, 2991 CSR_READ_1(sc, sc->rl_cfg4) & ~0x01); |
2976 break; 2977 default: | 2992 break; 2993 default: |
2978 CSR_WRITE_1(sc, RL_CFG4, CSR_READ_1(sc, RL_CFG4) & 2979 ~RL_CFG4_JUMBO_EN1); | 2994 CSR_WRITE_1(sc, sc->rl_cfg4, 2995 CSR_READ_1(sc, sc->rl_cfg4) & ~RL_CFG4_JUMBO_EN1); |
2980 } 2981 } 2982 CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_OFF); 2983 2984 switch (sc->rl_hwrev->rl_rev) { 2985 case RL_HWREV_8168DP: 2986 pci_set_max_read_req(sc->rl_dev, 4096); 2987 break; --- 96 unchanged lines hidden (view full) --- 3084 /* XXX magic. */ 3085 cfg |= 0x0001; 3086 } else 3087 cfg |= RL_CPLUSCMD_RXENB | RL_CPLUSCMD_TXENB; 3088 CSR_WRITE_2(sc, RL_CPLUS_CMD, cfg); 3089 if (sc->rl_hwrev->rl_rev == RL_HWREV_8169_8110SC || 3090 sc->rl_hwrev->rl_rev == RL_HWREV_8169_8110SCE) { 3091 reg = 0x000fff00; | 2996 } 2997 } 2998 CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_OFF); 2999 3000 switch (sc->rl_hwrev->rl_rev) { 3001 case RL_HWREV_8168DP: 3002 pci_set_max_read_req(sc->rl_dev, 4096); 3003 break; --- 96 unchanged lines hidden (view full) --- 3100 /* XXX magic. */ 3101 cfg |= 0x0001; 3102 } else 3103 cfg |= RL_CPLUSCMD_RXENB | RL_CPLUSCMD_TXENB; 3104 CSR_WRITE_2(sc, RL_CPLUS_CMD, cfg); 3105 if (sc->rl_hwrev->rl_rev == RL_HWREV_8169_8110SC || 3106 sc->rl_hwrev->rl_rev == RL_HWREV_8169_8110SCE) { 3107 reg = 0x000fff00; |
3092 if ((CSR_READ_1(sc, RL_CFG2) & RL_CFG2_PCI66MHZ) != 0) | 3108 if ((CSR_READ_1(sc, sc->rl_cfg2) & RL_CFG2_PCI66MHZ) != 0) |
3093 reg |= 0x000000ff; 3094 if (sc->rl_hwrev->rl_rev == RL_HWREV_8169_8110SCE) 3095 reg |= 0x00f00000; 3096 CSR_WRITE_4(sc, 0x7c, reg); 3097 /* Disable interrupt mitigation. */ 3098 CSR_WRITE_2(sc, 0xe2, 0); 3099 } 3100 /* --- 148 unchanged lines hidden (view full) --- 3249 CSR_WRITE_2(sc, RL_MAXRXPKTLEN, RE_RX_DESC_BUFLEN); 3250 } else 3251 CSR_WRITE_2(sc, RL_MAXRXPKTLEN, 16383); 3252 } 3253 3254 if (sc->rl_testmode) 3255 return; 3256 | 3109 reg |= 0x000000ff; 3110 if (sc->rl_hwrev->rl_rev == RL_HWREV_8169_8110SCE) 3111 reg |= 0x00f00000; 3112 CSR_WRITE_4(sc, 0x7c, reg); 3113 /* Disable interrupt mitigation. */ 3114 CSR_WRITE_2(sc, 0xe2, 0); 3115 } 3116 /* --- 148 unchanged lines hidden (view full) --- 3265 CSR_WRITE_2(sc, RL_MAXRXPKTLEN, RE_RX_DESC_BUFLEN); 3266 } else 3267 CSR_WRITE_2(sc, RL_MAXRXPKTLEN, 16383); 3268 } 3269 3270 if (sc->rl_testmode) 3271 return; 3272 |
3257 CSR_WRITE_1(sc, RL_CFG1, CSR_READ_1(sc, RL_CFG1) | RL_CFG1_DRVLOAD); | 3273 CSR_WRITE_1(sc, sc->rl_cfg1, CSR_READ_1(sc, sc->rl_cfg1) | 3274 RL_CFG1_DRVLOAD); |
3258 3259 ifp->if_drv_flags |= IFF_DRV_RUNNING; 3260 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; 3261 3262 sc->rl_flags &= ~RL_FLAG_LINK; 3263 mii_mediachg(mii); 3264 3265 sc->rl_watchdog_timer = 0; --- 516 unchanged lines hidden (view full) --- 3782 re_set_linkspeed(sc); 3783 if ((sc->rl_flags & RL_FLAG_WOLRXENB) != 0) 3784 CSR_WRITE_1(sc, RL_COMMAND, RL_CMD_RX_ENB); 3785 } 3786 /* Enable config register write. */ 3787 CSR_WRITE_1(sc, RL_EECMD, RL_EE_MODE); 3788 3789 /* Enable PME. */ | 3275 3276 ifp->if_drv_flags |= IFF_DRV_RUNNING; 3277 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; 3278 3279 sc->rl_flags &= ~RL_FLAG_LINK; 3280 mii_mediachg(mii); 3281 3282 sc->rl_watchdog_timer = 0; --- 516 unchanged lines hidden (view full) --- 3799 re_set_linkspeed(sc); 3800 if ((sc->rl_flags & RL_FLAG_WOLRXENB) != 0) 3801 CSR_WRITE_1(sc, RL_COMMAND, RL_CMD_RX_ENB); 3802 } 3803 /* Enable config register write. */ 3804 CSR_WRITE_1(sc, RL_EECMD, RL_EE_MODE); 3805 3806 /* Enable PME. */ |
3790 v = CSR_READ_1(sc, RL_CFG1); | 3807 v = CSR_READ_1(sc, sc->rl_cfg1); |
3791 v &= ~RL_CFG1_PME; 3792 if ((ifp->if_capenable & IFCAP_WOL) != 0) 3793 v |= RL_CFG1_PME; | 3808 v &= ~RL_CFG1_PME; 3809 if ((ifp->if_capenable & IFCAP_WOL) != 0) 3810 v |= RL_CFG1_PME; |
3794 CSR_WRITE_1(sc, RL_CFG1, v); | 3811 CSR_WRITE_1(sc, sc->rl_cfg1, v); |
3795 | 3812 |
3796 v = CSR_READ_1(sc, RL_CFG3); | 3813 v = CSR_READ_1(sc, sc->rl_cfg3); |
3797 v &= ~(RL_CFG3_WOL_LINK | RL_CFG3_WOL_MAGIC); 3798 if ((ifp->if_capenable & IFCAP_WOL_MAGIC) != 0) 3799 v |= RL_CFG3_WOL_MAGIC; | 3814 v &= ~(RL_CFG3_WOL_LINK | RL_CFG3_WOL_MAGIC); 3815 if ((ifp->if_capenable & IFCAP_WOL_MAGIC) != 0) 3816 v |= RL_CFG3_WOL_MAGIC; |
3800 CSR_WRITE_1(sc, RL_CFG3, v); | 3817 CSR_WRITE_1(sc, sc->rl_cfg3, v); |
3801 | 3818 |
3802 v = CSR_READ_1(sc, RL_CFG5); | 3819 v = CSR_READ_1(sc, sc->rl_cfg5); |
3803 v &= ~(RL_CFG5_WOL_BCAST | RL_CFG5_WOL_MCAST | RL_CFG5_WOL_UCAST | 3804 RL_CFG5_WOL_LANWAKE); 3805 if ((ifp->if_capenable & IFCAP_WOL_UCAST) != 0) 3806 v |= RL_CFG5_WOL_UCAST; 3807 if ((ifp->if_capenable & IFCAP_WOL_MCAST) != 0) 3808 v |= RL_CFG5_WOL_MCAST | RL_CFG5_WOL_BCAST; 3809 if ((ifp->if_capenable & IFCAP_WOL) != 0) 3810 v |= RL_CFG5_WOL_LANWAKE; | 3820 v &= ~(RL_CFG5_WOL_BCAST | RL_CFG5_WOL_MCAST | RL_CFG5_WOL_UCAST | 3821 RL_CFG5_WOL_LANWAKE); 3822 if ((ifp->if_capenable & IFCAP_WOL_UCAST) != 0) 3823 v |= RL_CFG5_WOL_UCAST; 3824 if ((ifp->if_capenable & IFCAP_WOL_MCAST) != 0) 3825 v |= RL_CFG5_WOL_MCAST | RL_CFG5_WOL_BCAST; 3826 if ((ifp->if_capenable & IFCAP_WOL) != 0) 3827 v |= RL_CFG5_WOL_LANWAKE; |
3811 CSR_WRITE_1(sc, RL_CFG5, v); | 3828 CSR_WRITE_1(sc, sc->rl_cfg5, v); |
3812 3813 /* Config register write done. */ 3814 CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_OFF); 3815 3816 if ((ifp->if_capenable & IFCAP_WOL) == 0 && 3817 (sc->rl_flags & RL_FLAG_PHYWAKE_PM) != 0) 3818 CSR_WRITE_1(sc, RL_PMCH, CSR_READ_1(sc, RL_PMCH) & ~0x80); 3819 /* --- 19 unchanged lines hidden (view full) --- 3839 RL_LOCK_ASSERT(sc); 3840 3841 if (pci_find_cap(sc->rl_dev, PCIY_PMG, &pmc) != 0) 3842 return; 3843 3844 /* Enable config register write. */ 3845 CSR_WRITE_1(sc, RL_EECMD, RL_EE_MODE); 3846 | 3829 3830 /* Config register write done. */ 3831 CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_OFF); 3832 3833 if ((ifp->if_capenable & IFCAP_WOL) == 0 && 3834 (sc->rl_flags & RL_FLAG_PHYWAKE_PM) != 0) 3835 CSR_WRITE_1(sc, RL_PMCH, CSR_READ_1(sc, RL_PMCH) & ~0x80); 3836 /* --- 19 unchanged lines hidden (view full) --- 3856 RL_LOCK_ASSERT(sc); 3857 3858 if (pci_find_cap(sc->rl_dev, PCIY_PMG, &pmc) != 0) 3859 return; 3860 3861 /* Enable config register write. */ 3862 CSR_WRITE_1(sc, RL_EECMD, RL_EE_MODE); 3863 |
3847 v = CSR_READ_1(sc, RL_CFG3); | 3864 v = CSR_READ_1(sc, sc->rl_cfg3); |
3848 v &= ~(RL_CFG3_WOL_LINK | RL_CFG3_WOL_MAGIC); | 3865 v &= ~(RL_CFG3_WOL_LINK | RL_CFG3_WOL_MAGIC); |
3849 CSR_WRITE_1(sc, RL_CFG3, v); | 3866 CSR_WRITE_1(sc, sc->rl_cfg3, v); |
3850 3851 /* Config register write done. */ 3852 CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_OFF); 3853 | 3867 3868 /* Config register write done. */ 3869 CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_OFF); 3870 |
3854 v = CSR_READ_1(sc, RL_CFG5); | 3871 v = CSR_READ_1(sc, sc->rl_cfg5); |
3855 v &= ~(RL_CFG5_WOL_BCAST | RL_CFG5_WOL_MCAST | RL_CFG5_WOL_UCAST); 3856 v &= ~RL_CFG5_WOL_LANWAKE; | 3872 v &= ~(RL_CFG5_WOL_BCAST | RL_CFG5_WOL_MCAST | RL_CFG5_WOL_UCAST); 3873 v &= ~RL_CFG5_WOL_LANWAKE; |
3857 CSR_WRITE_1(sc, RL_CFG5, v); | 3874 CSR_WRITE_1(sc, sc->rl_cfg5, v); |
3858} 3859 3860static void 3861re_add_sysctls(struct rl_softc *sc) 3862{ 3863 struct sysctl_ctx_list *ctx; 3864 struct sysctl_oid_list *children; 3865 int error; --- 130 unchanged lines hidden --- | 3875} 3876 3877static void 3878re_add_sysctls(struct rl_softc *sc) 3879{ 3880 struct sysctl_ctx_list *ctx; 3881 struct sysctl_oid_list *children; 3882 int error; --- 130 unchanged lines hidden --- |