sysfs: add struct file* to bin_attr callbacks
[safe/jmp/linux-2.6] / drivers / net / qla3xxx.c
index 7671f94..54ebb65 100644 (file)
@@ -61,7 +61,7 @@ static int msi;
 module_param(msi, int, 0);
 MODULE_PARM_DESC(msi, "Turn on Message Signaled Interrupts.");
 
-static struct pci_device_id ql3xxx_pci_tbl[] __devinitdata = {
+static DEFINE_PCI_DEVICE_TABLE(ql3xxx_pci_tbl) = {
        {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, QL3022_DEVICE_ID)},
        {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, QL3032_DEVICE_ID)},
        /* required last entry */
@@ -222,7 +222,6 @@ static void ql_write_common_reg_l(struct ql3_adapter *qdev,
        writel(value, reg);
        readl(reg);
        spin_unlock_irqrestore(&qdev->hw_lock, hw_flags);
-       return;
 }
 
 static void ql_write_common_reg(struct ql3_adapter *qdev,
@@ -230,7 +229,6 @@ static void ql_write_common_reg(struct ql3_adapter *qdev,
 {
        writel(value, reg);
        readl(reg);
-       return;
 }
 
 static void ql_write_nvram_reg(struct ql3_adapter *qdev,
@@ -239,7 +237,6 @@ static void ql_write_nvram_reg(struct ql3_adapter *qdev,
        writel(value, reg);
        readl(reg);
        udelay(1);
-       return;
 }
 
 static void ql_write_page0_reg(struct ql3_adapter *qdev,
@@ -249,7 +246,6 @@ static void ql_write_page0_reg(struct ql3_adapter *qdev,
                ql_set_register_page(qdev,0);
        writel(value, reg);
        readl(reg);
-       return;
 }
 
 /*
@@ -262,7 +258,6 @@ static void ql_write_page1_reg(struct ql3_adapter *qdev,
                ql_set_register_page(qdev,1);
        writel(value, reg);
        readl(reg);
-       return;
 }
 
 /*
@@ -275,7 +270,6 @@ static void ql_write_page2_reg(struct ql3_adapter *qdev,
                ql_set_register_page(qdev,2);
        writel(value, reg);
        readl(reg);
-       return;
 }
 
 static void ql_disable_interrupts(struct ql3_adapter *qdev)
@@ -343,8 +337,8 @@ static void ql_release_to_lrg_buf_free_list(struct ql3_adapter *qdev,
                            cpu_to_le32(LS_64BITS(map));
                        lrg_buf_cb->buf_phy_addr_high =
                            cpu_to_le32(MS_64BITS(map));
-                       pci_unmap_addr_set(lrg_buf_cb, mapaddr, map);
-                       pci_unmap_len_set(lrg_buf_cb, maplen,
+                       dma_unmap_addr_set(lrg_buf_cb, mapaddr, map);
+                       dma_unmap_len_set(lrg_buf_cb, maplen,
                                          qdev->lrg_buffer_len -
                                          QL_HEADER_SPACE);
                }
@@ -1924,8 +1918,8 @@ static int ql_populate_free_queue(struct ql3_adapter *qdev)
                                    cpu_to_le32(LS_64BITS(map));
                                lrg_buf_cb->buf_phy_addr_high =
                                    cpu_to_le32(MS_64BITS(map));
-                               pci_unmap_addr_set(lrg_buf_cb, mapaddr, map);
-                               pci_unmap_len_set(lrg_buf_cb, maplen,
+                               dma_unmap_addr_set(lrg_buf_cb, mapaddr, map);
+                               dma_unmap_len_set(lrg_buf_cb, maplen,
                                                  qdev->lrg_buffer_len -
                                                  QL_HEADER_SPACE);
                                --qdev->lrg_buf_skb_check;
@@ -1969,8 +1963,8 @@ static void ql_update_lrg_bufq_prod_index(struct ql3_adapter *qdev)
        struct ql_rcv_buf_cb *lrg_buf_cb;
        struct ql3xxx_port_registers __iomem *port_regs = qdev->mem_map_registers;
 
-       if ((qdev->lrg_buf_free_count >= 8)
-           && (qdev->lrg_buf_release_cnt >= 16)) {
+       if ((qdev->lrg_buf_free_count >= 8) &&
+           (qdev->lrg_buf_release_cnt >= 16)) {
 
                if (qdev->lrg_buf_skb_check)
                        if (!ql_populate_free_queue(qdev))
@@ -1978,8 +1972,8 @@ static void ql_update_lrg_bufq_prod_index(struct ql3_adapter *qdev)
 
                lrg_buf_q_ele = qdev->lrg_buf_next_free;
 
-               while ((qdev->lrg_buf_release_cnt >= 16)
-                      && (qdev->lrg_buf_free_count >= 8)) {
+               while ((qdev->lrg_buf_release_cnt >= 16) &&
+                      (qdev->lrg_buf_free_count >= 8)) {
 
                        for (i = 0; i < 8; i++) {
                                lrg_buf_cb =
@@ -2041,16 +2035,16 @@ static void ql_process_mac_tx_intr(struct ql3_adapter *qdev,
        }
 
        pci_unmap_single(qdev->pdev,
-                        pci_unmap_addr(&tx_cb->map[0], mapaddr),
-                        pci_unmap_len(&tx_cb->map[0], maplen),
+                        dma_unmap_addr(&tx_cb->map[0], mapaddr),
+                        dma_unmap_len(&tx_cb->map[0], maplen),
                         PCI_DMA_TODEVICE);
        tx_cb->seg_count--;
        if (tx_cb->seg_count) {
                for (i = 1; i < tx_cb->seg_count; i++) {
                        pci_unmap_page(qdev->pdev,
-                                      pci_unmap_addr(&tx_cb->map[i],
+                                      dma_unmap_addr(&tx_cb->map[i],
                                                      mapaddr),
-                                      pci_unmap_len(&tx_cb->map[i], maplen),
+                                      dma_unmap_len(&tx_cb->map[i], maplen),
                                       PCI_DMA_TODEVICE);
                }
        }
@@ -2119,8 +2113,8 @@ static void ql_process_mac_rx_intr(struct ql3_adapter *qdev,
 
        skb_put(skb, length);
        pci_unmap_single(qdev->pdev,
-                        pci_unmap_addr(lrg_buf_cb2, mapaddr),
-                        pci_unmap_len(lrg_buf_cb2, maplen),
+                        dma_unmap_addr(lrg_buf_cb2, mapaddr),
+                        dma_unmap_len(lrg_buf_cb2, maplen),
                         PCI_DMA_FROMDEVICE);
        prefetch(skb->data);
        skb->ip_summed = CHECKSUM_NONE;
@@ -2165,8 +2159,8 @@ static void ql_process_macip_rx_intr(struct ql3_adapter *qdev,
 
        skb_put(skb2, length);  /* Just the second buffer length here. */
        pci_unmap_single(qdev->pdev,
-                        pci_unmap_addr(lrg_buf_cb2, mapaddr),
-                        pci_unmap_len(lrg_buf_cb2, maplen),
+                        dma_unmap_addr(lrg_buf_cb2, mapaddr),
+                        dma_unmap_len(lrg_buf_cb2, maplen),
                         PCI_DMA_FROMDEVICE);
        prefetch(skb2->data);
 
@@ -2258,7 +2252,7 @@ static int ql_tx_rx_clean(struct ql3_adapter *qdev,
                                       "%x.\n",
                                       ndev->name, net_rsp->opcode);
                                printk(KERN_ERR PFX
-                                      "0x%08lx 0x%08lx 0x%08lx 0x%08lx \n",
+                                      "0x%08lx 0x%08lx 0x%08lx 0x%08lx\n",
                                       (unsigned long int)tmp[0],
                                       (unsigned long int)tmp[1],
                                       (unsigned long int)tmp[2],
@@ -2284,7 +2278,6 @@ static int ql_tx_rx_clean(struct ql3_adapter *qdev,
 static int ql_poll(struct napi_struct *napi, int budget)
 {
        struct ql3_adapter *qdev = container_of(napi, struct ql3_adapter, napi);
-       struct net_device *ndev = qdev->ndev;
        int rx_cleaned = 0, tx_cleaned = 0;
        unsigned long hw_flags;
        struct ql3xxx_port_registers __iomem *port_regs = qdev->mem_map_registers;
@@ -2293,7 +2286,7 @@ static int ql_poll(struct napi_struct *napi, int budget)
 
        if (tx_cleaned + rx_cleaned != budget) {
                spin_lock_irqsave(&qdev->hw_lock, hw_flags);
-               __netif_rx_complete(ndev, napi);
+               __napi_complete(napi);
                ql_update_small_bufq_prod_index(qdev);
                ql_update_lrg_bufq_prod_index(qdev);
                writel(qdev->rsp_consumer_index,
@@ -2352,8 +2345,8 @@ static irqreturn_t ql3xxx_isr(int irq, void *dev_id)
                spin_unlock(&qdev->adapter_lock);
        } else if (value & ISP_IMR_DISABLE_CMPL_INT) {
                ql_disable_interrupts(qdev);
-               if (likely(netif_rx_schedule_prep(ndev, &qdev->napi))) {
-                       __netif_rx_schedule(ndev, &qdev->napi);
+               if (likely(napi_schedule_prep(&qdev->napi))) {
+                       __napi_schedule(&qdev->napi);
                }
        } else {
                return IRQ_NONE;
@@ -2455,8 +2448,8 @@ static int ql_send_map(struct ql3_adapter *qdev,
        oal_entry->dma_lo = cpu_to_le32(LS_64BITS(map));
        oal_entry->dma_hi = cpu_to_le32(MS_64BITS(map));
        oal_entry->len = cpu_to_le32(len);
-       pci_unmap_addr_set(&tx_cb->map[seg], mapaddr, map);
-       pci_unmap_len_set(&tx_cb->map[seg], maplen, len);
+       dma_unmap_addr_set(&tx_cb->map[seg], mapaddr, map);
+       dma_unmap_len_set(&tx_cb->map[seg], maplen, len);
        seg++;
 
        if (seg_cnt == 1) {
@@ -2489,9 +2482,9 @@ static int ql_send_map(struct ql3_adapter *qdev,
                                oal_entry->len =
                                    cpu_to_le32(sizeof(struct oal) |
                                                OAL_CONT_ENTRY);
-                               pci_unmap_addr_set(&tx_cb->map[seg], mapaddr,
+                               dma_unmap_addr_set(&tx_cb->map[seg], mapaddr,
                                                   map);
-                               pci_unmap_len_set(&tx_cb->map[seg], maplen,
+                               dma_unmap_len_set(&tx_cb->map[seg], maplen,
                                                  sizeof(struct oal));
                                oal_entry = (struct oal_entry *)oal;
                                oal++;
@@ -2513,8 +2506,8 @@ static int ql_send_map(struct ql3_adapter *qdev,
                        oal_entry->dma_lo = cpu_to_le32(LS_64BITS(map));
                        oal_entry->dma_hi = cpu_to_le32(MS_64BITS(map));
                        oal_entry->len = cpu_to_le32(frag->size);
-                       pci_unmap_addr_set(&tx_cb->map[seg], mapaddr, map);
-                       pci_unmap_len_set(&tx_cb->map[seg], maplen,
+                       dma_unmap_addr_set(&tx_cb->map[seg], mapaddr, map);
+                       dma_unmap_len_set(&tx_cb->map[seg], maplen,
                                          frag->size);
                }
                /* Terminate the last segment. */
@@ -2540,22 +2533,22 @@ map_error:
                   (seg == 12 && seg_cnt > 13) ||      /* but necessary. */
                   (seg == 17 && seg_cnt > 18)) {
                        pci_unmap_single(qdev->pdev,
-                               pci_unmap_addr(&tx_cb->map[seg], mapaddr),
-                               pci_unmap_len(&tx_cb->map[seg], maplen),
+                               dma_unmap_addr(&tx_cb->map[seg], mapaddr),
+                               dma_unmap_len(&tx_cb->map[seg], maplen),
                                 PCI_DMA_TODEVICE);
                        oal++;
                        seg++;
                }
 
                pci_unmap_page(qdev->pdev,
-                              pci_unmap_addr(&tx_cb->map[seg], mapaddr),
-                              pci_unmap_len(&tx_cb->map[seg], maplen),
+                              dma_unmap_addr(&tx_cb->map[seg], mapaddr),
+                              dma_unmap_len(&tx_cb->map[seg], maplen),
                               PCI_DMA_TODEVICE);
        }
 
        pci_unmap_single(qdev->pdev,
-                        pci_unmap_addr(&tx_cb->map[0], mapaddr),
-                        pci_unmap_addr(&tx_cb->map[0], maplen),
+                        dma_unmap_addr(&tx_cb->map[0], mapaddr),
+                        dma_unmap_addr(&tx_cb->map[0], maplen),
                         PCI_DMA_TODEVICE);
 
        return NETDEV_TX_BUSY;
@@ -2573,7 +2566,8 @@ map_error:
  * The IOCB is always the top of the chain followed by one or more
  * OALs (when necessary).
  */
-static int ql3xxx_send(struct sk_buff *skb, struct net_device *ndev)
+static netdev_tx_t ql3xxx_send(struct sk_buff *skb,
+                              struct net_device *ndev)
 {
        struct ql3_adapter *qdev = (struct ql3_adapter *)netdev_priv(ndev);
        struct ql3xxx_port_registers __iomem *port_regs = qdev->mem_map_registers;
@@ -2618,7 +2612,6 @@ static int ql3xxx_send(struct sk_buff *skb, struct net_device *ndev)
                            &port_regs->CommonRegs.reqQProducerIndex,
                            qdev->req_producer_index);
 
-       ndev->trans_start = jiffies;
        if (netif_msg_tx_queued(qdev))
                printk(KERN_DEBUG PFX "%s: tx queued, slot %d, len %d\n",
                       ndev->name, qdev->req_producer_index, skb->len);
@@ -2842,8 +2835,8 @@ static void ql_free_large_buffers(struct ql3_adapter *qdev)
                if (lrg_buf_cb->skb) {
                        dev_kfree_skb(lrg_buf_cb->skb);
                        pci_unmap_single(qdev->pdev,
-                                        pci_unmap_addr(lrg_buf_cb, mapaddr),
-                                        pci_unmap_len(lrg_buf_cb, maplen),
+                                        dma_unmap_addr(lrg_buf_cb, mapaddr),
+                                        dma_unmap_len(lrg_buf_cb, maplen),
                                         PCI_DMA_FROMDEVICE);
                        memset(lrg_buf_cb, 0, sizeof(struct ql_rcv_buf_cb));
                } else {
@@ -2913,8 +2906,8 @@ static int ql_alloc_large_buffers(struct ql3_adapter *qdev)
                                return -ENOMEM;
                        }
 
-                       pci_unmap_addr_set(lrg_buf_cb, mapaddr, map);
-                       pci_unmap_len_set(lrg_buf_cb, maplen,
+                       dma_unmap_addr_set(lrg_buf_cb, mapaddr, map);
+                       dma_unmap_len_set(lrg_buf_cb, maplen,
                                          qdev->lrg_buffer_len -
                                          QL_HEADER_SPACE);
                        lrg_buf_cb->buf_phy_addr_low =
@@ -3144,6 +3137,7 @@ static int ql_adapter_initialize(struct ql3_adapter *qdev)
                                                (void __iomem *)port_regs;
        u32 delay = 10;
        int status = 0;
+       unsigned long hw_flags = 0;
 
        if(ql_mii_setup(qdev))
                return -1;
@@ -3152,7 +3146,8 @@ static int ql_adapter_initialize(struct ql3_adapter *qdev)
        ql_write_common_reg(qdev, &port_regs->CommonRegs.serialPortInterfaceReg,
                            (ISP_SERIAL_PORT_IF_WE |
                             (ISP_SERIAL_PORT_IF_WE << 16)));
-
+       /* Give the PHY time to come out of reset. */
+       mdelay(100);
        qdev->port_link_state = LS_DOWN;
        netif_carrier_off(qdev->ndev);
 
@@ -3352,7 +3347,9 @@ static int ql_adapter_initialize(struct ql3_adapter *qdev)
                value = ql_read_page0_reg(qdev, &port_regs->portStatus);
                if (value & PORT_STATUS_IC)
                        break;
+               spin_unlock_irqrestore(&qdev->hw_lock, hw_flags);
                msleep(500);
+               spin_lock_irqsave(&qdev->hw_lock, hw_flags);
        } while (--delay);
 
        if (delay == 0) {
@@ -3648,7 +3645,7 @@ static int ql_adapter_up(struct ql3_adapter *qdev)
                ql_sem_unlock(qdev, QL_DRVR_SEM_MASK);
        } else {
                printk(KERN_ERR PFX
-                      "%s: Could not aquire driver lock.\n",
+                      "%s: Could not acquire driver lock.\n",
                       ndev->name);
                goto err_lock;
        }
@@ -3790,13 +3787,13 @@ static void ql_reset_work(struct work_struct *work)
                                       "%s: Freeing lost SKB.\n",
                                       qdev->ndev->name);
                                pci_unmap_single(qdev->pdev,
-                                        pci_unmap_addr(&tx_cb->map[0], mapaddr),
-                                        pci_unmap_len(&tx_cb->map[0], maplen),
+                                        dma_unmap_addr(&tx_cb->map[0], mapaddr),
+                                        dma_unmap_len(&tx_cb->map[0], maplen),
                                         PCI_DMA_TODEVICE);
                                for(j=1;j<tx_cb->seg_count;j++) {
                                        pci_unmap_page(qdev->pdev,
-                                              pci_unmap_addr(&tx_cb->map[j],mapaddr),
-                                              pci_unmap_len(&tx_cb->map[j],maplen),
+                                              dma_unmap_addr(&tx_cb->map[j],mapaddr),
+                                              dma_unmap_len(&tx_cb->map[j],maplen),
                                               PCI_DMA_TODEVICE);
                                }
                                dev_kfree_skb(tx_cb->skb);
@@ -3839,7 +3836,9 @@ static void ql_reset_work(struct work_struct *work)
                                                      16) | ISP_CONTROL_RI));
                        }
 
+                       spin_unlock_irqrestore(&qdev->hw_lock, hw_flags);
                        ssleep(1);
+                       spin_lock_irqsave(&qdev->hw_lock, hw_flags);
                } while (--max_wait_time);
                spin_unlock_irqrestore(&qdev->hw_lock, hw_flags);
 
@@ -3917,7 +3916,7 @@ static int __devinit ql3xxx_probe(struct pci_dev *pdev,
        struct net_device *ndev = NULL;
        struct ql3_adapter *qdev = NULL;
        static int cards_found = 0;
-       int pci_using_dac, err;
+       int uninitialized_var(pci_using_dac), err;
 
        err = pci_enable_device(pdev);
        if (err) {
@@ -3935,12 +3934,12 @@ static int __devinit ql3xxx_probe(struct pci_dev *pdev,
 
        pci_set_master(pdev);
 
-       if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
+       if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
                pci_using_dac = 1;
-               err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK);
-       } else if (!(err = pci_set_dma_mask(pdev, DMA_32BIT_MASK))) {
+               err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
+       } else if (!(err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))) {
                pci_using_dac = 0;
-               err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
+               err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
        }
 
        if (err) {
@@ -4082,7 +4081,6 @@ static void __devexit ql3xxx_remove(struct pci_dev *pdev)
        struct ql3_adapter *qdev = netdev_priv(ndev);
 
        unregister_netdev(ndev);
-       qdev = netdev_priv(ndev);
 
        ql_disable_interrupts(qdev);