netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mark Lord <kernel@teksavvy.com>
To: Ben Hutchings <bhutchings@solarflare.com>,
	David Miller <davem@davemloft.net>
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] drivers/net/usb/asix:  resync from vendor's copy
Date: Mon, 05 Dec 2011 09:41:44 -0500	[thread overview]
Message-ID: <4EDCD828.2090904@teksavvy.com> (raw)
In-Reply-To: <1320860895.2781.6.camel@bwh-desktop>

David / Ben / anyone..

I'm trying to puzzle out the rx/tx checksum feature flags,
and there does seem to be a lot of variance among drivers
as to how these are used.

The ASIX chips have hardware support for IP and TCP checksumming
for both IPv4 and IPv6.  So I'm thinking this code (below) is the
most appropriate method for use in asix.c:

------------------------------- asix.h -----------------------------------
...
#define AX_RXCOE_IPCE                   0x0001
#define AX_RXCOE_IPVE                   0x0002
#define AX_RXCOE_V6VE                   0x0004
#define AX_RXCOE_TCPE                   0x0008
#define AX_RXCOE_UDPE                   0x0010
#define AX_RXCOE_ICMP                   0x0020
#define AX_RXCOE_IGMP                   0x0040
#define AX_RXCOE_ICV6                   0x0080
#define AX_RXCOE_TCPV6                  0x0100
#define AX_RXCOE_UDPV6                  0x0200
#define AX_RXCOE_ICMV6                  0x0400
#define AX_RXCOE_IGMV6                  0x0800
#define AX_RXCOE_ICV6V6                 0x1000
#define AX_RXCOE_FOPC                   0x8000
#define AX_RXCOE_DEF_CSUM               (AX_RXCOE_IPCE  | AX_RXCOE_IPVE  | \
                                         AX_RXCOE_V6VE  | AX_RXCOE_TCPE  | \
                                         AX_RXCOE_UDPE  | AX_RXCOE_ICV6  | \
                                         AX_RXCOE_TCPV6 | AX_RXCOE_UDPV6)

#define AX_RXCOE_64TE                   0x0100
#define AX_RXCOE_PPPOE                  0x0200
#define AX_RXCOE_RPCE                   0x8000

#define AX_TXCOE_IP                     0x0001
#define AX_TXCOE_TCP                    0x0002
#define AX_TXCOE_UDP                    0x0004
#define AX_TXCOE_ICMP                   0x0008
#define AX_TXCOE_IGMP                   0x0010
#define AX_TXCOE_ICV6                   0x0020
#define AX_TXCOE_TCPV6                  0x0100
#define AX_TXCOE_UDPV6                  0x0200
#define AX_TXCOE_ICMV6                  0x0400
#define AX_TXCOE_IGMV6                  0x0800
#define AX_TXCOE_ICV6V6                 0x1000
#define AX_TXCOE_DEF_CSUM               (AX_TXCOE_TCP   | AX_TXCOE_UDP | \
                                         AX_TXCOE_TCPV6 | AX_TXCOE_UDPV6)
...
------------------------------- asix.c -----------------------------------

static int ax88772b_set_features(struct net_device *netdev, u32 features)
{
        struct usbnet *dev = netdev_priv(netdev);
        u16 tx_csum = (features & NETIF_F_HW_CSUM) ? AX_TXCOE_DEF_CSUM : 0;
        u16 rx_csum = (features & NETIF_F_RXCSUM ) ? AX_RXCOE_DEF_CSUM : 0;

        ax8817x_write_cmd(dev, AX_CMD_WRITE_TXCOE_CTL, tx_csum, 0, 0, NULL);
        ax8817x_write_cmd(dev, AX_CMD_WRITE_RXCOE_CTL, rx_csum, 0, 0, NULL);
        return 0;
}
...

static int ax88772b_bind(struct usbnet *dev, struct usb_interface *intf)
{
...
        /* register support for hardware checksums */
        dev->net->hw_features |= NETIF_F_HW_CSUM | NETIF_F_RXCSUM;

        /* enable hardware checksums */
        dev->net->features |= NETIF_F_HW_CSUM | NETIF_F_RXCSUM;
        ax88772b_set_features(dev->net, dev->net->features);
...
}
-------------------------------snip-----------------------------------

Does this look correct -- any improvements/fixes to suggest?
I am still trying to find out about all of the other possible hardware bits,
but the AX_TXCOE_DEF_CSUM and AX_RXCOE_DEF_CSUM patterns are the ones
that Asix themselves were using in the vendor driver.

Thanks.

  parent reply	other threads:[~2011-12-05 14:41 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-26 23:36 asix usb network driver: nfg Mark Lord
2011-10-26 23:40 ` David Miller
2011-10-27  1:23   ` Mark Lord
2011-10-27  2:17     ` David Miller
2011-10-27 18:48       ` Mark Lord
2011-11-02 19:36       ` [PATCH] drivers/net/usb/asix: resync from vendor's copy Mark Lord
2011-11-02 19:48         ` Mark Lord
2011-11-02 20:42         ` Ben Hutchings
2011-11-02 22:44           ` Mark Lord
2011-11-09 16:25           ` Mark Lord
2011-11-09 16:34             ` Ben Hutchings
2011-11-09 16:47               ` Mark Lord
2011-11-09 16:57                 ` Mark Lord
2011-11-09 17:20                   ` Mark Lord
2011-11-09 17:31                     ` Ben Hutchings
2011-11-09 17:40                       ` Mark Lord
2011-11-09 17:48                         ` Ben Hutchings
2011-11-09 18:22                           ` Mark Lord
2011-12-05 14:41                           ` Mark Lord [this message]
2011-12-05 15:18                             ` Ben Hutchings
2011-12-06 12:44                               ` Mark Lord
2011-12-06 17:45                                 ` Ben Hutchings
2011-12-07 16:21                                   ` Mark Lord
2011-12-07 16:27                                     ` Ben Hutchings
2011-12-07 16:59                                       ` Mark Lord
2011-12-07 17:03                                         ` Ben Hutchings
2011-11-07 16:09         ` Michal Marek
2011-11-09 17:31         ` [PATCH v2] " Mark Lord
2011-11-09 17:41           ` Mark Lord
2011-11-09 17:43           ` Mark Lord
2011-11-09 17:47           ` Ben Hutchings
2011-11-09 18:27             ` Mark Lord
2011-11-09 17:49           ` [PATCH v3] " Mark Lord
2011-11-10 14:01           ` [PATCH v2] " Mark Lord
2011-11-10 16:54             ` Grant Grundler
2011-11-10 20:17               ` Mark Lord

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4EDCD828.2090904@teksavvy.com \
    --to=kernel@teksavvy.com \
    --cc=bhutchings@solarflare.com \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).