summaryrefslogtreecommitdiff
path: root/drivers/net/netxen/netxen_nic_niu.c
diff options
context:
space:
mode:
authorDhananjay Phadke <dhananjay@netxen.com>2009-08-24 19:23:26 +0000
committerDavid S. Miller <davem@davemloft.net>2009-08-26 15:29:17 -0700
commitc9517e5893db03ca8bd32b8783b39af58176947c (patch)
tree5ae4d26af6f38e70a868e634d0576056c326027e /drivers/net/netxen/netxen_nic_niu.c
parentcb7e4b6e37144f5d131ee09296be3c21c41f28d8 (diff)
netxen: implement generic pcie semaphore functions
Implement common function for locking/unlocking 8 hardware semaphores used for serializing access to shared resouces on a NIC board by different PCI functions. As by definition, callers of these semaphore API can be put to sleep till the semaphore is locked. Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/netxen/netxen_nic_niu.c')
-rw-r--r--drivers/net/netxen/netxen_nic_niu.c39
1 files changed, 2 insertions, 37 deletions
diff --git a/drivers/net/netxen/netxen_nic_niu.c b/drivers/net/netxen/netxen_nic_niu.c
index 8b7cd9e1851a..1392e8994f2c 100644
--- a/drivers/net/netxen/netxen_nic_niu.c
+++ b/drivers/net/netxen/netxen_nic_niu.c
@@ -30,40 +30,6 @@
#include "netxen_nic.h"
-static long phy_lock_timeout = 100000000;
-
-static int phy_lock(struct netxen_adapter *adapter)
-{
- int i;
- int done = 0, timeout = 0;
-
- while (!done) {
- done = NXRD32(adapter, NETXEN_PCIE_REG(PCIE_SEM3_LOCK));
- if (done == 1)
- break;
- if (timeout >= phy_lock_timeout) {
- return -1;
- }
- timeout++;
- if (!in_atomic())
- schedule();
- else {
- for (i = 0; i < 20; i++)
- cpu_relax();
- }
- }
-
- NXWR32(adapter, NETXEN_PHY_LOCK_ID, PHY_LOCK_DRIVER);
- return 0;
-}
-
-static int phy_unlock(struct netxen_adapter *adapter)
-{
- adapter->pci_read_immediate(adapter, NETXEN_PCIE_REG(PCIE_SEM3_UNLOCK));
-
- return 0;
-}
-
/*
* netxen_niu_gbe_phy_read - read a register from the GbE PHY via
* mii management interface.
@@ -89,9 +55,8 @@ int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg,
__u32 status;
__u32 mac_cfg0;
- if (phy_lock(adapter) != 0) {
+ if (netxen_phy_lock(adapter) != 0)
return -1;
- }
/*
* MII mgmt all goes through port 0 MAC interface,
@@ -141,7 +106,7 @@ int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg,
if (restore)
if (NXWR32(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(0), mac_cfg0))
return -EIO;
- phy_unlock(adapter);
+ netxen_phy_unlock(adapter);
return result;
}