diff options
author | Dhananjay Phadke <dhananjay@netxen.com> | 2009-09-05 13:43:08 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-09-07 04:53:06 -0400 |
commit | 6a581e93981e8838c85e407303186faf937830d3 (patch) | |
tree | 3e2f083971fc33d4a3e88e7cc37e346f775d7168 /drivers/net/netxen/netxen_nic.h | |
parent | db4cfd8a6149e778befb2ff6e6f91cdc6394cbe6 (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.h | 17 |
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 | |||
1104 | struct netxen_dummy_dma { | 1110 | struct 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; |