|
@@ -332,7 +332,7 @@ netxen_pcie_sem_lock(struct netxen_adapter *adapter, int sem, u32 id_reg)
|
|
if (done == 1)
|
|
if (done == 1)
|
|
break;
|
|
break;
|
|
if (++timeout >= NETXEN_PCIE_SEM_TIMEOUT)
|
|
if (++timeout >= NETXEN_PCIE_SEM_TIMEOUT)
|
|
- return -1;
|
|
|
|
|
|
+ return -EIO;
|
|
msleep(1);
|
|
msleep(1);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1083,7 +1083,7 @@ netxen_nic_pci_set_crbwindow_128M(struct netxen_adapter *adapter,
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
- * Return -1 if off is not valid,
|
|
|
|
|
|
+ * Returns < 0 if off is not valid,
|
|
* 1 if window access is needed. 'off' is set to offset from
|
|
* 1 if window access is needed. 'off' is set to offset from
|
|
* CRB space in 128M pci map
|
|
* CRB space in 128M pci map
|
|
* 0 if no window access is needed. 'off' is set to 2M addr
|
|
* 0 if no window access is needed. 'off' is set to 2M addr
|
|
@@ -1096,7 +1096,7 @@ netxen_nic_pci_get_crb_addr_2M(struct netxen_adapter *adapter, ulong *off)
|
|
|
|
|
|
|
|
|
|
if (*off >= NETXEN_CRB_MAX)
|
|
if (*off >= NETXEN_CRB_MAX)
|
|
- return -1;
|
|
|
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
if (*off >= NETXEN_PCI_CAMQM && (*off < NETXEN_PCI_CAMQM_2M_END)) {
|
|
if (*off >= NETXEN_PCI_CAMQM && (*off < NETXEN_PCI_CAMQM_2M_END)) {
|
|
*off = (*off - NETXEN_PCI_CAMQM) + NETXEN_PCI_CAMQM_2M_BASE +
|
|
*off = (*off - NETXEN_PCI_CAMQM) + NETXEN_PCI_CAMQM_2M_BASE +
|
|
@@ -1105,7 +1105,7 @@ netxen_nic_pci_get_crb_addr_2M(struct netxen_adapter *adapter, ulong *off)
|
|
}
|
|
}
|
|
|
|
|
|
if (*off < NETXEN_PCI_CRBSPACE)
|
|
if (*off < NETXEN_PCI_CRBSPACE)
|
|
- return -1;
|
|
|
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
*off -= NETXEN_PCI_CRBSPACE;
|
|
*off -= NETXEN_PCI_CRBSPACE;
|
|
|
|
|
|
@@ -1220,25 +1220,26 @@ netxen_nic_hw_write_wx_2M(struct netxen_adapter *adapter, ulong off, u32 data)
|
|
|
|
|
|
rv = netxen_nic_pci_get_crb_addr_2M(adapter, &off);
|
|
rv = netxen_nic_pci_get_crb_addr_2M(adapter, &off);
|
|
|
|
|
|
- if (rv == -1) {
|
|
|
|
- printk(KERN_ERR "%s: invalid offset: 0x%016lx\n",
|
|
|
|
- __func__, off);
|
|
|
|
- dump_stack();
|
|
|
|
- return -1;
|
|
|
|
|
|
+ if (rv == 0) {
|
|
|
|
+ writel(data, (void __iomem *)off);
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
- if (rv == 1) {
|
|
|
|
|
|
+ if (rv > 0) {
|
|
|
|
+ /* indirect access */
|
|
write_lock_irqsave(&adapter->ahw.crb_lock, flags);
|
|
write_lock_irqsave(&adapter->ahw.crb_lock, flags);
|
|
crb_win_lock(adapter);
|
|
crb_win_lock(adapter);
|
|
netxen_nic_pci_set_crbwindow_2M(adapter, &off);
|
|
netxen_nic_pci_set_crbwindow_2M(adapter, &off);
|
|
writel(data, (void __iomem *)off);
|
|
writel(data, (void __iomem *)off);
|
|
crb_win_unlock(adapter);
|
|
crb_win_unlock(adapter);
|
|
write_unlock_irqrestore(&adapter->ahw.crb_lock, flags);
|
|
write_unlock_irqrestore(&adapter->ahw.crb_lock, flags);
|
|
- } else
|
|
|
|
- writel(data, (void __iomem *)off);
|
|
|
|
-
|
|
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
|
|
- return 0;
|
|
|
|
|
|
+ dev_err(&adapter->pdev->dev,
|
|
|
|
+ "%s: invalid offset: 0x%016lx\n", __func__, off);
|
|
|
|
+ dump_stack();
|
|
|
|
+ return -EIO;
|
|
}
|
|
}
|
|
|
|
|
|
static u32
|
|
static u32
|
|
@@ -1250,24 +1251,24 @@ netxen_nic_hw_read_wx_2M(struct netxen_adapter *adapter, ulong off)
|
|
|
|
|
|
rv = netxen_nic_pci_get_crb_addr_2M(adapter, &off);
|
|
rv = netxen_nic_pci_get_crb_addr_2M(adapter, &off);
|
|
|
|
|
|
- if (rv == -1) {
|
|
|
|
- printk(KERN_ERR "%s: invalid offset: 0x%016lx\n",
|
|
|
|
- __func__, off);
|
|
|
|
- dump_stack();
|
|
|
|
- return -1;
|
|
|
|
- }
|
|
|
|
|
|
+ if (rv == 0)
|
|
|
|
+ return readl((void __iomem *)off);
|
|
|
|
|
|
- if (rv == 1) {
|
|
|
|
|
|
+ if (rv > 0) {
|
|
|
|
+ /* indirect access */
|
|
write_lock_irqsave(&adapter->ahw.crb_lock, flags);
|
|
write_lock_irqsave(&adapter->ahw.crb_lock, flags);
|
|
crb_win_lock(adapter);
|
|
crb_win_lock(adapter);
|
|
netxen_nic_pci_set_crbwindow_2M(adapter, &off);
|
|
netxen_nic_pci_set_crbwindow_2M(adapter, &off);
|
|
data = readl((void __iomem *)off);
|
|
data = readl((void __iomem *)off);
|
|
crb_win_unlock(adapter);
|
|
crb_win_unlock(adapter);
|
|
write_unlock_irqrestore(&adapter->ahw.crb_lock, flags);
|
|
write_unlock_irqrestore(&adapter->ahw.crb_lock, flags);
|
|
- } else
|
|
|
|
- data = readl((void __iomem *)off);
|
|
|
|
|
|
+ return data;
|
|
|
|
+ }
|
|
|
|
|
|
- return data;
|
|
|
|
|
|
+ dev_err(&adapter->pdev->dev,
|
|
|
|
+ "%s: invalid offset: 0x%016lx\n", __func__, off);
|
|
|
|
+ dump_stack();
|
|
|
|
+ return -1;
|
|
}
|
|
}
|
|
|
|
|
|
/* window 1 registers only */
|
|
/* window 1 registers only */
|