Deleted Added
full compact
cxgb_main.c (237263) cxgb_main.c (237832)
1/**************************************************************************
2
3Copyright (c) 2007-2009, Chelsio Inc.
4All rights reserved.
5
6Redistribution and use in source and binary forms, with or without
7modification, are permitted provided that the following conditions are met:
8

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

23INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26POSSIBILITY OF SUCH DAMAGE.
27
28***************************************************************************/
29
30#include <sys/cdefs.h>
1/**************************************************************************
2
3Copyright (c) 2007-2009, Chelsio Inc.
4All rights reserved.
5
6Redistribution and use in source and binary forms, with or without
7modification, are permitted provided that the following conditions are met:
8

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

23INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26POSSIBILITY OF SUCH DAMAGE.
27
28***************************************************************************/
29
30#include <sys/cdefs.h>
31__FBSDID("$FreeBSD: head/sys/dev/cxgb/cxgb_main.c 237263 2012-06-19 07:34:13Z np $");
31__FBSDID("$FreeBSD: head/sys/dev/cxgb/cxgb_main.c 237832 2012-06-30 02:11:53Z np $");
32
33#include "opt_inet.h"
34
35#include <sys/param.h>
36#include <sys/systm.h>
37#include <sys/kernel.h>
38#include <sys/bus.h>
39#include <sys/module.h>

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

981
982 pi->port_cdev->si_drv1 = (void *)pi;
983
984 return (0);
985}
986
987#define CXGB_CAP (IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | \
988 IFCAP_VLAN_HWCSUM | IFCAP_TSO | IFCAP_JUMBO_MTU | IFCAP_LRO | \
32
33#include "opt_inet.h"
34
35#include <sys/param.h>
36#include <sys/systm.h>
37#include <sys/kernel.h>
38#include <sys/bus.h>
39#include <sys/module.h>

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

981
982 pi->port_cdev->si_drv1 = (void *)pi;
983
984 return (0);
985}
986
987#define CXGB_CAP (IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | \
988 IFCAP_VLAN_HWCSUM | IFCAP_TSO | IFCAP_JUMBO_MTU | IFCAP_LRO | \
989 IFCAP_VLAN_HWTSO | IFCAP_LINKSTATE)
989 IFCAP_VLAN_HWTSO | IFCAP_LINKSTATE | IFCAP_HWCSUM_IPV6)
990#define CXGB_CAP_ENABLE CXGB_CAP
991
992static int
993cxgb_port_attach(device_t dev)
994{
995 struct port_info *p;
996 struct ifnet *ifp;
997 int err;

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

1022 ifp->if_qflush = cxgb_qflush;
1023
1024 ifp->if_capabilities = CXGB_CAP;
1025#ifdef TCP_OFFLOAD
1026 if (is_offload(sc))
1027 ifp->if_capabilities |= IFCAP_TOE4;
1028#endif
1029 ifp->if_capenable = CXGB_CAP_ENABLE;
990#define CXGB_CAP_ENABLE CXGB_CAP
991
992static int
993cxgb_port_attach(device_t dev)
994{
995 struct port_info *p;
996 struct ifnet *ifp;
997 int err;

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

1022 ifp->if_qflush = cxgb_qflush;
1023
1024 ifp->if_capabilities = CXGB_CAP;
1025#ifdef TCP_OFFLOAD
1026 if (is_offload(sc))
1027 ifp->if_capabilities |= IFCAP_TOE4;
1028#endif
1029 ifp->if_capenable = CXGB_CAP_ENABLE;
1030 ifp->if_hwassist = CSUM_TCP | CSUM_UDP | CSUM_IP | CSUM_TSO;
1030 ifp->if_hwassist = CSUM_TCP | CSUM_UDP | CSUM_IP | CSUM_TSO |
1031 CSUM_UDP_IPV6 | CSUM_TCP_IPV6;
1031
1032 /*
1033 * Disable TSO on 4-port - it isn't supported by the firmware.
1034 */
1035 if (sc->params.nports > 2) {
1036 ifp->if_capabilities &= ~(IFCAP_TSO | IFCAP_VLAN_HWTSO);
1037 ifp->if_capenable &= ~(IFCAP_TSO | IFCAP_VLAN_HWTSO);
1038 ifp->if_hwassist &= ~CSUM_TSO;

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

1945 if (error)
1946 goto fail;
1947
1948 mask = ifr->ifr_reqcap ^ ifp->if_capenable;
1949 if (mask & IFCAP_TXCSUM) {
1950 ifp->if_capenable ^= IFCAP_TXCSUM;
1951 ifp->if_hwassist ^= (CSUM_TCP | CSUM_UDP | CSUM_IP);
1952
1032
1033 /*
1034 * Disable TSO on 4-port - it isn't supported by the firmware.
1035 */
1036 if (sc->params.nports > 2) {
1037 ifp->if_capabilities &= ~(IFCAP_TSO | IFCAP_VLAN_HWTSO);
1038 ifp->if_capenable &= ~(IFCAP_TSO | IFCAP_VLAN_HWTSO);
1039 ifp->if_hwassist &= ~CSUM_TSO;

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

1946 if (error)
1947 goto fail;
1948
1949 mask = ifr->ifr_reqcap ^ ifp->if_capenable;
1950 if (mask & IFCAP_TXCSUM) {
1951 ifp->if_capenable ^= IFCAP_TXCSUM;
1952 ifp->if_hwassist ^= (CSUM_TCP | CSUM_UDP | CSUM_IP);
1953
1953 if (IFCAP_TSO & ifp->if_capenable &&
1954 if (IFCAP_TSO4 & ifp->if_capenable &&
1954 !(IFCAP_TXCSUM & ifp->if_capenable)) {
1955 !(IFCAP_TXCSUM & ifp->if_capenable)) {
1955 ifp->if_capenable &= ~IFCAP_TSO;
1956 ifp->if_hwassist &= ~CSUM_TSO;
1956 ifp->if_capenable &= ~IFCAP_TSO4;
1957 if_printf(ifp,
1957 if_printf(ifp,
1958 "tso disabled due to -txcsum.\n");
1958 "tso4 disabled due to -txcsum.\n");
1959 }
1960 }
1959 }
1960 }
1961 if (mask & IFCAP_TXCSUM_IPV6) {
1962 ifp->if_capenable ^= IFCAP_TXCSUM_IPV6;
1963 ifp->if_hwassist ^= (CSUM_UDP_IPV6 | CSUM_TCP_IPV6);
1964
1965 if (IFCAP_TSO6 & ifp->if_capenable &&
1966 !(IFCAP_TXCSUM_IPV6 & ifp->if_capenable)) {
1967 ifp->if_capenable &= ~IFCAP_TSO6;
1968 if_printf(ifp,
1969 "tso6 disabled due to -txcsum6.\n");
1970 }
1971 }
1961 if (mask & IFCAP_RXCSUM)
1962 ifp->if_capenable ^= IFCAP_RXCSUM;
1972 if (mask & IFCAP_RXCSUM)
1973 ifp->if_capenable ^= IFCAP_RXCSUM;
1963 if (mask & IFCAP_TSO) {
1964 ifp->if_capenable ^= IFCAP_TSO;
1974 if (mask & IFCAP_RXCSUM_IPV6)
1975 ifp->if_capenable ^= IFCAP_RXCSUM_IPV6;
1965
1976
1966 if (IFCAP_TSO & ifp->if_capenable) {
1967 if (IFCAP_TXCSUM & ifp->if_capenable)
1968 ifp->if_hwassist |= CSUM_TSO;
1969 else {
1970 ifp->if_capenable &= ~IFCAP_TSO;
1971 ifp->if_hwassist &= ~CSUM_TSO;
1972 if_printf(ifp,
1973 "enable txcsum first.\n");
1974 error = EAGAIN;
1975 }
1976 } else
1977 ifp->if_hwassist &= ~CSUM_TSO;
1977 /*
1978 * Note that we leave CSUM_TSO alone (it is always set). The
1979 * kernel takes both IFCAP_TSOx and CSUM_TSO into account before
1980 * sending a TSO request our way, so it's sufficient to toggle
1981 * IFCAP_TSOx only.
1982 */
1983 if (mask & IFCAP_TSO4) {
1984 if (!(IFCAP_TSO4 & ifp->if_capenable) &&
1985 !(IFCAP_TXCSUM & ifp->if_capenable)) {
1986 if_printf(ifp, "enable txcsum first.\n");
1987 error = EAGAIN;
1988 goto fail;
1989 }
1990 ifp->if_capenable ^= IFCAP_TSO4;
1978 }
1991 }
1992 if (mask & IFCAP_TSO6) {
1993 if (!(IFCAP_TSO6 & ifp->if_capenable) &&
1994 !(IFCAP_TXCSUM_IPV6 & ifp->if_capenable)) {
1995 if_printf(ifp, "enable txcsum6 first.\n");
1996 error = EAGAIN;
1997 goto fail;
1998 }
1999 ifp->if_capenable ^= IFCAP_TSO6;
2000 }
1979 if (mask & IFCAP_LRO) {
1980 ifp->if_capenable ^= IFCAP_LRO;
1981
1982 /* Safe to do this even if cxgb_up not called yet */
1983 cxgb_set_lro(p, ifp->if_capenable & IFCAP_LRO);
1984 }
1985#ifdef TCP_OFFLOAD
1986 if (mask & IFCAP_TOE4) {

--- 1520 unchanged lines hidden ---
2001 if (mask & IFCAP_LRO) {
2002 ifp->if_capenable ^= IFCAP_LRO;
2003
2004 /* Safe to do this even if cxgb_up not called yet */
2005 cxgb_set_lro(p, ifp->if_capenable & IFCAP_LRO);
2006 }
2007#ifdef TCP_OFFLOAD
2008 if (mask & IFCAP_TOE4) {

--- 1520 unchanged lines hidden ---