cnic: Fix ring I/O address for bnx2x devices.
[safe/jmp/linux-2.6] / drivers / net / cnic.c
index cfc6b20..10c5cc3 100644 (file)
@@ -408,7 +408,7 @@ int cnic_register_driver(int ulp_type, struct cnic_ulp_ops *ulp_ops)
 {
        struct cnic_dev *dev;
 
-       if (ulp_type >= MAX_CNIC_ULP_TYPE) {
+       if (ulp_type < 0 || ulp_type >= MAX_CNIC_ULP_TYPE) {
                printk(KERN_ERR PFX "cnic_register_driver: Bad type %d\n",
                       ulp_type);
                return -EINVAL;
@@ -454,7 +454,7 @@ int cnic_unregister_driver(int ulp_type)
        struct cnic_ulp_ops *ulp_ops;
        int i = 0;
 
-       if (ulp_type >= MAX_CNIC_ULP_TYPE) {
+       if (ulp_type < 0 || ulp_type >= MAX_CNIC_ULP_TYPE) {
                printk(KERN_ERR PFX "cnic_unregister_driver: Bad type %d\n",
                       ulp_type);
                return -EINVAL;
@@ -510,7 +510,7 @@ static int cnic_register_device(struct cnic_dev *dev, int ulp_type,
        struct cnic_local *cp = dev->cnic_priv;
        struct cnic_ulp_ops *ulp_ops;
 
-       if (ulp_type >= MAX_CNIC_ULP_TYPE) {
+       if (ulp_type < 0 || ulp_type >= MAX_CNIC_ULP_TYPE) {
                printk(KERN_ERR PFX "cnic_register_device: Bad type %d\n",
                       ulp_type);
                return -EINVAL;
@@ -551,7 +551,7 @@ static int cnic_unregister_device(struct cnic_dev *dev, int ulp_type)
        struct cnic_local *cp = dev->cnic_priv;
        int i = 0;
 
-       if (ulp_type >= MAX_CNIC_ULP_TYPE) {
+       if (ulp_type < 0 || ulp_type >= MAX_CNIC_ULP_TYPE) {
                printk(KERN_ERR PFX "cnic_unregister_device: Bad type %d\n",
                       ulp_type);
                return -EINVAL;
@@ -3387,7 +3387,7 @@ static int cnic_init_bnx2_irq(struct cnic_dev *dev)
 
                cp->bnx2_status_blk = cp->status_blk;
                cp->last_status_idx = cp->bnx2_status_blk->status_idx;
-               tasklet_init(&cp->cnic_irq_task, &cnic_service_bnx2_msix,
+               tasklet_init(&cp->cnic_irq_task, cnic_service_bnx2_msix,
                             (unsigned long) dev);
                err = request_irq(ethdev->irq_arr[0].vector, cnic_irq, 0,
                                  "cnic", dev);
@@ -3787,7 +3787,7 @@ static int cnic_init_bnx2x_irq(struct cnic_dev *dev)
        struct cnic_eth_dev *ethdev = cp->ethdev;
        int err = 0;
 
-       tasklet_init(&cp->cnic_irq_task, &cnic_service_bnx2x_bh,
+       tasklet_init(&cp->cnic_irq_task, cnic_service_bnx2x_bh,
                     (unsigned long) dev);
        if (ethdev->drv_state & CNIC_DRV_STATE_USING_MSIX) {
                err = request_irq(ethdev->irq_arr[0].vector, cnic_irq, 0,
@@ -4131,22 +4131,20 @@ static void cnic_init_rings(struct cnic_dev *dev)
                cnic_init_bnx2_rx_ring(dev);
        } else if (test_bit(CNIC_F_BNX2X_CLASS, &dev->flags)) {
                struct cnic_local *cp = dev->cnic_priv;
-               struct cnic_eth_dev *ethdev = cp->ethdev;
                u32 cli = BNX2X_ISCSI_CL_ID(CNIC_E1HVN(cp));
                union l5cm_specific_data l5_data;
                struct ustorm_eth_rx_producers rx_prods = {0};
-               void __iomem *doorbell;
-               int i;
+               u32 off, i;
 
                rx_prods.bd_prod = 0;
                rx_prods.cqe_prod = BNX2X_MAX_RCQ_DESC_CNT;
                barrier();
 
-               doorbell = ethdev->io_base2 + BAR_USTRORM_INTMEM +
+               off = BAR_USTRORM_INTMEM +
                        USTORM_RX_PRODS_OFFSET(CNIC_PORT(cp), cli);
 
                for (i = 0; i < sizeof(struct ustorm_eth_rx_producers) / 4; i++)
-                       writel(((u32 *) &rx_prods)[i], doorbell + i * 4);
+                       CNIC_WR(dev, off + i * 4, ((u32 *) &rx_prods)[i]);
 
                cnic_init_bnx2x_tx_ring(dev);
                cnic_init_bnx2x_rx_ring(dev);