diff options
author | Ronghua Zang <ronghua@vmware.com> | 2010-07-16 01:18:47 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-07-16 01:18:47 -0400 |
commit | 6929fe8a37365148228206eea8577b3524afc463 (patch) | |
tree | a43dcfd1291840f34a549b9f5fc2f0cb6bad7e4b /drivers/net | |
parent | ca802447c0b9dc12a8aa6552c9c7b3c7af31f492 (diff) |
net-next: vmxnet3 fixes [2/5] Interrupt control bitmap
A new bit map 'intrCtrl' is introduced in the DriverShared area. The
driver should update VMXNET3_IC_DISABLE_ALL bit before writing IMR.
Signed-off-by: Ronghua Zang <ronghua@vmware.com>
Signed-off-by: Shreyas Bhatewara <sbhatewara@vmware.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/vmxnet3/vmxnet3_defs.h | 6 | ||||
-rw-r--r-- | drivers/net/vmxnet3/vmxnet3_drv.c | 5 |
2 files changed, 10 insertions, 1 deletions
diff --git a/drivers/net/vmxnet3/vmxnet3_defs.h b/drivers/net/vmxnet3/vmxnet3_defs.h index b4889e6c4a57..ca7727b940ad 100644 --- a/drivers/net/vmxnet3/vmxnet3_defs.h +++ b/drivers/net/vmxnet3/vmxnet3_defs.h | |||
@@ -464,6 +464,9 @@ enum vmxnet3_intr_type { | |||
464 | /* addition 1 for events */ | 464 | /* addition 1 for events */ |
465 | #define VMXNET3_MAX_INTRS 25 | 465 | #define VMXNET3_MAX_INTRS 25 |
466 | 466 | ||
467 | /* value of intrCtrl */ | ||
468 | #define VMXNET3_IC_DISABLE_ALL 0x1 /* bit 0 */ | ||
469 | |||
467 | 470 | ||
468 | struct Vmxnet3_IntrConf { | 471 | struct Vmxnet3_IntrConf { |
469 | bool autoMask; | 472 | bool autoMask; |
@@ -471,7 +474,8 @@ struct Vmxnet3_IntrConf { | |||
471 | u8 eventIntrIdx; | 474 | u8 eventIntrIdx; |
472 | u8 modLevels[VMXNET3_MAX_INTRS]; /* moderation level for | 475 | u8 modLevels[VMXNET3_MAX_INTRS]; /* moderation level for |
473 | * each intr */ | 476 | * each intr */ |
474 | __le32 reserved[3]; | 477 | __le32 intrCtrl; |
478 | __le32 reserved[2]; | ||
475 | }; | 479 | }; |
476 | 480 | ||
477 | /* one bit per VLAN ID, the size is in the units of u32 */ | 481 | /* one bit per VLAN ID, the size is in the units of u32 */ |
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c index 989b742551ac..0fbfc67e0f79 100644 --- a/drivers/net/vmxnet3/vmxnet3_drv.c +++ b/drivers/net/vmxnet3/vmxnet3_drv.c | |||
@@ -72,6 +72,8 @@ vmxnet3_enable_all_intrs(struct vmxnet3_adapter *adapter) | |||
72 | 72 | ||
73 | for (i = 0; i < adapter->intr.num_intrs; i++) | 73 | for (i = 0; i < adapter->intr.num_intrs; i++) |
74 | vmxnet3_enable_intr(adapter, i); | 74 | vmxnet3_enable_intr(adapter, i); |
75 | adapter->shared->devRead.intrConf.intrCtrl &= | ||
76 | cpu_to_le32(~VMXNET3_IC_DISABLE_ALL); | ||
75 | } | 77 | } |
76 | 78 | ||
77 | 79 | ||
@@ -80,6 +82,8 @@ vmxnet3_disable_all_intrs(struct vmxnet3_adapter *adapter) | |||
80 | { | 82 | { |
81 | int i; | 83 | int i; |
82 | 84 | ||
85 | adapter->shared->devRead.intrConf.intrCtrl |= | ||
86 | cpu_to_le32(VMXNET3_IC_DISABLE_ALL); | ||
83 | for (i = 0; i < adapter->intr.num_intrs; i++) | 87 | for (i = 0; i < adapter->intr.num_intrs; i++) |
84 | vmxnet3_disable_intr(adapter, i); | 88 | vmxnet3_disable_intr(adapter, i); |
85 | } | 89 | } |
@@ -1825,6 +1829,7 @@ vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter) | |||
1825 | devRead->intrConf.modLevels[i] = adapter->intr.mod_levels[i]; | 1829 | devRead->intrConf.modLevels[i] = adapter->intr.mod_levels[i]; |
1826 | 1830 | ||
1827 | devRead->intrConf.eventIntrIdx = adapter->intr.event_intr_idx; | 1831 | devRead->intrConf.eventIntrIdx = adapter->intr.event_intr_idx; |
1832 | devRead->intrConf.intrCtrl |= cpu_to_le32(VMXNET3_IC_DISABLE_ALL); | ||
1828 | 1833 | ||
1829 | /* rx filter settings */ | 1834 | /* rx filter settings */ |
1830 | devRead->rxFilterConf.rxMode = 0; | 1835 | devRead->rxFilterConf.rxMode = 0; |