diff options
author | Michael Chan <mchan@broadcom.com> | 2007-12-20 22:59:30 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 17:57:37 -0500 |
commit | b4b360420dcbbffb15f5749fc78225f4113cc7e2 (patch) | |
tree | a7378249d52fd80ac2599c66f624abf5918318ed /drivers/net/bnx2.h | |
parent | a1f6019090f2c075b41624c32a825775f6865577 (diff) |
[BNX2]: Support multiple MSIX IRQs.
Change bnx2_napi struct into an array and add code to manage multiple
IRQs. MSIX hardware structures and new registers are also added.
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bnx2.h')
-rw-r--r-- | drivers/net/bnx2.h | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/drivers/net/bnx2.h b/drivers/net/bnx2.h index b75795b4f8cf..d71ceb6c176f 100644 --- a/drivers/net/bnx2.h +++ b/drivers/net/bnx2.h | |||
@@ -154,6 +154,33 @@ struct status_block { | |||
154 | #endif | 154 | #endif |
155 | }; | 155 | }; |
156 | 156 | ||
157 | /* | ||
158 | * status_block definition | ||
159 | */ | ||
160 | struct status_block_msix { | ||
161 | #if defined(__BIG_ENDIAN) | ||
162 | u16 status_tx_quick_consumer_index; | ||
163 | u16 status_rx_quick_consumer_index; | ||
164 | u16 status_completion_producer_index; | ||
165 | u16 status_cmd_consumer_index; | ||
166 | u32 status_unused; | ||
167 | u16 status_idx; | ||
168 | u8 status_unused2; | ||
169 | u8 status_blk_num; | ||
170 | #elif defined(__LITTLE_ENDIAN) | ||
171 | u16 status_rx_quick_consumer_index; | ||
172 | u16 status_tx_quick_consumer_index; | ||
173 | u16 status_cmd_consumer_index; | ||
174 | u16 status_completion_producer_index; | ||
175 | u32 status_unused; | ||
176 | u8 status_blk_num; | ||
177 | u8 status_unused2; | ||
178 | u16 status_idx; | ||
179 | #endif | ||
180 | }; | ||
181 | |||
182 | #define BNX2_SBLK_MSIX_ALIGN_SIZE 128 | ||
183 | |||
157 | 184 | ||
158 | /* | 185 | /* |
159 | * statistics_block definition | 186 | * statistics_block definition |
@@ -413,6 +440,7 @@ struct l2_fhdr { | |||
413 | #define BNX2_PCICFG_INT_ACK_CMD_USE_INT_HC_PARAM (1L<<17) | 440 | #define BNX2_PCICFG_INT_ACK_CMD_USE_INT_HC_PARAM (1L<<17) |
414 | #define BNX2_PCICFG_INT_ACK_CMD_MASK_INT (1L<<18) | 441 | #define BNX2_PCICFG_INT_ACK_CMD_MASK_INT (1L<<18) |
415 | #define BNX2_PCICFG_INT_ACK_CMD_INTERRUPT_NUM (0xfL<<24) | 442 | #define BNX2_PCICFG_INT_ACK_CMD_INTERRUPT_NUM (0xfL<<24) |
443 | #define BNX2_PCICFG_INT_ACK_CMD_INT_NUM_SHIFT 24 | ||
416 | 444 | ||
417 | #define BNX2_PCICFG_STATUS_BIT_SET_CMD 0x00000088 | 445 | #define BNX2_PCICFG_STATUS_BIT_SET_CMD 0x00000088 |
418 | #define BNX2_PCICFG_STATUS_BIT_CLEAR_CMD 0x0000008c | 446 | #define BNX2_PCICFG_STATUS_BIT_CLEAR_CMD 0x0000008c |
@@ -428,6 +456,9 @@ struct l2_fhdr { | |||
428 | #define BNX2_PCI_GRC_WINDOW_ADDR_VALUE (0x1ffL<<13) | 456 | #define BNX2_PCI_GRC_WINDOW_ADDR_VALUE (0x1ffL<<13) |
429 | #define BNX2_PCI_GRC_WINDOW_ADDR_SEP_WIN (1L<<31) | 457 | #define BNX2_PCI_GRC_WINDOW_ADDR_SEP_WIN (1L<<31) |
430 | 458 | ||
459 | #define BNX2_PCI_GRC_WINDOW2_BASE 0xc000 | ||
460 | #define BNX2_PCI_GRC_WINDOW3_BASE 0xe000 | ||
461 | |||
431 | #define BNX2_PCI_CONFIG_1 0x00000404 | 462 | #define BNX2_PCI_CONFIG_1 0x00000404 |
432 | #define BNX2_PCI_CONFIG_1_RESERVED0 (0xffL<<0) | 463 | #define BNX2_PCI_CONFIG_1_RESERVED0 (0xffL<<0) |
433 | #define BNX2_PCI_CONFIG_1_READ_BOUNDARY (0x7L<<8) | 464 | #define BNX2_PCI_CONFIG_1_READ_BOUNDARY (0x7L<<8) |
@@ -700,6 +731,8 @@ struct l2_fhdr { | |||
700 | #define BNX2_PCI_GRC_WINDOW3_ADDR 0x00000618 | 731 | #define BNX2_PCI_GRC_WINDOW3_ADDR 0x00000618 |
701 | #define BNX2_PCI_GRC_WINDOW3_ADDR_VALUE (0x1ffL<<13) | 732 | #define BNX2_PCI_GRC_WINDOW3_ADDR_VALUE (0x1ffL<<13) |
702 | 733 | ||
734 | #define BNX2_MSIX_TABLE_ADDR 0x318000 | ||
735 | #define BNX2_MSIX_PBA_ADDR 0x31c000 | ||
703 | 736 | ||
704 | /* | 737 | /* |
705 | * misc_reg definition | 738 | * misc_reg definition |
@@ -6500,6 +6533,7 @@ struct flash_spec { | |||
6500 | struct bnx2_irq { | 6533 | struct bnx2_irq { |
6501 | irq_handler_t handler; | 6534 | irq_handler_t handler; |
6502 | u16 vector; | 6535 | u16 vector; |
6536 | u8 requested; | ||
6503 | char name[16]; | 6537 | char name[16]; |
6504 | }; | 6538 | }; |
6505 | 6539 | ||
@@ -6535,13 +6569,15 @@ struct bnx2 { | |||
6535 | u32 flags; | 6569 | u32 flags; |
6536 | #define PCIX_FLAG 0x00000001 | 6570 | #define PCIX_FLAG 0x00000001 |
6537 | #define PCI_32BIT_FLAG 0x00000002 | 6571 | #define PCI_32BIT_FLAG 0x00000002 |
6538 | #define ONE_TDMA_FLAG 0x00000004 /* no longer used */ | 6572 | #define MSIX_CAP_FLAG 0x00000004 |
6539 | #define NO_WOL_FLAG 0x00000008 | 6573 | #define NO_WOL_FLAG 0x00000008 |
6540 | #define USING_MSI_FLAG 0x00000020 | 6574 | #define USING_MSI_FLAG 0x00000020 |
6541 | #define ASF_ENABLE_FLAG 0x00000040 | 6575 | #define ASF_ENABLE_FLAG 0x00000040 |
6542 | #define MSI_CAP_FLAG 0x00000080 | 6576 | #define MSI_CAP_FLAG 0x00000080 |
6543 | #define ONE_SHOT_MSI_FLAG 0x00000100 | 6577 | #define ONE_SHOT_MSI_FLAG 0x00000100 |
6544 | #define PCIE_FLAG 0x00000200 | 6578 | #define PCIE_FLAG 0x00000200 |
6579 | #define USING_MSIX_FLAG 0x00000400 | ||
6580 | #define USING_MSI_OR_MSIX_FLAG (USING_MSI_FLAG | USING_MSIX_FLAG) | ||
6545 | 6581 | ||
6546 | /* Put tx producer and consumer fields in separate cache lines. */ | 6582 | /* Put tx producer and consumer fields in separate cache lines. */ |
6547 | 6583 | ||
@@ -6550,7 +6586,7 @@ struct bnx2 { | |||
6550 | u32 tx_bidx_addr; | 6586 | u32 tx_bidx_addr; |
6551 | u32 tx_bseq_addr; | 6587 | u32 tx_bseq_addr; |
6552 | 6588 | ||
6553 | struct bnx2_napi bnx2_napi; | 6589 | struct bnx2_napi bnx2_napi[BNX2_MAX_MSIX_VEC]; |
6554 | 6590 | ||
6555 | #ifdef BCM_VLAN | 6591 | #ifdef BCM_VLAN |
6556 | struct vlan_group *vlgrp; | 6592 | struct vlan_group *vlgrp; |