From: Pradeep Dalvi <pradeep@linsyssoft.com>
To: Stephen Hemminger <shemminger@osdl.org>
Cc: "Linsys Contractor Amit S. Kale" <amitkale@unminc.com>,
Kernel Netdev Mailing List <netdev@vger.kernel.org>,
Sanjeev Jorapur <sanjeev@netxen.com>,
UNM Project Staff <unmproj@linsyssoft.com>
Subject: Re: [PATCH 9/9] Resending NetXen 1G/10G NIC driver patch
Date: Fri, 26 May 2006 14:30:14 +0000 [thread overview]
Message-ID: <1148653814.3453.118.camel@arya.linsyssoft.com> (raw)
In-Reply-To: <20060525101933.53426bd7@dxpl.pdx.osdl.net>
diff -u linux-2.6.16.18/drivers/net/netxen/netxen_nic_niu.c
linux-2.6.16.18/drivers/net/netxen/netxen_nic_niu.c
--- linux-2.6.16.18/drivers/net/netxen/netxen_nic_niu.c 2006-05-25
02:43:22.000000000 -0700
+++ linux-2.6.16.18/drivers/net/netxen/netxen_nic_niu.c 2006-05-26
04:05:34.000000000 -0700
@@ -34,22 +34,6 @@
#include "netxen_nic.h"
#include <linux/delay.h>
-void netxen_delay(int value)
-{
- unsigned long remainder;
-
- remainder = value / 50000;
- do {
- if (remainder > 1000) {
- udelay(1000);
- remainder -= 1000;
- } else {
- udelay(remainder + 1);
- remainder = 0;
- }
- } while (remainder > 0);
-}
-
/**
* netxen_niu_gbe_phy_read - read a register from the GbE PHY via
* mii management interface.
@@ -78,7 +62,7 @@
/* MII mgmt all goes through port 0 MAC interface, so it cannot
be in reset */
if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0
(0),
&mac_cfg0, 4))
- return -1;
+ return -EIO;
if (mac_cfg0.soft_reset) {
struct netxen_niu_gb_mac_config_0_t temp;
*(netxen_crbword_t *) & temp = 0;
@@ -89,7 +73,7 @@
if (netxen_nic_hw_write_wx(adapter,
NETXEN_NIU_GB_MAC_CONFIG_0
(0),
&temp, 4))
- return -1;
+ return -EIO;
restore = 1;
}
@@ -99,34 +83,34 @@
mii_cfg.reset = 1;
if (netxen_nic_hw_write_wx(adapter,
NETXEN_NIU_GB_MII_MGMT_CONFIG(0),
&mii_cfg, 4))
- return -1;
+ return -EIO;
mii_cfg.reset = 0;
if (netxen_nic_hw_write_wx(adapter,
NETXEN_NIU_GB_MII_MGMT_CONFIG(0),
&mii_cfg, 4))
- return -1;
+ return -EIO;
*(netxen_crbword_t *) & address = 0;
address.reg_addr = reg;
address.phy_addr = phy;
if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_ADDR
(0),
&address, 4))
- return -1;
+ return -EIO;
*(netxen_crbword_t *) & command = 0; /* turn off any prior
activity */
if (netxen_nic_hw_write_wx(adapter,
NETXEN_NIU_GB_MII_MGMT_COMMAND(0),
&command, 4))
- return -1;
+ return -EIO;
/* send read command */
command.read_cycle = 1;
if (netxen_nic_hw_write_wx(adapter,
NETXEN_NIU_GB_MII_MGMT_COMMAND(0),
&command, 4))
- return -1;
+ return -EIO;
*(netxen_crbword_t *) & status = 0;
do {
if (netxen_nic_hw_read_wx(adapter,
NETXEN_NIU_GB_MII_MGMT_INDICATE(0),
&status, 4))
- return -1;
+ return -EIO;
timeout++;
} while ((status.busy || status.notvalid)
&& (timeout++ < NETXEN_NIU_PHY_WAITMAX));
@@ -135,7 +119,7 @@
if (netxen_nic_hw_read_wx(adapter,
NETXEN_NIU_GB_MII_MGMT_STATUS
(0),
readval, 4))
- return -1;
+ return -EIO;
result = 0;
} else
result = -1;
@@ -144,7 +128,7 @@
if (netxen_nic_hw_write_wx(adapter,
NETXEN_NIU_GB_MAC_CONFIG_0
(0),
&mac_cfg0, 4))
- return -1;
+ return -EIO;
return result;
}
@@ -176,7 +160,7 @@
/* MII mgmt all goes through port 0 MAC interface, so it cannot
be in reset */
if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0
(0),
&mac_cfg0, 4))
- return -1;
+ return -EIO;
if (mac_cfg0.soft_reset) {
struct netxen_niu_gb_mac_config_0_t temp;
*(netxen_crbword_t *) & temp = 0;
@@ -187,46 +171,46 @@
if (netxen_nic_hw_write_wx(adapter,
NETXEN_NIU_GB_MAC_CONFIG_0
(0),
&temp, 4))
- return -1;
+ return -EIO;
restore = 1;
}
*(netxen_crbword_t *) & command = 0; /* turn off any prior
activity */
if (netxen_nic_hw_write_wx(adapter,
NETXEN_NIU_GB_MII_MGMT_COMMAND(0),
&command, 4))
- return -1;
+ return -EIO;
*(netxen_crbword_t *) & address = 0;
address.reg_addr = reg;
address.phy_addr = phy;
if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_ADDR
(0),
&address, 4))
- return -1;
+ return -EIO;
if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_CTRL
(0),
&val, 4))
- return -1;
+ return -EIO;
*(netxen_crbword_t *) & status = 0;
do {
if (netxen_nic_hw_read_wx(adapter,
NETXEN_NIU_GB_MII_MGMT_INDICATE(0),
&status, 4))
- return -1;
+ return -EIO;
timeout++;
} while ((status.busy) && (timeout++ < NETXEN_NIU_PHY_WAITMAX));
if (timeout < NETXEN_NIU_PHY_WAITMAX)
result = 0;
else
- result = -1;
+ result = -EIO;
/* restore the state of port 0 MAC in case we tampered with it
*/
if (restore)
if (netxen_nic_hw_write_wx(adapter,
NETXEN_NIU_GB_MAC_CONFIG_0
(0),
&mac_cfg0, 4))
- return -1;
+ return -EIO;
return result;
}
@@ -245,7 +229,7 @@
netxen_niu_gbe_phy_write(adapter, port,
NETXEN_NIU_GB_MII_MGMT_ADDR_INT_ENABLE,
*(netxen_crbword_t *) & enable))
- result = -1;
+ result = -EIO;
return result;
}
@@ -257,7 +241,7 @@
if (0 !=
netxen_niu_gbe_phy_write(adapter, port,
NETXEN_NIU_GB_MII_MGMT_ADDR_INT_ENABLE, 0))
- result = -1;
+ result = -EIO;
return result;
}
@@ -269,8 +253,8 @@
if (0 !=
netxen_niu_gbe_phy_write(adapter, port,
NETXEN_NIU_GB_MII_MGMT_ADDR_INT_STATUS,
- -1))
- result = -1;
+ -EIO))
+ result = -EIO;
return result;
}
@@ -309,9 +293,9 @@
}
if (netxen_niu_gbe_enable_phy_interrupts(adapter, port))
- printk("<1>ERROR enabling PHY interrupts\n");
+ printk(KERN_ERR PFX "ERROR enabling PHY interrupts\n");
if (netxen_niu_gbe_clear_phy_interrupts(adapter, port))
- printk("<1>ERROR clearing PHY interrupts\n");
+ printk(KERN_ERR PFX "ERROR clearing PHY interrupts\n");
}
/**
@@ -347,9 +331,9 @@
}
if (netxen_niu_gbe_enable_phy_interrupts(adapter, port))
- printk("<1>ERROR enabling PHY interrupts\n");
+ printk(KERN_ERR PFX "ERROR enabling PHY interrupts\n");
if (netxen_niu_gbe_clear_phy_interrupts(adapter, port))
- printk("<1>ERROR clearing PHY interrupts\n");
+ printk(KERN_ERR PFX "ERROR clearing PHY interrupts\n");
}
long netxen_niu_gbe_init_port(struct netxen_adapter *adapter, long
port)
@@ -380,15 +364,15 @@
NETXEN_NIU_GB_MAC_CONFIG_0
(port),
0x0000f0025);
if (netxen_niu_gbe_clear_phy_interrupts(adapter,
port))
- printk("<1>ERROR clearing PHY interrupts
\n");
+ printk(KERN_ERR PFX "ERROR clearing PHY
interrupts\n");
if (netxen_niu_gbe_enable_phy_interrupts
(adapter, port))
- printk("<1>ERROR enabling PHY interrupts
\n");
+ printk(KERN_ERR PFX "ERROR enabling PHY
interrupts\n");
if (netxen_niu_gbe_clear_phy_interrupts(adapter,
port))
- printk("<1>ERROR clearing PHY interrupts
\n");
+ printk(KERN_ERR PFX "ERROR clearing PHY
interrupts\n");
result = -1;
}
} else {
- result = -1;
+ result = -EIO;
}
return result;
}
@@ -404,80 +388,82 @@
long result = 0;
struct netxen_niu_phy_interrupt int_src;
- printk
- ("<1>NETXEN: Handling PHY interrupt on port %d (device
enable = %d)\n",
- (int)port, (int)enable);
+ printk(KERN_INFO PFX "NETXEN: Handling PHY interrupt on port %d"
+ " (device enable = %d)\n", (int)port, (int)enable);
/* The read of the PHY INT status will clear the pending
interrupt status */
if (netxen_niu_gbe_phy_read(adapter, port,
NETXEN_NIU_GB_MII_MGMT_ADDR_INT_STATUS,
(netxen_crbword_t *) & int_src) !=
0)
- result = -1;
+ result = -EINVAL;
else {
- printk("<1>PHY Interrupt source = 0x%x \n", *(u32 *) &
int_src);
+ printk(KERN_INFO PFX "PHY Interrupt source = 0x%x \n",
+ *(u32 *) & int_src);
if (int_src.jabber)
- printk("<1>jabber Interrupt ");
+ printk(KERN_INFO PFX "jabber Interrupt ");
if (int_src.polarity_changed)
- printk("<1>polarity changed ");
+ printk(KERN_INFO PFX "polarity changed ");
if (int_src.energy_detect)
- printk("<1>energy detect \n");
+ printk(KERN_INFO PFX "energy detect \n");
if (int_src.downshift)
- printk("<1>downshift \n");
+ printk(KERN_INFO PFX "downshift \n");
if (int_src.mdi_xover_changed)
- printk("<1>mdi_xover_changed ");
+ printk(KERN_INFO PFX "mdi_xover_changed ");
if (int_src.fifo_over_underflow)
- printk("<1>fifo_over_underflow ");
+ printk(KERN_INFO PFX "fifo_over_underflow ");
if (int_src.false_carrier)
- printk("<1>false_carrier ");
+ printk(KERN_INFO PFX "false_carrier ");
if (int_src.symbol_error)
- printk("<1>symbol_error ");
+ printk(KERN_INFO PFX "symbol_error ");
if (int_src.autoneg_completed)
- printk("<1>autoneg_completed ");
+ printk(KERN_INFO PFX "autoneg_completed ");
if (int_src.page_received)
- printk("<1>page_received ");
+ printk(KERN_INFO PFX "page_received ");
if (int_src.duplex_changed)
- printk("<1>duplex_changed ");
+ printk(KERN_INFO PFX "duplex_changed ");
if (int_src.autoneg_error)
- printk("<1>autoneg_error ");
+ printk(KERN_INFO PFX "autoneg_error ");
if ((int_src.speed_changed) ||
(int_src.link_status_changed)) {
struct netxen_niu_phy_status status;
- printk("<1>speed_changed or link status
changed");
+ printk(KERN_INFO PFX "speed_changed or link
status changed");
if (netxen_niu_gbe_phy_read(adapter, port,
NETXEN_NIU_GB_MII_MGMT_ADDR_PHY_STATUS,
(netxen_crbword_t *)
&
status) == 0) {
- printk("<1>\n");
if (status.speed == 2) {
printk
- ("<1>Link speed changed to
1000 Mbps\n");
+ (KERN_INFO PFX "Link speed
changed"
+ " to 1000 Mbps\n");
netxen_niu_gbe_set_gmii_mode
(adapter,
port,
enable);
} else if (status.speed == 1) {
printk
- ("<1>Link speed changed to
100 Mbps\n");
+ (KERN_INFO PFX "Link speed
changed"
+ " to 100 Mbps\n");
netxen_niu_gbe_set_mii_mode
(adapter,
port,
enable);
} else if (status.speed == 0) {
printk
- ("<1>Link speed changed to
10 Mbps\n");
+ (KERN_INFO PFX "Link speed
changed"
+ " to 10 Mbps\n");
netxen_niu_gbe_set_mii_mode
(adapter,
port,
enable);
} else {
- printk
- ("<1>ERROR reading PHY
status. Illegal speed.\n");
+ printk(KERN_ERR PFX "ERROR
reading"
+ "PHY status. Illegal
speed.\n");
result = -1;
}
} else {
- printk("<1>ERROR reading PHY
status.\n");
+ printk(KERN_ERR PFX "ERROR reading PHY
status.\n");
result = -1;
}
}
- printk("<1>\n");
+ printk(KERN_INFO"\n");
}
return result;
}
@@ -494,16 +480,16 @@
struct netxen_niu_gb_station_address_low stationlow;
if (addr == NULL)
- return -1;
+ return -EINVAL;
if ((phy < 0) || (phy > 3))
- return -1;
+ return -EINVAL;
if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_STATION_ADDR_0
(phy),
&stationhigh, 4))
- return -1;
+ return -EIO;
if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_STATION_ADDR_1
(phy),
&stationlow, 4))
- return -1;
+ return -EIO;
result = (u64) stationlow.address;
result |= (u64) stationhigh.address << 16;
@@ -522,13 +508,13 @@
netxen_crbword_t temp = 0;
if ((phy < 0) || (phy > 3))
- return -1;
+ return -EINVAL;
memcpy(&temp, addr, 2);
temp <<= 16;
if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_STATION_ADDR_1
(phy),
&temp, 4))
- return -1;
+ return -EIO;
temp = 0;
@@ -549,13 +535,13 @@
struct netxen_niu_gb_mii_mgmt_config mii_cfg;
if ((port < 0) || (port > NETXEN_NIU_MAX_GBE_PORTS))
- return -1;
+ return -EINVAL;
*(netxen_crbword_t *) & mac_cfg0 = 0;
mac_cfg0.soft_reset = 1;
if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0
(port),
&mac_cfg0, 4))
- return -1;
+ return -EIO;
*(netxen_crbword_t *) & mac_cfg0 = 0;
mac_cfg0.tx_enable = 1;
mac_cfg0.rx_enable = 1;
@@ -567,7 +553,7 @@
if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0
(port),
&mac_cfg0, 4))
- return -1;
+ return -EIO;
*(netxen_crbword_t *) & mac_cfg1 = 0;
mac_cfg1.preamblelen = 0xf;
mac_cfg1.duplex = 1;
@@ -581,7 +567,7 @@
if (netxen_nic_hw_write_wx(adapter,
NETXEN_NIU_GB_MAC_CONFIG_1
(port),
&mac_cfg1, 4))
- return -1;
+ return -EIO;
/* set mii mode */
netxen_crb_writelit_adapter(adapter,
NETXEN_NIU_GB0_GMII_MODE +
@@ -594,7 +580,7 @@
if (netxen_nic_hw_write_wx(adapter,
NETXEN_NIU_GB_MAC_CONFIG_1
(port),
&mac_cfg1, 4))
- return -1;
+ return -EIO;
/* set gmii mode */
netxen_crb_writelit_adapter(adapter,
NETXEN_NIU_GB0_MII_MODE +
(port << 3), 0);
@@ -605,7 +591,7 @@
mii_cfg.clockselect = 7;
if (netxen_nic_hw_write_wx(adapter,
NETXEN_NIU_GB_MII_MGMT_CONFIG(port),
&mii_cfg, 4))
- return -1;
+ return -EIO;
*(netxen_crbword_t *) & mac_cfg0 = 0;
mac_cfg0.tx_enable = 1;
@@ -614,7 +600,7 @@
mac_cfg0.rx_flowctl = 0;
if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0
(port),
&mac_cfg0, 4))
- return -1;
+ return -EIO;
return 0;
}
@@ -624,13 +610,13 @@
struct netxen_niu_gb_mac_config_0_t mac_cfg0;
if ((port < 0) || (port > NETXEN_NIU_MAX_GBE_PORTS))
- return -1;
+ return -EINVAL;
*(netxen_crbword_t *) & mac_cfg0 = 0;
mac_cfg0.soft_reset = 1;
if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0
(port),
&mac_cfg0, 4))
- return -1;
+ return -EIO;
return 0;
}
@@ -640,13 +626,13 @@
struct netxen_niu_xg_mac_config_0_t mac_cfg;
if (port != 0)
- return -1;
+ return -EINVAL;
*(netxen_crbword_t *) & mac_cfg = 0;
mac_cfg.soft_reset = 1;
if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_XGE_CONFIG_0,
&mac_cfg, 4))
- return -1;
+ return -EIO;
return 0;
}
@@ -658,7 +644,7 @@
long data;
if ((port < 0) || (port > NETXEN_NIU_MAX_GBE_PORTS))
- return -1;
+ return -EINVAL;
if (mode == NETXEN_NIU_PROMISCOUS_MODE)
data = 0;
@@ -668,7 +654,7 @@
/* save previous contents */
if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_DROP_WRONGADDR,
®, 4))
- return -1;
+ return -EIO;
switch (port) {
case 0:
reg.drop_gb0 = data;
@@ -683,11 +669,11 @@
reg.drop_gb0 = data;
break;
default:
- return -1;
+ return -EIO;
}
if (netxen_nic_hw_write_wx(adapter,
NETXEN_NIU_GB_DROP_WRONGADDR,
®, 4))
- return -1;
+ return -EIO;
return 0;
}
@@ -701,20 +687,20 @@
netxen_crbword_t temp = 0;
if ((phy < 0) || (phy > 3))
- return -1;
+ return -EINVAL;
memcpy(&temp, addr, 2);
temp <<= 16;
if (netxen_nic_hw_write_wx(adapter,
NETXEN_NIU_XGE_STATION_ADDR_0_1,
&temp, 4))
- return -1;
+ return -EIO;
temp = 0;
memcpy(&temp, ((u8 *) addr) + 2, sizeof(netxen_crbword_t));
if (netxen_nic_hw_write_wx(adapter,
NETXEN_NIU_XGE_STATION_ADDR_0_HI,
&temp, 4))
- return -1;
+ return -EIO;
return 0;
}
@@ -731,16 +717,16 @@
u64 result;
if (addr == NULL)
- return -1;
+ return -EINVAL;
if (phy != 0)
- return -1;
+ return -EINVAL;
if (netxen_nic_hw_read_wx(adapter,
NETXEN_NIU_XGE_STATION_ADDR_0_HI,
&stationhigh, 4))
- return -1;
+ return -EIO;
if (netxen_nic_hw_read_wx(adapter,
NETXEN_NIU_XGE_STATION_ADDR_0_1,
&stationlow, 4))
- return -1;
+ return -EIO;
result = ((u64) stationlow) >> 16;
result |= (u64) stationhigh << 16;
@@ -755,10 +741,10 @@
long reg;
if ((port < 0) || (port > NETXEN_NIU_MAX_GBE_PORTS))
- return -1;
+ return -EINVAL;
if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_XGE_CONFIG_1,
®, 4))
- return -1;
+ return -EIO;
if (mode == NETXEN_NIU_PROMISCOUS_MODE)
reg = (reg | 0x2000UL);
else
On Thu, 2006-05-25 at 10:19 -0700, Stephen Hemminger wrote:
> > +void netxen_delay(int value)
> > +{
> > + unsigned long remainder;
> > +
> > + remainder = value / 50000;
> > + do {
> > + if (remainder > 1000) {
> > + udelay(1000);
> > + remainder -= 1000;
> > + } else {
> > + udelay(remainder + 1);
> > + remainder = 0;
> > + }
> > + } while (remainder > 0);
> > +}
> > +
>
>
> Defined, but never used. Why not just use mdelay if you
> really are waiting that long?
>
> +
> +
> +/**
> + * netxen_niu_gbe_set_mii_mode- Set 10/100 Mbit Mode for GbE MAC
> + *
> + **/
> +void netxen_niu_gbe_set_mii_mode(struct netxen_adapter *adapter,
> + long port, long enable)
> +{
> + netxen_crb_writelit_adapter(adapter, NETXEN_NIU_MODE, 0x2);
> + netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port),
> + 0x80000000);
> + netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port),
> + 0x0000f0025);
> + netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB_MAC_CONFIG_1(port),
> + 0xf1ff);
> + netxen_crb_writelit_adapter(adapter,
> + NETXEN_NIU_GB0_GMII_MODE + (port << 3), 0);
> + netxen_crb_writelit_adapter(adapter,
> + NETXEN_NIU_GB0_MII_MODE + (port << 3), 1);
> + netxen_crb_writelit_adapter(adapter,
> + (NETXEN_NIU_GB0_HALF_DUPLEX + port * 4), 0);
> + netxen_crb_writelit_adapter(adapter,
> + NETXEN_NIU_GB_MII_MGMT_CONFIG(port), 0x7);
> +
> + if (enable) {
> + /*
> + * Do NOT enable flow control until a suitable solution for
> + * shutting down pause frames is found.
> + */
> + netxen_crb_writelit_adapter(adapter,
> + NETXEN_NIU_GB_MAC_CONFIG_0(port),
> + 0x5);
> + }
> +
> >
> > + if (netxen_niu_gbe_enable_phy_interrupts(adapter, port))
> > + printk("<1>ERROR enabling PHY interrupts\n");
>
> Please use KERN_ERR not <1>
>
> > + if (netxen_niu_gbe_clear_phy_interrupts(adapter, port))
> > + printk("<1>ERROR clearing PHY interrupts\n");
> > +}
> > +
> > +long netxen_niu_gbe_init_port(struct netxen_adapter *adapter, long port)
> > +{
> > + long result = 0;
> > + struct netxen_niu_phy_status status;
> > +
> > + if (0 ==
> > + netxen_niu_gbe_phy_read(adapter, port,
> > + NETXEN_NIU_GB_MII_MGMT_ADDR_PHY_STATUS,
> > + (netxen_crbword_t *) & status)) {
>
> You seem to like the style:
> if (0 == foo())
> It is not the current kernel fashion, but I'm okay with it.
>
> > + if (status.link) {
> > + if (status.speed == 2) {
> > + netxen_niu_gbe_set_gmii_mode(adapter, port, 1);
> > + } else if ((status.speed == 1) || (status.speed == 0)) {
> > + netxen_niu_gbe_set_mii_mode(adapter, port, 1);
> > + } else {
> > + result = -1;
> > + }
> > +
> > + } else {
> > + /* We don't have link. Cable must be unconnected. */
> > + /* Enable phy interrupts so we take action when plugged in */
> > + netxen_crb_writelit_adapter(adapter,
> > + NETXEN_NIU_GB_MAC_CONFIG_0
> > + (port), 0x80000000);
> > + netxen_crb_writelit_adapter(adapter,
> > + NETXEN_NIU_GB_MAC_CONFIG_0
> > + (port), 0x0000f0025);
> > + if (netxen_niu_gbe_clear_phy_interrupts(adapter, port))
> > + printk("<1>ERROR clearing PHY interrupts\n");
> > + if (netxen_niu_gbe_enable_phy_interrupts(adapter, port))
> > + printk("<1>ERROR enabling PHY interrupts\n");
> > + if (netxen_niu_gbe_clear_phy_interrupts(adapter, port))
> > + printk("<1>ERROR clearing PHY interrupts\n");
> > + result = -1;
> > + }
> > + } else {
> > + result = -1;
> > + }
> > + return result;
> > +}
>
> Wouldn't this just be clearer with:
>
> long netxen_niu_gbe_init_port(struct netxen_adapter *adapter, long port)
> {
> int err;
> struct netxen_niu_phy_status status;
>
> err = netxen_niu_gbe_phy_read(adapter, port,
> NETXEN_NIU_GB_MII_MGMT_ADDR_PHY_STATUS,
> (netxen_crbword_t *) & status);
> if (err)
> return err;
>
> if (status.link) {
> if (status.speed == 2)
> netxen_niu_gbe_set_gmii_mode(adapter, port, 1);
> else if ((status.speed == 1) || (status.speed == 0))
> netxen_niu_gbe_set_mii_mode(adapter, port, 1);
> else
> return -EINVAL;
> return 0;
> }
>
> /* We don't have link. Cable must be unconnected. */
> /* Enable phy interrupts so we take action when plugged in */
> netxen_crb_writelit_adapter(adapter,
> NETXEN_NIU_GB_MAC_CONFIG_0
> (port), 0x80000000);
> netxen_crb_writelit_adapter(adapter,
> NETXEN_NIU_GB_MAC_CONFIG_0
> (port), 0x0000f0025);
> if (netxen_niu_gbe_clear_phy_interrupts(adapter, port))
> printk(KERN_ERR PFX "error clearing PHY interrupts\n");
> if (netxen_niu_gbe_enable_phy_interrupts(adapter, port))
> printk(KERN_ERR PFX "error enabling PHY interrupts\n");
> if (netxen_niu_gbe_clear_phy_interrupts(adapter, port))
> printk(KERN_ERR PFX "error clearing PHY interrupts\n");
>
> return -ENOTCONNECTED;
> }
>
>
> > +
> > +/**
> > + * netxen_niu_gbe_handle_phy_interrupt - Handles GbE PHY interrupts
> > + * @param enable 0 means don't enable the port
> > + * 1 means enable (or re-enable) the port
> > + **/
> > +long netxen_niu_gbe_handle_phy_interrupt(struct netxen_adapter *adapter,
> > + long port, long enable)
> > +{
> > + long result = 0;
> > + struct netxen_niu_phy_interrupt int_src;
> > +
> > + printk
> > + ("<1>NETXEN: Handling PHY interrupt on port %d (device enable = %d)\n",
> > + (int)port, (int)enable);
> > +
> > + /* The read of the PHY INT status will clear the pending interrupt status */
> > + if (netxen_niu_gbe_phy_read(adapter, port,
> > + NETXEN_NIU_GB_MII_MGMT_ADDR_INT_STATUS,
> > + (netxen_crbword_t *) & int_src) != 0)
> > + result = -1;
> > + else {
> > + printk("<1>PHY Interrupt source = 0x%x \n", *(u32 *) & int_src);
>
> These are debug messages, not a KERN_CRITICAL message..
>
> > + if (int_src.jabber)
> > + printk("<1>jabber Interrupt ");
> > + if (int_src.polarity_changed)
> > + printk("<1>polarity changed ");
> > + if (int_src.energy_detect)
> > + printk("<1>energy detect \n");
> > + if (int_src.downshift)
> > + printk("<1>downshift \n");
> > + if (int_src.mdi_xover_changed)
> > + printk("<1>mdi_xover_changed ");
> > + if (int_src.fifo_over_underflow)
> > + printk("<1>fifo_over_underflow ");
> > + if (int_src.false_carrier)
> > + printk("<1>false_carrier ");
> > + if (int_src.symbol_error)
> > + printk("<1>symbol_error ");
> > + if (int_src.autoneg_completed)
> > + printk("<1>autoneg_completed ");
> > + if (int_src.page_received)
> > + printk("<1>page_received ");
> > + if (int_src.duplex_changed)
> > + printk("<1>duplex_changed ");
> > + if (int_src.autoneg_error)
> > + printk("<1>autoneg_error ");
> > + if ((int_src.speed_changed) || (int_src.link_status_changed)) {
> > + struct netxen_niu_phy_status status;
> > +
> > + printk("<1>speed_changed or link status changed");
> > + if (netxen_niu_gbe_phy_read(adapter, port,
> > + NETXEN_NIU_GB_MII_MGMT_ADDR_PHY_STATUS,
> > + (netxen_crbword_t *) &
> > + status) == 0) {
> > + printk("<1>\n");
> > + if (status.speed == 2) {
> > + printk
> > + ("<1>Link speed changed to 1000 Mbps\n");
> > + netxen_niu_gbe_set_gmii_mode(adapter,
> > + port,
> > + enable);
> > + } else if (status.speed == 1) {
> > + printk
> > + ("<1>Link speed changed to 100 Mbps\n");
> > + netxen_niu_gbe_set_mii_mode(adapter,
> > + port,
> > + enable);
> > + } else if (status.speed == 0) {
> > + printk
> > + ("<1>Link speed changed to 10 Mbps\n");
> > + netxen_niu_gbe_set_mii_mode(adapter,
> > + port,
> > + enable);
> > + } else {
> > + printk
> > + ("<1>ERROR reading PHY status. Illegal speed.\n");
> > + result = -1;
> > + }
> > + } else {
> > + printk("<1>ERROR reading PHY status.\n");
> > + result = -1;
> > + }
> > +
> > + }
> > + printk("<1>\n");
> > + }
> > + return result;
> > +}
> > +
> > +/**
> > + * Return the current station MAC address.
> > + * Note that the passed-in value must already be in network byte order.
> > + **/
> > +int netxen_niu_macaddr_get(struct netxen_adapter *adapter,
> > + int phy, netxen_ethernet_macaddr_t * addr)
> > +{
> > + u64 result = 0;
> > + struct netxen_niu_gb_station_address_high stationhigh;
> > + struct netxen_niu_gb_station_address_low stationlow;
> > +
> > + if (addr == NULL)
> > + return -1;
> > + if ((phy < 0) || (phy > 3))
> > + return -1;
> > +
> > + if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_STATION_ADDR_0(phy),
> > + &stationhigh, 4))
> > + return -1;
> > + if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_STATION_ADDR_1(phy),
> > + &stationlow, 4))
> > + return -1;
> > +
> > + result = (u64) stationlow.address;
> > + result |= (u64) stationhigh.address << 16;
> > + memcpy(*addr, &result, sizeof(netxen_ethernet_macaddr_t));
> > +
> > + return 0;
> > +}
> > +
> > +/**
> > + * Set the station MAC address.
> > + * Note that the passed-in value must already be in network byte order.
> > + **/
> > +int netxen_niu_macaddr_set(struct netxen_adapter *adapter, int phy,
> > + netxen_ethernet_macaddr_t addr)
> > +{
> > + netxen_crbword_t temp = 0;
> > +
> > + if ((phy < 0) || (phy > 3))
> > + return -1;
> > +
> > + memcpy(&temp, addr, 2);
> > + temp <<= 16;
> > + if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_STATION_ADDR_1(phy),
> > + &temp, 4))
> > + return -1;
> > +
> > + temp = 0;
> > +
> > + memcpy(&temp, ((u8 *) addr) + 2, sizeof(netxen_crbword_t));
> > + if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_STATION_ADDR_0(phy),
> > + &temp, 4))
> > + return -2;
>
> Please use -ERRNO style returns.
>
> > +
> > + return 0;
> > +}
> > +
> > +/* Enable a GbE interface */
> > +long netxen_niu_enable_gbe_port(struct netxen_adapter *adapter,
> > + long port, netxen_niu_gbe_ifmode_t mode)
> > +{
> > + struct netxen_niu_gb_mac_config_0_t mac_cfg0;
> > + struct netxen_niu_gb_mac_config_1_t mac_cfg1;
> > + struct netxen_niu_gb_mii_mgmt_config mii_cfg;
> > +
> > + if ((port < 0) || (port > NETXEN_NIU_MAX_GBE_PORTS))
> > + return -1;
> > +
> > + *(netxen_crbword_t *) & mac_cfg0 = 0;
> > + mac_cfg0.soft_reset = 1;
> > + if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port),
> > + &mac_cfg0, 4))
> > + return -1;
> > + *(netxen_crbword_t *) & mac_cfg0 = 0;
> > + mac_cfg0.tx_enable = 1;
> > + mac_cfg0.rx_enable = 1;
> > + mac_cfg0.rx_flowctl = 0;
> > + mac_cfg0.tx_reset_pb = 1;
> > + mac_cfg0.rx_reset_pb = 1;
> > + mac_cfg0.tx_reset_mac = 1;
> > + mac_cfg0.rx_reset_mac = 1;
> > +
> > + if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port),
> > + &mac_cfg0, 4))
> > + return -1;
> > + *(netxen_crbword_t *) & mac_cfg1 = 0;
> > + mac_cfg1.preamblelen = 0xf;
> > + mac_cfg1.duplex = 1;
> > + mac_cfg1.crc_enable = 1;
> > + mac_cfg1.padshort = 1;
> > + mac_cfg1.checklength = 1;
> > + mac_cfg1.hugeframes = 1;
> > +
> > + if (mode == NETXEN_NIU_10_100_MB) {
> > + mac_cfg1.intfmode = 1;
> > + if (netxen_nic_hw_write_wx(adapter,
> > + NETXEN_NIU_GB_MAC_CONFIG_1(port),
> > + &mac_cfg1, 4))
> > + return -1;
> > +
> > + /* set mii mode */
> > + netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB0_GMII_MODE +
> > + (port << 3), 0);
> > + netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB0_MII_MODE +
> > + (port << 3), 1);
> > +
> > + } else if (mode == NETXEN_NIU_1000_MB) {
> > + mac_cfg1.intfmode = 2;
> > + if (netxen_nic_hw_write_wx(adapter,
> > + NETXEN_NIU_GB_MAC_CONFIG_1(port),
> > + &mac_cfg1, 4))
> > + return -1;
> > + /* set gmii mode */
> > + netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB0_MII_MODE +
> > + (port << 3), 0);
> > + netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB0_GMII_MODE +
> > + (port << 3), 1);
> > + }
> > + *(netxen_crbword_t *) & mii_cfg = 0;
> > + mii_cfg.clockselect = 7;
> > + if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_CONFIG(port),
> > + &mii_cfg, 4))
> > + return -1;
> > +
> > + *(netxen_crbword_t *) & mac_cfg0 = 0;
> > + mac_cfg0.tx_enable = 1;
> > + mac_cfg0.rx_enable = 1;
> > + mac_cfg0.tx_flowctl = 0;
> > + mac_cfg0.rx_flowctl = 0;
> > + if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port),
> > + &mac_cfg0, 4))
> > + return -1;
> > + return 0;
> > +}
> > +
> > +/* Disable a GbE interface */
> > +long netxen_niu_disable_gbe_port(struct netxen_adapter *adapter, long port)
> > +{
> > + struct netxen_niu_gb_mac_config_0_t mac_cfg0;
> > +
> > + if ((port < 0) || (port > NETXEN_NIU_MAX_GBE_PORTS))
> > + return -1;
> return -EINVAL?
>
> > +
> > + *(netxen_crbword_t *) & mac_cfg0 = 0;
> > + mac_cfg0.soft_reset = 1;
> > + if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port),
> > + &mac_cfg0, 4))
> > + return -1;
> > + return 0;
>
> how about just
> return netxen_nic_hw_write_wx(...)
>
> > +}
> > +
> > +/* Disable an XG interface */
> > +long netxen_niu_disable_xg_port(struct netxen_adapter *adapter, long port)
> > +{
> > + struct netxen_niu_xg_mac_config_0_t mac_cfg;
> > +
> > + if (port != 0)
> > + return -1;
> > +
> > + *(netxen_crbword_t *) & mac_cfg = 0;
> > + mac_cfg.soft_reset = 1;
> > + if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_XGE_CONFIG_0,
> > + &mac_cfg, 4))
> > + return -1;
> > + return 0;
> > +}
> > +
> > +/* Set promiscuous mode for a GbE interface */
> > +long netxen_niu_set_promiscuous_mode(struct netxen_adapter *adapter, long port,
> > + netxen_niu_prom_mode_t mode)
> > +{
> > + struct netxen_niu_gb_drop_crc reg;
> > + long data;
> > +
> > + if ((port < 0) || (port > NETXEN_NIU_MAX_GBE_PORTS))
> > + return -1;
> > +
> > + if (mode == NETXEN_NIU_PROMISCOUS_MODE)
> > + data = 0;
> > + else
> > + data = 1;
> > +
> > + /* save previous contents */
> > + if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_DROP_WRONGADDR,
> > + ®, 4))
> > + return -1;
> > + switch (port) {
> > + case 0:
> > + reg.drop_gb0 = data;
> > + break;
> > + case 1:
> > + reg.drop_gb0 = data;
> > + break;
> > + case 2:
> > + reg.drop_gb0 = data;
> > + break;
> > + case 3:
> > + reg.drop_gb0 = data;
> > + break;
> > + default:
> > + return -1;
> > + }
> > + if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_DROP_WRONGADDR,
> > + ®, 4))
> > + return -1;
> > + return 0;
> > +}
> > +
> > +/**
> > + * Set the MAC address for an XG port
> > + * Note that the passed-in value must already be in network byte order.
> > + **/
> > +int netxen_niu_xg_macaddr_set(struct netxen_adapter *adapter, int phy,
> > + netxen_ethernet_macaddr_t addr)
> > +{
> > + netxen_crbword_t temp = 0;
> > +
> > + if ((phy < 0) || (phy > 3))
> > + return -1;
> > +
> > + memcpy(&temp, addr, 2);
> > + temp <<= 16;
> > + if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_1,
> > + &temp, 4))
> > + return -1;
> > +
> > + temp = 0;
> > +
> > + memcpy(&temp, ((u8 *) addr) + 2, sizeof(netxen_crbword_t));
> > + if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_HI,
> > + &temp, 4))
> > + return -1;
> > +
> > + return 0;
> > +}
> > +
> > +/**
> > + * Return the current station MAC address.
> > + * Note that the passed-in value must already be in network byte order.
> > + **/
> > +int netxen_niu_xg_macaddr_get(struct netxen_adapter *adapter, int phy,
> > + netxen_ethernet_macaddr_t * addr)
> > +{
> > + netxen_crbword_t stationhigh;
> > + netxen_crbword_t stationlow;
> > + u64 result;
> > +
> > + if (addr == NULL)
> > + return -1;
> > + if (phy != 0)
> > + return -1;
> > +
> > + if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_HI,
> > + &stationhigh, 4))
> > + return -1;
> > + if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_1,
> > + &stationlow, 4))
> > + return -1;
> > +
> > + result = ((u64) stationlow) >> 16;
> > + result |= (u64) stationhigh << 16;
> > + memcpy(*addr, &result, sizeof(netxen_ethernet_macaddr_t));
> > +
> > + return 0;
> > +}
> > +
> > +long netxen_niu_xg_set_promiscuous_mode(struct netxen_adapter *adapter,
> > + long port, netxen_niu_prom_mode_t mode)
> > +{
> > + long reg;
> > +
> > + if ((port < 0) || (port > NETXEN_NIU_MAX_GBE_PORTS))
> > + return -1;
> > +
> > + if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_XGE_CONFIG_1, ®, 4))
> > + return -1;
> > + if (mode == NETXEN_NIU_PROMISCOUS_MODE)
> > + reg = (reg | 0x2000UL);
> > + else
> > + reg = (reg & ~0x2000UL);
> > +
> > + netxen_crb_writelit_adapter(adapter, NETXEN_NIU_XGE_CONFIG_1, reg);
> > +
> > + return 0;
> > +}
> >
>
>
--
pradeep
prev parent reply other threads:[~2006-05-26 14:50 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-05-25 10:58 [PATCH 9/9] Resending NetXen 1G/10G NIC driver patch Linsys Contractor Amit S. Kale
2006-05-25 17:19 ` Stephen Hemminger
2006-05-26 14:30 ` Pradeep Dalvi [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1148653814.3453.118.camel@arya.linsyssoft.com \
--to=pradeep@linsyssoft.com \
--cc=amitkale@unminc.com \
--cc=netdev@vger.kernel.org \
--cc=sanjeev@netxen.com \
--cc=shemminger@osdl.org \
--cc=unmproj@linsyssoft.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).