Deleted Added
sdiff udiff text old ( 237263 ) new ( 237832 )
full compact
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 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 | \
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;
1030 ifp->if_hwassist = CSUM_TCP | CSUM_UDP | CSUM_IP | CSUM_TSO |
1031 CSUM_UDP_IPV6 | CSUM_TCP_IPV6;
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
1954 if (IFCAP_TSO4 & ifp->if_capenable &&
1955 !(IFCAP_TXCSUM & ifp->if_capenable)) {
1956 ifp->if_capenable &= ~IFCAP_TSO4;
1957 if_printf(ifp,
1958 "tso4 disabled due to -txcsum.\n");
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 }
1972 if (mask & IFCAP_RXCSUM)
1973 ifp->if_capenable ^= IFCAP_RXCSUM;
1974 if (mask & IFCAP_RXCSUM_IPV6)
1975 ifp->if_capenable ^= IFCAP_RXCSUM_IPV6;
1976
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;
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 }
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 ---