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.
next prev 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).