diff options
author | Matt Carlson <mcarlson@broadcom.com> | 2009-09-01 15:08:58 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-09-02 09:43:42 +0200 |
commit | 89aeb3bceaa1a02651206a76a7b9dcb8f3884702 (patch) | |
tree | ebdd17083599e5af4fa96f86668b654ace211bf3 /drivers/net/tg3.c | |
parent | tg3: Add tx and rx ring resource tracking (diff) | |
download | linux-89aeb3bceaa1a02651206a76a7b9dcb8f3884702.tar.xz linux-89aeb3bceaa1a02651206a76a7b9dcb8f3884702.zip |
tg3: Update intmbox and coal_now for msix
This patch fixes up two spots that need attention now that msix support
has been added.
Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
Reviewed-by: Benjamin Li <benli@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/tg3.c')
-rw-r--r-- | drivers/net/tg3.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 58a8986f3e0a..53896541f7d2 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c @@ -614,25 +614,33 @@ static void tg3_ape_unlock(struct tg3 *tp, int locknum) static void tg3_disable_ints(struct tg3 *tp) { + int i; + tw32(TG3PCI_MISC_HOST_CTRL, (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT)); - tw32_mailbox_f(tp->napi[0].int_mbox, 0x00000001); + for (i = 0; i < tp->irq_max; i++) + tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001); } static void tg3_enable_ints(struct tg3 *tp) { - u32 coal_now; - struct tg3_napi *tnapi = &tp->napi[0]; + int i; + u32 coal_now = 0; + tp->irq_sync = 0; wmb(); tw32(TG3PCI_MISC_HOST_CTRL, (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT)); - tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); - if (tp->tg3_flags2 & TG3_FLG2_1SHOT_MSI) + + for (i = 0; i < tp->irq_cnt; i++) { + struct tg3_napi *tnapi = &tp->napi[i]; tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); + if (tp->tg3_flags2 & TG3_FLG2_1SHOT_MSI) + tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); - coal_now = tnapi->coal_now; + coal_now |= tnapi->coal_now; + } /* Force an initial interrupt */ if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) && |