aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/netxen/netxen_nic.h
diff options
context:
space:
mode:
authorDhananjay Phadke <dhananjay@netxen.com>2009-09-05 13:43:08 -0400
committerDavid S. Miller <davem@davemloft.net>2009-09-07 04:53:06 -0400
commit6a581e93981e8838c85e407303186faf937830d3 (patch)
tree3e2f083971fc33d4a3e88e7cc37e346f775d7168 /drivers/net/netxen/netxen_nic.h
parentdb4cfd8a6149e778befb2ff6e6f91cdc6394cbe6 (diff)
netxen: firmware hang detection
Implement state machine to detect firmware hung state and recover. Since firmware will be shared by all PCI functions that have different class drivers (NIC or FCOE or iSCSI), explicit hardware based serialization is required for initializing firmware. o Used global scratchpad register to maintain device reference count. Every probed pci function adds to ref count. o Implement timer (delayed work) for each pci func that checks firmware heartbit every 5 sec and detaches itself if firmware is dead. Last detaching function reloads firmware. Other functions wait for firmware init, and re-attach themselves. Heartbit is not supported by NX2031 firmware. Signed-off-by: Amit Kumar Salecha <amit@netxen.com> Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/netxen/netxen_nic.h')
-rw-r--r--drivers/net/netxen/netxen_nic.h17
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/net/netxen/netxen_nic.h b/drivers/net/netxen/netxen_nic.h
index ede2fa7477ac..30a38163b23b 100644
--- a/drivers/net/netxen/netxen_nic.h
+++ b/drivers/net/netxen/netxen_nic.h
@@ -229,6 +229,8 @@
229#define MPORT_SINGLE_FUNCTION_MODE 0x1111 229#define MPORT_SINGLE_FUNCTION_MODE 0x1111
230#define MPORT_MULTI_FUNCTION_MODE 0x2222 230#define MPORT_MULTI_FUNCTION_MODE 0x2222
231 231
232#define NX_MAX_PCI_FUNC 8
233
232/* 234/*
233 * NetXen host-peg signal message structure 235 * NetXen host-peg signal message structure
234 * 236 *
@@ -1101,6 +1103,10 @@ typedef struct {
1101#define NETXEN_ADAPTER_UP_MAGIC 777 1103#define NETXEN_ADAPTER_UP_MAGIC 777
1102#define NETXEN_NIC_PEG_TUNE 0 1104#define NETXEN_NIC_PEG_TUNE 0
1103 1105
1106#define __NX_FW_ATTACHED 0
1107#define __NX_DEV_UP 1
1108#define __NX_RESETTING 2
1109
1104struct netxen_dummy_dma { 1110struct netxen_dummy_dma {
1105 void *addr; 1111 void *addr;
1106 dma_addr_t phys_addr; 1112 dma_addr_t phys_addr;
@@ -1137,7 +1143,9 @@ struct netxen_adapter {
1137 u8 max_mc_count; 1143 u8 max_mc_count;
1138 u8 rss_supported; 1144 u8 rss_supported;
1139 u8 link_changed; 1145 u8 link_changed;
1140 u32 resv3; 1146 u8 fw_wait_cnt;
1147 u8 fw_fail_cnt;
1148 u16 resv4;
1141 1149
1142 u8 has_link_events; 1150 u8 has_link_events;
1143 u8 fw_type; 1151 u8 fw_type;
@@ -1156,7 +1164,7 @@ struct netxen_adapter {
1156 u32 temp; 1164 u32 temp;
1157 1165
1158 u32 msi_tgt_status; 1166 u32 msi_tgt_status;
1159 u32 resv4; 1167 u32 heartbit;
1160 1168
1161 struct netxen_adapter_stats stats; 1169 struct netxen_adapter_stats stats;
1162 1170
@@ -1187,14 +1195,15 @@ struct netxen_adapter {
1187 1195
1188 struct netxen_dummy_dma dummy_dma; 1196 struct netxen_dummy_dma dummy_dma;
1189 1197
1190 struct work_struct watchdog_task; 1198 struct delayed_work fw_work;
1191 struct timer_list watchdog_timer; 1199
1192 struct work_struct tx_timeout_task; 1200 struct work_struct tx_timeout_task;
1193 1201
1194 struct net_device_stats net_stats; 1202 struct net_device_stats net_stats;
1195 1203
1196 nx_nic_intr_coalesce_t coal; 1204 nx_nic_intr_coalesce_t coal;
1197 1205
1206 unsigned long state;
1198 u32 resv5; 1207 u32 resv5;
1199 u32 fw_version; 1208 u32 fw_version;
1200 const struct firmware *fw; 1209 const struct firmware *fw;