Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
This commit is contained in:
@ -146,7 +146,7 @@
|
||||
|
||||
#define MAX_RX_BUFFER_LENGTH 1760
|
||||
#define MAX_RX_JUMBO_BUFFER_LENGTH 8062
|
||||
#define MAX_RX_LRO_BUFFER_LENGTH ((48*1024)-512)
|
||||
#define MAX_RX_LRO_BUFFER_LENGTH (8062)
|
||||
#define RX_DMA_MAP_LEN (MAX_RX_BUFFER_LENGTH - 2)
|
||||
#define RX_JUMBO_DMA_MAP_LEN \
|
||||
(MAX_RX_JUMBO_BUFFER_LENGTH - 2)
|
||||
@ -207,11 +207,11 @@
|
||||
|
||||
#define MAX_CMD_DESCRIPTORS 4096
|
||||
#define MAX_RCV_DESCRIPTORS 16384
|
||||
#define MAX_CMD_DESCRIPTORS_HOST (MAX_CMD_DESCRIPTORS / 4)
|
||||
#define MAX_RCV_DESCRIPTORS_1G (MAX_RCV_DESCRIPTORS / 4)
|
||||
#define MAX_RCV_DESCRIPTORS_10G 8192
|
||||
#define MAX_JUMBO_RCV_DESCRIPTORS 1024
|
||||
#define MAX_LRO_RCV_DESCRIPTORS 64
|
||||
#define MAX_CMD_DESCRIPTORS_HOST 1024
|
||||
#define MAX_RCV_DESCRIPTORS_1G 2048
|
||||
#define MAX_RCV_DESCRIPTORS_10G 4096
|
||||
#define MAX_JUMBO_RCV_DESCRIPTORS 512
|
||||
#define MAX_LRO_RCV_DESCRIPTORS 8
|
||||
#define MAX_RCVSTATUS_DESCRIPTORS MAX_RCV_DESCRIPTORS
|
||||
#define MAX_JUMBO_RCV_DESC MAX_JUMBO_RCV_DESCRIPTORS
|
||||
#define MAX_RCV_DESC MAX_RCV_DESCRIPTORS
|
||||
|
@ -561,7 +561,10 @@ netxen_nic_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ring)
|
||||
}
|
||||
ring->tx_pending = adapter->max_tx_desc_count;
|
||||
|
||||
ring->rx_max_pending = MAX_RCV_DESCRIPTORS;
|
||||
if (adapter->ahw.board_type == NETXEN_NIC_GBE)
|
||||
ring->rx_max_pending = MAX_RCV_DESCRIPTORS_1G;
|
||||
else
|
||||
ring->rx_max_pending = MAX_RCV_DESCRIPTORS_10G;
|
||||
ring->tx_max_pending = MAX_CMD_DESCRIPTORS_HOST;
|
||||
ring->rx_jumbo_max_pending = MAX_JUMBO_RCV_DESCRIPTORS;
|
||||
ring->rx_mini_max_pending = 0;
|
||||
|
@ -735,17 +735,18 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
|
||||
SET_ETHTOOL_OPS(netdev, &netxen_nic_ethtool_ops);
|
||||
|
||||
/* ScatterGather support */
|
||||
netdev->features = NETIF_F_SG;
|
||||
netdev->features |= NETIF_F_IP_CSUM;
|
||||
netdev->features |= NETIF_F_TSO;
|
||||
netdev->features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO);
|
||||
netdev->vlan_features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO);
|
||||
|
||||
if (NX_IS_REVISION_P3(revision_id)) {
|
||||
netdev->features |= NETIF_F_IPV6_CSUM;
|
||||
netdev->features |= NETIF_F_TSO6;
|
||||
netdev->features |= (NETIF_F_IPV6_CSUM | NETIF_F_TSO6);
|
||||
netdev->vlan_features |= (NETIF_F_IPV6_CSUM | NETIF_F_TSO6);
|
||||
}
|
||||
|
||||
if (adapter->pci_using_dac)
|
||||
if (adapter->pci_using_dac) {
|
||||
netdev->features |= NETIF_F_HIGHDMA;
|
||||
netdev->vlan_features |= NETIF_F_HIGHDMA;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the CRB window to invalid. If any register in window 0 is
|
||||
@ -1166,6 +1167,14 @@ static bool netxen_tso_check(struct net_device *netdev,
|
||||
{
|
||||
bool tso = false;
|
||||
u8 opcode = TX_ETHER_PKT;
|
||||
__be16 protocol = skb->protocol;
|
||||
u16 flags = 0;
|
||||
|
||||
if (protocol == __constant_htons(ETH_P_8021Q)) {
|
||||
struct vlan_ethhdr *vh = (struct vlan_ethhdr *)skb->data;
|
||||
protocol = vh->h_vlan_encapsulated_proto;
|
||||
flags = FLAGS_VLAN_TAGGED;
|
||||
}
|
||||
|
||||
if ((netdev->features & (NETIF_F_TSO | NETIF_F_TSO6)) &&
|
||||
skb_shinfo(skb)->gso_size > 0) {
|
||||
@ -1174,21 +1183,21 @@ static bool netxen_tso_check(struct net_device *netdev,
|
||||
desc->total_hdr_length =
|
||||
skb_transport_offset(skb) + tcp_hdrlen(skb);
|
||||
|
||||
opcode = (skb->protocol == htons(ETH_P_IPV6)) ?
|
||||
opcode = (protocol == __constant_htons(ETH_P_IPV6)) ?
|
||||
TX_TCP_LSO6 : TX_TCP_LSO;
|
||||
tso = true;
|
||||
|
||||
} else if (skb->ip_summed == CHECKSUM_PARTIAL) {
|
||||
u8 l4proto;
|
||||
|
||||
if (skb->protocol == htons(ETH_P_IP)) {
|
||||
if (protocol == __constant_htons(ETH_P_IP)) {
|
||||
l4proto = ip_hdr(skb)->protocol;
|
||||
|
||||
if (l4proto == IPPROTO_TCP)
|
||||
opcode = TX_TCP_PKT;
|
||||
else if(l4proto == IPPROTO_UDP)
|
||||
opcode = TX_UDP_PKT;
|
||||
} else if (skb->protocol == htons(ETH_P_IPV6)) {
|
||||
} else if (protocol == __constant_htons(ETH_P_IPV6)) {
|
||||
l4proto = ipv6_hdr(skb)->nexthdr;
|
||||
|
||||
if (l4proto == IPPROTO_TCP)
|
||||
@ -1199,7 +1208,7 @@ static bool netxen_tso_check(struct net_device *netdev,
|
||||
}
|
||||
desc->tcp_hdr_offset = skb_transport_offset(skb);
|
||||
desc->ip_hdr_offset = skb_network_offset(skb);
|
||||
netxen_set_tx_flags_opcode(desc, 0, opcode);
|
||||
netxen_set_tx_flags_opcode(desc, flags, opcode);
|
||||
return tso;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user