RESEND [PATCH 3/3] NetXen: Graceful teardown of interface and hardware upon module unload

2007-07-01 Thread dhananjay . phadke
These changes allow driver close routine to be called during module unload,
to clean-up buffers and other software resources, flush queues etc. Also,
hardware is reset to pristine state. 

Signed-off-by: Dhananjay Phadke [EMAIL PROTECTED]
Signed-off-by: Milan Bag [EMAIL PROTECTED]
Signed-off-by: Wen Xiong [EMAIL PROTECTED]

Index: netdev-2.6/drivers/net/netxen/netxen_nic.h
===
--- netdev-2.6.orig/drivers/net/netxen/netxen_nic.h
+++ netdev-2.6/drivers/net/netxen/netxen_nic.h
@@ -952,6 +952,24 @@ struct netxen_adapter {
int (*stop_port) (struct netxen_adapter *);
 }; /* netxen_adapter structure */
 
+/*
+ * NetXen dma watchdog control structure
+ *
+ * Bit 0   : enabled = R/O: 1 watchdog active, 0 inactive
+ * Bit 1   : disable_request = 1 req disable dma watchdog
+ * Bit 2   : enable_request =  1 req enable dma watchdog
+ * Bit 3-31: unused
+ */
+
+#define netxen_set_dma_watchdog_disable_req(config_word) \
+   _netxen_set_bits(config_word, 1, 1, 1)
+#define netxen_set_dma_watchdog_enable_req(config_word) \
+   _netxen_set_bits(config_word, 2, 1, 1)
+#define netxen_get_dma_watchdog_enabled(config_word) \
+   ((config_word)  0x1)
+#define netxen_get_dma_watchdog_disabled(config_word) \
+   (((config_word)  1)  0x1)
+
 /* Max number of xmit producer threads that can run simultaneously */
 #defineMAX_XMIT_PRODUCERS  16
 
@@ -1031,8 +1049,8 @@ int netxen_nic_erase_pxe(struct netxen_a
 /* Functions from netxen_nic_init.c */
 void netxen_free_adapter_offload(struct netxen_adapter *adapter);
 int netxen_initialize_adapter_offload(struct netxen_adapter *adapter);
-void netxen_phantom_init(struct netxen_adapter *adapter, int pegtune_val);
-void netxen_load_firmware(struct netxen_adapter *adapter);
+int netxen_phantom_init(struct netxen_adapter *adapter, int pegtune_val);
+int netxen_load_firmware(struct netxen_adapter *adapter);
 int netxen_pinit_from_rom(struct netxen_adapter *adapter, int verbose);
 int netxen_rom_fast_read(struct netxen_adapter *adapter, int addr, int *valp);
 int netxen_rom_fast_read_words(struct netxen_adapter *adapter, int addr, 
@@ -1234,6 +1252,62 @@ static inline void get_brd_name_by_type(
name = Unknown;
 }
 
+static inline int
+dma_watchdog_shutdown_request(struct netxen_adapter *adapter)
+{
+   u32 ctrl;
+
+   /* check if already inactive */
+   if (netxen_nic_hw_read_wx(adapter,
+   NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl, 4))
+   printk(KERN_ERR failed to read dma watchdog status\n);
+
+   if (netxen_get_dma_watchdog_enabled(ctrl) == 0)
+   return 1;
+
+   /* Send the disable request */
+   netxen_set_dma_watchdog_disable_req(ctrl);
+   netxen_crb_writelit_adapter(adapter,
+   NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl);
+
+   return 0;
+}
+
+static inline int
+dma_watchdog_shutdown_poll_result(struct netxen_adapter *adapter)
+{
+   u32 ctrl;
+
+   if (netxen_nic_hw_read_wx(adapter,
+   NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl, 4))
+   printk(KERN_ERR failed to read dma watchdog status\n);
+
+   return ((netxen_get_dma_watchdog_enabled(ctrl) == 0) 
+   (netxen_get_dma_watchdog_disabled(ctrl) == 0));
+}
+
+static inline int
+dma_watchdog_wakeup(struct netxen_adapter *adapter)
+{
+   u32 ctrl;
+
+   if (netxen_nic_hw_read_wx(adapter,
+   NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl, 4))
+   printk(KERN_ERR failed to read dma watchdog status\n);
+
+   if (netxen_get_dma_watchdog_enabled(ctrl))
+   return 1;
+
+   /* send the wakeup request */
+   netxen_set_dma_watchdog_enable_req(ctrl);
+
+   netxen_crb_writelit_adapter(adapter,
+   NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl);
+
+   return 0;
+}
+
+
 int netxen_is_flash_supported(struct netxen_adapter *adapter);
 int netxen_get_flash_mac_addr(struct netxen_adapter *adapter, u64 mac[]);
 extern void netxen_change_ringparam(struct netxen_adapter *adapter);
Index: netdev-2.6/drivers/net/netxen/netxen_nic_hdr.h
===
--- netdev-2.6.orig/drivers/net/netxen/netxen_nic_hdr.h
+++ netdev-2.6/drivers/net/netxen/netxen_nic_hdr.h
@@ -687,4 +687,6 @@ enum {
 
 #define PCIE_MAX_MASTER_SPLIT  (0x14048)
 
+#define NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL   (0x14)
+
 #endif /* __NETXEN_NIC_HDR_H_ */
Index: netdev-2.6/drivers/net/netxen/netxen_nic_hw.c
===
--- netdev-2.6.orig/drivers/net/netxen/netxen_nic_hw.c
+++ netdev-2.6/drivers/net/netxen/netxen_nic_hw.c
@@ -377,7 +377,7 @@ int netxen_nic_hw_resources(struct netxe

Re: RESEND [PATCH 3/3] NetXen: Graceful teardown of interface and hardware upon module unload

2007-07-01 Thread Michael Buesch
On Sunday 01 July 2007 20:56:01 [EMAIL PROTECTED] wrote:
 These changes allow driver close routine to be called during module unload,
 to clean-up buffers and other software resources, flush queues etc. Also,
 hardware is reset to pristine state. 
 
 Signed-off-by: Dhananjay Phadke [EMAIL PROTECTED]
 Signed-off-by: Milan Bag [EMAIL PROTECTED]
 Signed-off-by: Wen Xiong [EMAIL PROTECTED]
 


 + msleep(1);
 + if (netxen_load_firmware(adapter))
 + return;
 + netxen_phantom_init(adapter, NETXEN_NIC_PEG_TUNE);
 + }
 +
 + /* clear the register for future unloads/loads */
 + writel(0, NETXEN_CRB_NORMALIZE(adapter, NETXEN_CAM_RAM(0x1fc)));
 + printk(KERN_INFO State: 0x%0x\n,
 + readl(NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE)));
 +
 + dma_watchdog_shutdown_request(adapter);
 + mdelay(100);
 + i = 100;
 + while ((dma_watchdog_shutdown_poll_result(adapter) != 1)  i) {
 + printk(KERN_INFO dma_watchdog_shutdown_poll still in 
 progress\n);
 + mdelay(100);
 + i--;
 + }

msleep, please.

-- 
Greetings Michael.
-
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


RESEND [PATCH 3/3] NetXen: Graceful teardown of interface and hardware upon module unload

2007-07-01 Thread Dhananjay Phadke
Resending patch 3/3 only.

These changes allow driver close routine to be called during module unload,
to clean-up buffers and other software resources, flush queues etc. Also,
hardware is reset to pristine state. 

Signed-off-by: Dhananjay Phadke [EMAIL PROTECTED]
Signed-off-by: Milan Bag [EMAIL PROTECTED]
Signed-off-by: Wen Xiong [EMAIL PROTECTED]

Index: netdev-2.6/drivers/net/netxen/netxen_nic.h
===
--- netdev-2.6.orig/drivers/net/netxen/netxen_nic.h
+++ netdev-2.6/drivers/net/netxen/netxen_nic.h
@@ -952,6 +952,24 @@ struct netxen_adapter {
int (*stop_port) (struct netxen_adapter *);
 }; /* netxen_adapter structure */
 
+/*
+ * NetXen dma watchdog control structure
+ *
+ * Bit 0   : enabled = R/O: 1 watchdog active, 0 inactive
+ * Bit 1   : disable_request = 1 req disable dma watchdog
+ * Bit 2   : enable_request =  1 req enable dma watchdog
+ * Bit 3-31: unused
+ */
+
+#define netxen_set_dma_watchdog_disable_req(config_word) \
+   _netxen_set_bits(config_word, 1, 1, 1)
+#define netxen_set_dma_watchdog_enable_req(config_word) \
+   _netxen_set_bits(config_word, 2, 1, 1)
+#define netxen_get_dma_watchdog_enabled(config_word) \
+   ((config_word)  0x1)
+#define netxen_get_dma_watchdog_disabled(config_word) \
+   (((config_word)  1)  0x1)
+
 /* Max number of xmit producer threads that can run simultaneously */
 #defineMAX_XMIT_PRODUCERS  16
 
@@ -1031,8 +1049,8 @@ int netxen_nic_erase_pxe(struct netxen_a
 /* Functions from netxen_nic_init.c */
 void netxen_free_adapter_offload(struct netxen_adapter *adapter);
 int netxen_initialize_adapter_offload(struct netxen_adapter *adapter);
-void netxen_phantom_init(struct netxen_adapter *adapter, int pegtune_val);
-void netxen_load_firmware(struct netxen_adapter *adapter);
+int netxen_phantom_init(struct netxen_adapter *adapter, int pegtune_val);
+int netxen_load_firmware(struct netxen_adapter *adapter);
 int netxen_pinit_from_rom(struct netxen_adapter *adapter, int verbose);
 int netxen_rom_fast_read(struct netxen_adapter *adapter, int addr, int *valp);
 int netxen_rom_fast_read_words(struct netxen_adapter *adapter, int addr, 
@@ -1234,6 +1252,62 @@ static inline void get_brd_name_by_type(
name = Unknown;
 }
 
+static inline int
+dma_watchdog_shutdown_request(struct netxen_adapter *adapter)
+{
+   u32 ctrl;
+
+   /* check if already inactive */
+   if (netxen_nic_hw_read_wx(adapter,
+   NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl, 4))
+   printk(KERN_ERR failed to read dma watchdog status\n);
+
+   if (netxen_get_dma_watchdog_enabled(ctrl) == 0)
+   return 1;
+
+   /* Send the disable request */
+   netxen_set_dma_watchdog_disable_req(ctrl);
+   netxen_crb_writelit_adapter(adapter,
+   NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl);
+
+   return 0;
+}
+
+static inline int
+dma_watchdog_shutdown_poll_result(struct netxen_adapter *adapter)
+{
+   u32 ctrl;
+
+   if (netxen_nic_hw_read_wx(adapter,
+   NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl, 4))
+   printk(KERN_ERR failed to read dma watchdog status\n);
+
+   return ((netxen_get_dma_watchdog_enabled(ctrl) == 0) 
+   (netxen_get_dma_watchdog_disabled(ctrl) == 0));
+}
+
+static inline int
+dma_watchdog_wakeup(struct netxen_adapter *adapter)
+{
+   u32 ctrl;
+
+   if (netxen_nic_hw_read_wx(adapter,
+   NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl, 4))
+   printk(KERN_ERR failed to read dma watchdog status\n);
+
+   if (netxen_get_dma_watchdog_enabled(ctrl))
+   return 1;
+
+   /* send the wakeup request */
+   netxen_set_dma_watchdog_enable_req(ctrl);
+
+   netxen_crb_writelit_adapter(adapter,
+   NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl);
+
+   return 0;
+}
+
+
 int netxen_is_flash_supported(struct netxen_adapter *adapter);
 int netxen_get_flash_mac_addr(struct netxen_adapter *adapter, u64 mac[]);
 extern void netxen_change_ringparam(struct netxen_adapter *adapter);
Index: netdev-2.6/drivers/net/netxen/netxen_nic_hdr.h
===
--- netdev-2.6.orig/drivers/net/netxen/netxen_nic_hdr.h
+++ netdev-2.6/drivers/net/netxen/netxen_nic_hdr.h
@@ -687,4 +687,6 @@ enum {
 
 #define PCIE_MAX_MASTER_SPLIT  (0x14048)
 
+#define NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL   (0x14)
+
 #endif /* __NETXEN_NIC_HDR_H_ */
Index: netdev-2.6/drivers/net/netxen/netxen_nic_hw.c
===
--- netdev-2.6.orig/drivers/net/netxen/netxen_nic_hw.c
+++ netdev-2.6/drivers/net/netxen/netxen_nic_hw.c
@@ -377,7 +377,7 @@ int netxen_nic_hw_resources(struct netxe
 

RESEND [PATCH 3/3] NetXen: Graceful teardown of interface and hardware upon module unload

2007-06-30 Thread dhananjay . phadke
These changes allow driver close routine to be called during module unload,
to clean-up buffers and other software resources, flush queues etc. Also,
hardware is reset to pristine state. 

Signed-off-by: Dhananjay Phadke [EMAIL PROTECTED]
Signed-off-by: Milan Bag [EMAIL PROTECTED]
Signed-off-by: Wen Xiong [EMAIL PROTECTED]

Index: netdev-2.6/drivers/net/netxen/netxen_nic.h
===
--- netdev-2.6.orig/drivers/net/netxen/netxen_nic.h
+++ netdev-2.6/drivers/net/netxen/netxen_nic.h
@@ -952,6 +952,24 @@ struct netxen_adapter {
int (*stop_port) (struct netxen_adapter *);
 }; /* netxen_adapter structure */
 
+/*
+ * NetXen dma watchdog control structure
+ *
+ * Bit 0   : enabled = R/O: 1 watchdog active, 0 inactive
+ * Bit 1   : disable_request = 1 req disable dma watchdog
+ * Bit 2   : enable_request =  1 req enable dma watchdog
+ * Bit 3-31: unused
+ */
+
+#define netxen_set_dma_watchdog_disable_req(config_word) \
+   _netxen_set_bits(config_word, 1, 1, 1)
+#define netxen_set_dma_watchdog_enable_req(config_word) \
+   _netxen_set_bits(config_word, 2, 1, 1)
+#define netxen_get_dma_watchdog_enabled(config_word) \
+   ((config_word)  0x1)
+#define netxen_get_dma_watchdog_disabled(config_word) \
+   (((config_word)  1)  0x1)
+
 /* Max number of xmit producer threads that can run simultaneously */
 #defineMAX_XMIT_PRODUCERS  16
 
@@ -1031,8 +1049,8 @@ int netxen_nic_erase_pxe(struct netxen_a
 /* Functions from netxen_nic_init.c */
 void netxen_free_adapter_offload(struct netxen_adapter *adapter);
 int netxen_initialize_adapter_offload(struct netxen_adapter *adapter);
-void netxen_phantom_init(struct netxen_adapter *adapter, int pegtune_val);
-void netxen_load_firmware(struct netxen_adapter *adapter);
+int netxen_phantom_init(struct netxen_adapter *adapter, int pegtune_val);
+int netxen_load_firmware(struct netxen_adapter *adapter);
 int netxen_pinit_from_rom(struct netxen_adapter *adapter, int verbose);
 int netxen_rom_fast_read(struct netxen_adapter *adapter, int addr, int *valp);
 int netxen_rom_fast_read_words(struct netxen_adapter *adapter, int addr, 
@@ -1231,6 +1249,62 @@ static inline void get_brd_name_by_type(
name = Unknown;
 }
 
+static inline int
+dma_watchdog_shutdown_request(struct netxen_adapter *adapter)
+{
+   u32 ctrl;
+
+   /* check if already inactive */
+   if (netxen_nic_hw_read_wx(adapter,
+   NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl, 4))
+   printk(KERN_ERR failed to read dma watchdog status\n);
+
+   if (netxen_get_dma_watchdog_enabled(ctrl) == 0)
+   return 1;
+
+   /* Send the disable request */
+   netxen_set_dma_watchdog_disable_req(ctrl);
+   netxen_crb_writelit_adapter(adapter,
+   NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl);
+
+   return 0;
+}
+
+static inline int
+dma_watchdog_shutdown_poll_result(struct netxen_adapter *adapter)
+{
+   u32 ctrl;
+
+   if (netxen_nic_hw_read_wx(adapter,
+   NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl, 4))
+   printk(KERN_ERR failed to read dma watchdog status\n);
+
+   return ((netxen_get_dma_watchdog_enabled(ctrl) == 0) 
+   (netxen_get_dma_watchdog_disabled(ctrl) == 0));
+}
+
+static inline int
+dma_watchdog_wakeup(struct netxen_adapter *adapter)
+{
+   u32 ctrl;
+
+   if (netxen_nic_hw_read_wx(adapter,
+   NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl, 4))
+   printk(KERN_ERR failed to read dma watchdog status\n);
+
+   if (netxen_get_dma_watchdog_enabled(ctrl))
+   return 1;
+
+   /* send the wakeup request */
+   netxen_set_dma_watchdog_enable_req(ctrl);
+
+   netxen_crb_writelit_adapter(adapter,
+   NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), ctrl);
+
+   return 0;
+}
+
+
 int netxen_is_flash_supported(struct netxen_adapter *adapter);
 int netxen_get_flash_mac_addr(struct netxen_adapter *adapter, u64 mac[]);
 extern void netxen_change_ringparam(struct netxen_adapter *adapter);
Index: netdev-2.6/drivers/net/netxen/netxen_nic_hdr.h
===
--- netdev-2.6.orig/drivers/net/netxen/netxen_nic_hdr.h
+++ netdev-2.6/drivers/net/netxen/netxen_nic_hdr.h
@@ -687,4 +687,6 @@ enum {
 
 #define PCIE_MAX_MASTER_SPLIT  (0x14048)
 
+#define NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL   (0x14)
+
 #endif /* __NETXEN_NIC_HDR_H_ */
Index: netdev-2.6/drivers/net/netxen/netxen_nic_hw.c
===
--- netdev-2.6.orig/drivers/net/netxen/netxen_nic_hw.c
+++ netdev-2.6/drivers/net/netxen/netxen_nic_hw.c
@@ -377,7 +377,7 @@ int netxen_nic_hw_resources(struct netxe