From: t_jeang Date: Tue, 6 Jan 2009 12:05:57 +0000 (+0000) Subject: imported patch drivers-net-atl1-backport X-Git-Tag: drivers-net-atl1-from-2.6.21 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=351a2830d60b91cb0041b1292b60a2c3a9cc8d20;p=xenclient%2Fkernel.git imported patch drivers-net-atl1-backport --- diff --git a/drivers/net/atl1/atl1.h b/drivers/net/atl1/atl1.h index b1c6034e..91a7194a 100644 --- a/drivers/net/atl1/atl1.h +++ b/drivers/net/atl1/atl1.h @@ -29,6 +29,14 @@ #include "atl1_hw.h" +#if 0 +typedef _Bool bool; +enum { + false = 0, + true = 1 +}; +#endif + /* function prototypes needed by multiple files */ s32 atl1_up(struct atl1_adapter *adapter); void atl1_down(struct atl1_adapter *adapter); @@ -38,7 +46,7 @@ void atl1_free_ring_resources(struct atl1_adapter *adapter); extern char atl1_driver_name[]; extern char atl1_driver_version[]; -extern const struct ethtool_ops atl1_ethtool_ops; +extern struct ethtool_ops atl1_ethtool_ops; struct atl1_adapter; diff --git a/drivers/net/atl1/atl1_ethtool.c b/drivers/net/atl1/atl1_ethtool.c index c11c2779..5b328c8d 100644 --- a/drivers/net/atl1/atl1_ethtool.c +++ b/drivers/net/atl1/atl1_ethtool.c @@ -483,7 +483,7 @@ static int atl1_nway_reset(struct net_device *netdev) return 0; } -const struct ethtool_ops atl1_ethtool_ops = { +struct ethtool_ops atl1_ethtool_ops = { .get_settings = atl1_get_settings, .set_settings = atl1_set_settings, .get_drvinfo = atl1_get_drvinfo, diff --git a/drivers/net/atl1/atl1_main.c b/drivers/net/atl1/atl1_main.c index 8606eac5..88122d5c 100644 --- a/drivers/net/atl1/atl1_main.c +++ b/drivers/net/atl1/atl1_main.c @@ -395,7 +395,7 @@ static void atl1_rx_checksum(struct atl1_adapter *adapter, /* 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; @@ -703,7 +703,7 @@ static void atl1_check_for_link(struct atl1_adapter *adapter) * @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); @@ -1252,7 +1252,8 @@ static void atl1_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) 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 */ @@ -1265,7 +1266,7 @@ static void atl1_restore_vlan(struct atl1_adapter *adapter) 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); } @@ -1326,9 +1327,9 @@ static int atl1_tx_csum(struct atl1_adapter *adapter, struct sk_buff *skb, { 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); @@ -2053,10 +2054,9 @@ static int atl1_close(struct net_device *netdev) * 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); @@ -2068,10 +2068,9 @@ static void atl1_tx_timeout_task(struct work_struct *work) /* * 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); @@ -2276,11 +2275,11 @@ static int __devinit atl1_probe(struct pci_dev *pdev, 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)