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 - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html