[PATCH] NetXen: temp monitoring, newer firmware support, mm footprint reduction
NetXen: 1G/10G Ethernet Driver updates
- Temparature monitoring and device control
- Memory footprint reduction
- Driver changes to support newer version of firmware
Signed-off-by: Amit S. Kale <amitkale@netxen.com>
netxen_nic.h | 165 ++++++++++++++++++++++++++++++++--
netxen_nic_ethtool.c | 89 ++++++++++++------
netxen_nic_hdr.h | 71 +++++++++++++-
netxen_nic_hw.c | 206 +++++++++++++++++++++++++++++--------------
netxen_nic_hw.h | 8 +
netxen_nic_init.c | 239 +++++++++++++++++++++++++++++++++++++++++---------
netxen_nic_ioctl.h | 12 +-
netxen_nic_isr.c | 54 +++++------
netxen_nic_main.c | 121 +++++++++++++++++--------
netxen_nic_niu.c | 172 +++++++++++++++++++++++++++--------
netxen_nic_phan_reg.h | 24 ++++-
11 files changed, 891 insertions(+), 270 deletions(-)
Signed-off-by: Jeff Garzik <jeff@garzik.org>
diff --git a/drivers/net/netxen/netxen_nic_isr.c b/drivers/net/netxen/netxen_nic_isr.c
index f1c3e5a..ae180fe 100644
--- a/drivers/net/netxen/netxen_nic_isr.c
+++ b/drivers/net/netxen/netxen_nic_isr.c
@@ -149,47 +149,41 @@
void netxen_nic_isr_other(struct netxen_adapter *adapter)
{
- u32 enable, portno;
- u32 i2qhi;
-
- /*
- * bit 3 is for i2qInt, if high its enabled
- * check for phy interrupts
- * read vector and check for bit 45 for phy
- * clear int by writing the same value into ISR_INT_VECTOR REG
- */
-
- DPRINTK(INFO, "I2Q is the source of INT \n");
+ u32 portno;
+ u32 val, linkup, qg_linksup;
/* verify the offset */
- i2qhi = readl(NETXEN_CRB_NORMALIZE(adapter, NETXEN_I2Q_CLR_PCI_HI));
+ val = readl(NETXEN_CRB_NORMALIZE(adapter, CRB_XG_STATE));
+ if (val == adapter->ahw.qg_linksup)
+ return;
- DPRINTK(INFO, "isr NETXEN_I2Q_CLR_PCI_HI = 0x%x \n", i2qhi);
+ qg_linksup = adapter->ahw.qg_linksup;
+ adapter->ahw.qg_linksup = val;
+ DPRINTK(1, INFO, "%s: link update 0x%08x\n", netxen_nic_driver_name,
+ val);
+ for (portno = 0; portno < NETXEN_NIU_MAX_GBE_PORTS; portno++) {
+ linkup = val & 1;
+ if (linkup != (qg_linksup & 1)) {
+ printk(KERN_INFO "%s: PORT %d link %s\n",
+ netxen_nic_driver_name, portno,
+ ((linkup == 0) ? "down" : "up"));
+ netxen_indicate_link_status(adapter, portno, linkup);
+ if (linkup)
+ netxen_nic_set_link_parameters(adapter->
+ port[portno]);
- if (i2qhi & 0x4000) {
- for (portno = 0; portno < NETXEN_NIU_MAX_GBE_PORTS; portno++) {
- DPRINTK(INFO, "External PHY interrupt ON PORT %d\n",
- portno);
-
- enable = 1;
- netxen_handle_port_int(adapter, portno, enable);
}
-
- /* Clear the interrupt on I2Q */
- writel((u32) i2qhi,
- NETXEN_CRB_NORMALIZE(adapter, NETXEN_I2Q_CLR_PCI_HI));
-
+ val = val >> 1;
+ qg_linksup = qg_linksup >> 1;
}
+
+ adapter->stats.otherints++;
+
}
void netxen_nic_gbe_handle_phy_intr(struct netxen_adapter *adapter)
{
- u32 val;
- val = readl(NETXEN_CRB_NORMALIZE(adapter, ISR_INT_VECTOR));
- if (val & 0x4) {
- adapter->stats.otherints++;
- netxen_nic_isr_other(adapter);
- }
+ netxen_nic_isr_other(adapter);
}
void netxen_nic_xgbe_handle_phy_intr(struct netxen_adapter *adapter)