/* IPv4, but hardware thinks its checksum is wrong */
printk(KERN_DEBUG "%s: hw csum wrong pkt_flag:%x, err_flag:%x\n",
atl1_driver_name, rrd->pkt_flg, rrd->err_flg);
- skb->ip_summed = CHECKSUM_COMPLETE;
+ skb->ip_summed = CHECKSUM_HW;
skb->csum = htons(rrd->xsz.xsum_sz.rx_chksum);
adapter->hw_csum_err++;
return;
* @data: pointer to a network interface device structure
* @pt_regs: CPU registers structure
*/
-static irqreturn_t atl1_intr(int irq, void *data)
+static irqreturn_t atl1_intr(int irq, void *data, struct pt_regs *regs)
{
/*struct atl1_adapter *adapter = ((struct net_device *)data)->priv;*/
struct atl1_adapter *adapter = netdev_priv(data);
spin_lock_irqsave(&adapter->lock, flags);
/* atl1_irq_disable(adapter); */
- vlan_group_set_device(adapter->vlgrp, vid, NULL);
+ if (adapter->vlgrp)
+ adapter->vlgrp->vlan_devices[vid] = NULL;
/* atl1_irq_enable(adapter); */
spin_unlock_irqrestore(&adapter->lock, flags);
/* We don't do Vlan filtering */
if (adapter->vlgrp) {
u16 vid;
for (vid = 0; vid < VLAN_GROUP_ARRAY_LEN; vid++) {
- if (!vlan_group_get_device(adapter->vlgrp, vid))
+ if (!adapter->vlgrp->vlan_devices[vid])
continue;
atl1_vlan_rx_add_vid(adapter->netdev, vid);
}
{
u8 css, cso;
- if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) {
+ if (likely(skb->ip_summed == CHECKSUM_HW)) {
cso = skb->h.raw - skb->data;
- css = (skb->h.raw + skb->csum_offset) - skb->data;
+ css = (skb->h.raw + skb->csum) - skb->data;
if (unlikely(cso & 0x1)) {
printk(KERN_DEBUG "%s: payload offset != even number\n",
atl1_driver_name);
* state-machine will not be reset. DMAR_TO_INT will
* assert again and again.
*/
-static void atl1_tx_timeout_task(struct work_struct *work)
+static void atl1_tx_timeout_task(void *data)
{
- struct atl1_adapter *adapter =
- container_of(work, struct atl1_adapter, tx_timeout_task);
+ struct atl1_adapter *adapter = data;
struct net_device *netdev = adapter->netdev;
netif_device_detach(netdev);
/*
* atl1_link_chg_task - deal with link change event Out of interrupt context
*/
-static void atl1_link_chg_task(struct work_struct *work)
+static void atl1_link_chg_task(void *data)
{
- struct atl1_adapter *adapter =
- container_of(work, struct atl1_adapter, link_chg_task);
+ struct atl1_adapter *adapter = data;
unsigned long flags;
spin_lock_irqsave(&adapter->lock, flags);
adapter->phy_config_timer.data = (unsigned long)adapter;
adapter->phy_timer_pending = false;
- INIT_WORK(&adapter->tx_timeout_task, atl1_tx_timeout_task);
+ INIT_WORK(&adapter->tx_timeout_task, atl1_tx_timeout_task, adapter);
- INIT_WORK(&adapter->link_chg_task, atl1_link_chg_task);
+ INIT_WORK(&adapter->link_chg_task, atl1_link_chg_task, adapter);
- INIT_WORK(&adapter->pcie_dma_to_rst_task, atl1_tx_timeout_task);
+ INIT_WORK(&adapter->pcie_dma_to_rst_task, atl1_tx_timeout_task, adapter);
err = register_netdev(netdev);
if (err)