> +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,
> +                               &reg, 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,
> +                                &reg, 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, &reg, 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;
> +}
>
-
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

Reply via email to