Subject: Re: [PATCH] drivers/net/usb/asix: resync from vendor's copy

From: Mark Lord <[email-masked]>
Date: Tue, 06 Dec 2011 07:44:25 -0500

On 11-12-05 10:18 AM, Ben Hutchings wrote:
> On Mon, 2011-12-05 at 09:41 -0500, Mark Lord wrote:
> [...]
>> 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?
> [...]
> 
> NETIF_F_HW_CSUM means the hardware implements generic IP-style
> checksumming: the stack specifies the offset at which to start
> checksumming and the offset at which to store the checksum, and the
> hardware does not attempt to parse the headers.
> 
> If this hardware recognises specific protocols and works out the offsets
> itself, then you must claim NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM instead.

Yeah, the hardware seems to understand quite a few protocol formats.
Okay, so I'll claim the protocol-specific flags in net->hw_features.

But what do I use in net->features?
The exact same protocol flags,
or the generic NETIF_F_HW_CSUM | NETIF_F_RXCSUM ones?

The set_features() function also has to test for flags
to know what to do.  Should it test specific protocol flags,
or just the generic two ?

Thanks!