drivers/net: request_irq - Remove unnecessary leading & from second arg
[safe/jmp/linux-2.6] / drivers / net / atl1e / atl1e_main.c
index 1342418..ad17e74 100644 (file)
@@ -453,10 +453,6 @@ static int atl1e_mii_ioctl(struct net_device *netdev,
                break;
 
        case SIOCGMIIREG:
-               if (!capable(CAP_NET_ADMIN)) {
-                       retval = -EPERM;
-                       goto out;
-               }
                if (atl1e_read_phy_reg(&adapter->hw, data->reg_num & 0x1F,
                                    &data->val_out)) {
                        retval = -EIO;
@@ -465,10 +461,6 @@ static int atl1e_mii_ioctl(struct net_device *netdev,
                break;
 
        case SIOCSMIIREG:
-               if (!capable(CAP_NET_ADMIN)) {
-                       retval = -EPERM;
-                       goto out;
-               }
                if (data->reg_num & ~(0x1F)) {
                        retval = -EFAULT;
                        goto out;
@@ -643,7 +635,11 @@ static void atl1e_clean_tx_ring(struct atl1e_adapter *adapter)
        for (index = 0; index < ring_count; index++) {
                tx_buffer = &tx_ring->tx_buffer[index];
                if (tx_buffer->dma) {
-                       pci_unmap_page(pdev, tx_buffer->dma,
+                       if (tx_buffer->flags & ATL1E_TX_PCIMAP_SINGLE)
+                               pci_unmap_single(pdev, tx_buffer->dma,
+                                       tx_buffer->length, PCI_DMA_TODEVICE);
+                       else if (tx_buffer->flags & ATL1E_TX_PCIMAP_PAGE)
+                               pci_unmap_page(pdev, tx_buffer->dma,
                                        tx_buffer->length, PCI_DMA_TODEVICE);
                        tx_buffer->dma = 0;
                }
@@ -1154,7 +1150,7 @@ static struct net_device_stats *atl1e_get_stats(struct net_device *netdev)
 {
        struct atl1e_adapter *adapter = netdev_priv(netdev);
        struct atl1e_hw_stats  *hw_stats = &adapter->hw_stats;
-       struct net_device_stats *net_stats = &adapter->net_stats;
+       struct net_device_stats *net_stats = &netdev->stats;
 
        net_stats->rx_packets = hw_stats->rx_ok;
        net_stats->tx_packets = hw_stats->tx_ok;
@@ -1182,7 +1178,7 @@ static struct net_device_stats *atl1e_get_stats(struct net_device *netdev)
        net_stats->tx_aborted_errors = hw_stats->tx_abort_col;
        net_stats->tx_window_errors  = hw_stats->tx_late_col;
 
-       return &adapter->net_stats;
+       return net_stats;
 }
 
 static void atl1e_update_hw_stats(struct atl1e_adapter *adapter)
@@ -1228,7 +1224,11 @@ static bool atl1e_clean_tx_irq(struct atl1e_adapter *adapter)
        while (next_to_clean != hw_next_to_clean) {
                tx_buffer = &tx_ring->tx_buffer[next_to_clean];
                if (tx_buffer->dma) {
-                       pci_unmap_page(adapter->pdev, tx_buffer->dma,
+                       if (tx_buffer->flags & ATL1E_TX_PCIMAP_SINGLE)
+                               pci_unmap_single(adapter->pdev, tx_buffer->dma,
+                                       tx_buffer->length, PCI_DMA_TODEVICE);
+                       else if (tx_buffer->flags & ATL1E_TX_PCIMAP_PAGE)
+                               pci_unmap_page(adapter->pdev, tx_buffer->dma,
                                        tx_buffer->length, PCI_DMA_TODEVICE);
                        tx_buffer->dma = 0;
                }
@@ -1310,7 +1310,7 @@ static irqreturn_t atl1e_intr(int irq, void *data)
 
                /* link event */
                if (status & (ISR_GPHY | ISR_MANUAL)) {
-                       adapter->net_stats.tx_carrier_errors++;
+                       netdev->stats.tx_carrier_errors++;
                        atl1e_link_chg_event(adapter);
                        break;
                }
@@ -1433,14 +1433,12 @@ static void atl1e_clean_rx_irq(struct atl1e_adapter *adapter, u8 que,
 
                        packet_size = ((prrs->word1 >> RRS_PKT_SIZE_SHIFT) &
                                        RRS_PKT_SIZE_MASK) - 4; /* CRC */
-                       skb = netdev_alloc_skb(netdev,
-                                              packet_size + NET_IP_ALIGN);
+                       skb = netdev_alloc_skb_ip_align(netdev, packet_size);
                        if (skb == NULL) {
                                dev_warn(&pdev->dev, "%s: Memory squeeze,"
                                        "deferring packet.\n", netdev->name);
                                goto skip_pkt;
                        }
-                       skb_reserve(skb, NET_IP_ALIGN);
                        skb->dev = netdev;
                        memcpy(skb->data, (u8 *)(prrs + 1), packet_size);
                        skb_put(skb, packet_size);
@@ -1602,7 +1600,7 @@ static u16 atl1e_cal_tdp_req(const struct sk_buff *skb)
        }
 
        if (skb_is_gso(skb)) {
-               if (skb->protocol == ntohs(ETH_P_IP) ||
+               if (skb->protocol == htons(ETH_P_IP) ||
                   (skb_shinfo(skb)->gso_type == SKB_GSO_TCPV6)) {
                        proto_hdr_len = skb_transport_offset(skb) +
                                        tcp_hdrlen(skb);
@@ -1749,6 +1747,7 @@ static void atl1e_tx_map(struct atl1e_adapter *adapter,
                tx_buffer->length = map_len;
                tx_buffer->dma = pci_map_single(adapter->pdev,
                                        skb->data, hdr_len, PCI_DMA_TODEVICE);
+               ATL1E_SET_PCIMAP_TYPE(tx_buffer, ATL1E_TX_PCIMAP_SINGLE);
                mapped_len += map_len;
                use_tpd->buffer_addr = cpu_to_le64(tx_buffer->dma);
                use_tpd->word2 = (use_tpd->word2 & (~TPD_BUFLEN_MASK)) |
@@ -1774,6 +1773,7 @@ static void atl1e_tx_map(struct atl1e_adapter *adapter,
                tx_buffer->dma =
                        pci_map_single(adapter->pdev, skb->data + mapped_len,
                                        map_len, PCI_DMA_TODEVICE);
+               ATL1E_SET_PCIMAP_TYPE(tx_buffer, ATL1E_TX_PCIMAP_SINGLE);
                mapped_len  += map_len;
                use_tpd->buffer_addr = cpu_to_le64(tx_buffer->dma);
                use_tpd->word2 = (use_tpd->word2 & (~TPD_BUFLEN_MASK)) |
@@ -1795,8 +1795,7 @@ static void atl1e_tx_map(struct atl1e_adapter *adapter,
                        memcpy(use_tpd, tpd, sizeof(struct atl1e_tpd_desc));
 
                        tx_buffer = atl1e_get_tx_buffer(adapter, use_tpd);
-                       if (tx_buffer->skb)
-                               BUG();
+                       BUG_ON(tx_buffer->skb);
 
                        tx_buffer->skb = NULL;
                        tx_buffer->length =
@@ -1810,6 +1809,7 @@ static void atl1e_tx_map(struct atl1e_adapter *adapter,
                                                (i * MAX_TX_BUF_LEN),
                                                tx_buffer->length,
                                                PCI_DMA_TODEVICE);
+                       ATL1E_SET_PCIMAP_TYPE(tx_buffer, ATL1E_TX_PCIMAP_PAGE);
                        use_tpd->buffer_addr = cpu_to_le64(tx_buffer->dma);
                        use_tpd->word2 = (use_tpd->word2 & (~TPD_BUFLEN_MASK)) |
                                        ((cpu_to_le32(tx_buffer->length) &
@@ -1840,7 +1840,8 @@ static void atl1e_tx_queue(struct atl1e_adapter *adapter, u16 count,
        AT_WRITE_REG(&adapter->hw, REG_MB_TPD_PROD_IDX, tx_ring->next_to_use);
 }
 
-static int atl1e_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
+static netdev_tx_t atl1e_xmit_frame(struct sk_buff *skb,
+                                         struct net_device *netdev)
 {
        struct atl1e_adapter *adapter = netdev_priv(netdev);
        unsigned long flags;
@@ -1879,7 +1880,7 @@ static int atl1e_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
                                TPD_VLAN_SHIFT;
        }
 
-       if (skb->protocol == ntohs(ETH_P_8021Q))
+       if (skb->protocol == htons(ETH_P_8021Q))
                tpd->word3 |= 1 << TPD_VL_TAGGED_SHIFT;
 
        if (skb_network_offset(skb) != ETH_HLEN)
@@ -1895,7 +1896,7 @@ static int atl1e_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
        atl1e_tx_map(adapter, skb, tpd);
        atl1e_tx_queue(adapter, tpd_req, tpd);
 
-       netdev->trans_start = jiffies;
+       netdev->trans_start = jiffies; /* NETIF_F_LLTX driver :( */
        spin_unlock_irqrestore(&adapter->tx_lock, flags);
        return NETDEV_TX_OK;
 }
@@ -1929,7 +1930,7 @@ static int atl1e_request_irq(struct atl1e_adapter *adapter)
 
        if (!adapter->have_msi)
                flags |= IRQF_SHARED;
-       err = request_irq(adapter->pdev->irq, &atl1e_intr, flags,
+       err = request_irq(adapter->pdev->irq, atl1e_intr, flags,
                        netdev->name, netdev);
        if (err) {
                dev_dbg(&pdev->dev,
@@ -2498,6 +2499,9 @@ atl1e_io_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
 
        netif_device_detach(netdev);
 
+       if (state == pci_channel_io_perm_failure)
+               return PCI_ERS_RESULT_DISCONNECT;
+
        if (netif_running(netdev))
                atl1e_down(adapter);