diff options
author | Ron Mercer <ron.mercer@qlogic.com> | 2010-01-15 08:31:27 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-01-16 04:01:51 -0500 |
commit | b87babeb40aaf879d20268792390ce831805a557 (patch) | |
tree | 24bccd7db89e8edbc919d884face6e0a5702c9eb /drivers | |
parent | d86458471aadffe93b741024b5a879ea5dc8df35 (diff) |
qlge: Add data for firmware dump.
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/qlge/qlge.h | 403 |
1 files changed, 398 insertions, 5 deletions
diff --git a/drivers/net/qlge/qlge.h b/drivers/net/qlge/qlge.h index ee0e2bd4842f..a265325abb15 100644 --- a/drivers/net/qlge/qlge.h +++ b/drivers/net/qlge/qlge.h | |||
@@ -75,15 +75,43 @@ | |||
75 | #define TX_DESC_PER_OAL 0 | 75 | #define TX_DESC_PER_OAL 0 |
76 | #endif | 76 | #endif |
77 | 77 | ||
78 | /* Word shifting for converting 64-bit | ||
79 | * address to a series of 16-bit words. | ||
80 | * This is used for some MPI firmware | ||
81 | * mailbox commands. | ||
82 | */ | ||
83 | #define LSW(x) ((u16)(x)) | ||
84 | #define MSW(x) ((u16)((u32)(x) >> 16)) | ||
85 | #define LSD(x) ((u32)((u64)(x))) | ||
86 | #define MSD(x) ((u32)((((u64)(x)) >> 32))) | ||
87 | |||
78 | /* MPI test register definitions. This register | 88 | /* MPI test register definitions. This register |
79 | * is used for determining alternate NIC function's | 89 | * is used for determining alternate NIC function's |
80 | * PCI->func number. | 90 | * PCI->func number. |
81 | */ | 91 | */ |
82 | enum { | 92 | enum { |
83 | MPI_TEST_FUNC_PORT_CFG = 0x1002, | 93 | MPI_TEST_FUNC_PORT_CFG = 0x1002, |
94 | MPI_TEST_FUNC_PRB_CTL = 0x100e, | ||
95 | MPI_TEST_FUNC_PRB_EN = 0x18a20000, | ||
96 | MPI_TEST_FUNC_RST_STS = 0x100a, | ||
97 | MPI_TEST_FUNC_RST_FRC = 0x00000003, | ||
98 | MPI_TEST_NIC_FUNC_MASK = 0x00000007, | ||
99 | MPI_TEST_NIC1_FUNCTION_ENABLE = (1 << 0), | ||
100 | MPI_TEST_NIC1_FUNCTION_MASK = 0x0000000e, | ||
84 | MPI_TEST_NIC1_FUNC_SHIFT = 1, | 101 | MPI_TEST_NIC1_FUNC_SHIFT = 1, |
102 | MPI_TEST_NIC2_FUNCTION_ENABLE = (1 << 4), | ||
103 | MPI_TEST_NIC2_FUNCTION_MASK = 0x000000e0, | ||
85 | MPI_TEST_NIC2_FUNC_SHIFT = 5, | 104 | MPI_TEST_NIC2_FUNC_SHIFT = 5, |
86 | MPI_TEST_NIC_FUNC_MASK = 0x00000007, | 105 | MPI_TEST_FC1_FUNCTION_ENABLE = (1 << 8), |
106 | MPI_TEST_FC1_FUNCTION_MASK = 0x00000e00, | ||
107 | MPI_TEST_FC1_FUNCTION_SHIFT = 9, | ||
108 | MPI_TEST_FC2_FUNCTION_ENABLE = (1 << 12), | ||
109 | MPI_TEST_FC2_FUNCTION_MASK = 0x0000e000, | ||
110 | MPI_TEST_FC2_FUNCTION_SHIFT = 13, | ||
111 | |||
112 | MPI_NIC_READ = 0x00000000, | ||
113 | MPI_NIC_REG_BLOCK = 0x00020000, | ||
114 | MPI_NIC_FUNCTION_SHIFT = 6, | ||
87 | }; | 115 | }; |
88 | 116 | ||
89 | /* | 117 | /* |
@@ -464,7 +492,7 @@ enum { | |||
464 | MDIO_PORT = 0x00000440, | 492 | MDIO_PORT = 0x00000440, |
465 | MDIO_STATUS = 0x00000450, | 493 | MDIO_STATUS = 0x00000450, |
466 | 494 | ||
467 | /* XGMAC AUX statistics registers */ | 495 | XGMAC_REGISTER_END = 0x00000740, |
468 | }; | 496 | }; |
469 | 497 | ||
470 | /* | 498 | /* |
@@ -505,6 +533,7 @@ enum { | |||
505 | enum { | 533 | enum { |
506 | MAC_ADDR_IDX_SHIFT = 4, | 534 | MAC_ADDR_IDX_SHIFT = 4, |
507 | MAC_ADDR_TYPE_SHIFT = 16, | 535 | MAC_ADDR_TYPE_SHIFT = 16, |
536 | MAC_ADDR_TYPE_COUNT = 10, | ||
508 | MAC_ADDR_TYPE_MASK = 0x000f0000, | 537 | MAC_ADDR_TYPE_MASK = 0x000f0000, |
509 | MAC_ADDR_TYPE_CAM_MAC = 0x00000000, | 538 | MAC_ADDR_TYPE_CAM_MAC = 0x00000000, |
510 | MAC_ADDR_TYPE_MULTI_MAC = 0x00010000, | 539 | MAC_ADDR_TYPE_MULTI_MAC = 0x00010000, |
@@ -522,6 +551,30 @@ enum { | |||
522 | MAC_ADDR_MR = (1 << 30), | 551 | MAC_ADDR_MR = (1 << 30), |
523 | MAC_ADDR_MW = (1 << 31), | 552 | MAC_ADDR_MW = (1 << 31), |
524 | MAX_MULTICAST_ENTRIES = 32, | 553 | MAX_MULTICAST_ENTRIES = 32, |
554 | |||
555 | /* Entry count and words per entry | ||
556 | * for each address type in the filter. | ||
557 | */ | ||
558 | MAC_ADDR_MAX_CAM_ENTRIES = 512, | ||
559 | MAC_ADDR_MAX_CAM_WCOUNT = 3, | ||
560 | MAC_ADDR_MAX_MULTICAST_ENTRIES = 32, | ||
561 | MAC_ADDR_MAX_MULTICAST_WCOUNT = 2, | ||
562 | MAC_ADDR_MAX_VLAN_ENTRIES = 4096, | ||
563 | MAC_ADDR_MAX_VLAN_WCOUNT = 1, | ||
564 | MAC_ADDR_MAX_MCAST_FLTR_ENTRIES = 4096, | ||
565 | MAC_ADDR_MAX_MCAST_FLTR_WCOUNT = 1, | ||
566 | MAC_ADDR_MAX_FC_MAC_ENTRIES = 4, | ||
567 | MAC_ADDR_MAX_FC_MAC_WCOUNT = 2, | ||
568 | MAC_ADDR_MAX_MGMT_MAC_ENTRIES = 8, | ||
569 | MAC_ADDR_MAX_MGMT_MAC_WCOUNT = 2, | ||
570 | MAC_ADDR_MAX_MGMT_VLAN_ENTRIES = 16, | ||
571 | MAC_ADDR_MAX_MGMT_VLAN_WCOUNT = 1, | ||
572 | MAC_ADDR_MAX_MGMT_V4_ENTRIES = 4, | ||
573 | MAC_ADDR_MAX_MGMT_V4_WCOUNT = 1, | ||
574 | MAC_ADDR_MAX_MGMT_V6_ENTRIES = 4, | ||
575 | MAC_ADDR_MAX_MGMT_V6_WCOUNT = 4, | ||
576 | MAC_ADDR_MAX_MGMT_TU_DP_ENTRIES = 4, | ||
577 | MAC_ADDR_MAX_MGMT_TU_DP_WCOUNT = 1, | ||
525 | }; | 578 | }; |
526 | 579 | ||
527 | /* | 580 | /* |
@@ -592,6 +645,7 @@ enum { | |||
592 | enum { | 645 | enum { |
593 | RT_IDX_IDX_SHIFT = 8, | 646 | RT_IDX_IDX_SHIFT = 8, |
594 | RT_IDX_TYPE_MASK = 0x000f0000, | 647 | RT_IDX_TYPE_MASK = 0x000f0000, |
648 | RT_IDX_TYPE_SHIFT = 16, | ||
595 | RT_IDX_TYPE_RT = 0x00000000, | 649 | RT_IDX_TYPE_RT = 0x00000000, |
596 | RT_IDX_TYPE_RT_INV = 0x00010000, | 650 | RT_IDX_TYPE_RT_INV = 0x00010000, |
597 | RT_IDX_TYPE_NICQ = 0x00020000, | 651 | RT_IDX_TYPE_NICQ = 0x00020000, |
@@ -660,7 +714,89 @@ enum { | |||
660 | RT_IDX_UNUSED013 = 13, | 714 | RT_IDX_UNUSED013 = 13, |
661 | RT_IDX_UNUSED014 = 14, | 715 | RT_IDX_UNUSED014 = 14, |
662 | RT_IDX_PROMISCUOUS_SLOT = 15, | 716 | RT_IDX_PROMISCUOUS_SLOT = 15, |
663 | RT_IDX_MAX_SLOTS = 16, | 717 | RT_IDX_MAX_RT_SLOTS = 8, |
718 | RT_IDX_MAX_NIC_SLOTS = 16, | ||
719 | }; | ||
720 | |||
721 | /* | ||
722 | * Serdes Address Register (XG_SERDES_ADDR) bit definitions. | ||
723 | */ | ||
724 | enum { | ||
725 | XG_SERDES_ADDR_RDY = (1 << 31), | ||
726 | XG_SERDES_ADDR_R = (1 << 30), | ||
727 | |||
728 | XG_SERDES_ADDR_STS = 0x00001E06, | ||
729 | XG_SERDES_ADDR_XFI1_PWR_UP = 0x00000005, | ||
730 | XG_SERDES_ADDR_XFI2_PWR_UP = 0x0000000a, | ||
731 | XG_SERDES_ADDR_XAUI_PWR_DOWN = 0x00000001, | ||
732 | |||
733 | /* Serdes coredump definitions. */ | ||
734 | XG_SERDES_XAUI_AN_START = 0x00000000, | ||
735 | XG_SERDES_XAUI_AN_END = 0x00000034, | ||
736 | XG_SERDES_XAUI_HSS_PCS_START = 0x00000800, | ||
737 | XG_SERDES_XAUI_HSS_PCS_END = 0x0000880, | ||
738 | XG_SERDES_XFI_AN_START = 0x00001000, | ||
739 | XG_SERDES_XFI_AN_END = 0x00001034, | ||
740 | XG_SERDES_XFI_TRAIN_START = 0x10001050, | ||
741 | XG_SERDES_XFI_TRAIN_END = 0x1000107C, | ||
742 | XG_SERDES_XFI_HSS_PCS_START = 0x00001800, | ||
743 | XG_SERDES_XFI_HSS_PCS_END = 0x00001838, | ||
744 | XG_SERDES_XFI_HSS_TX_START = 0x00001c00, | ||
745 | XG_SERDES_XFI_HSS_TX_END = 0x00001c1f, | ||
746 | XG_SERDES_XFI_HSS_RX_START = 0x00001c40, | ||
747 | XG_SERDES_XFI_HSS_RX_END = 0x00001c5f, | ||
748 | XG_SERDES_XFI_HSS_PLL_START = 0x00001e00, | ||
749 | XG_SERDES_XFI_HSS_PLL_END = 0x00001e1f, | ||
750 | }; | ||
751 | |||
752 | /* | ||
753 | * NIC Probe Mux Address Register (PRB_MX_ADDR) bit definitions. | ||
754 | */ | ||
755 | enum { | ||
756 | PRB_MX_ADDR_ARE = (1 << 16), | ||
757 | PRB_MX_ADDR_UP = (1 << 15), | ||
758 | PRB_MX_ADDR_SWP = (1 << 14), | ||
759 | |||
760 | /* Module select values. */ | ||
761 | PRB_MX_ADDR_MAX_MODS = 21, | ||
762 | PRB_MX_ADDR_MOD_SEL_SHIFT = 9, | ||
763 | PRB_MX_ADDR_MOD_SEL_TBD = 0, | ||
764 | PRB_MX_ADDR_MOD_SEL_IDE1 = 1, | ||
765 | PRB_MX_ADDR_MOD_SEL_IDE2 = 2, | ||
766 | PRB_MX_ADDR_MOD_SEL_FRB = 3, | ||
767 | PRB_MX_ADDR_MOD_SEL_ODE1 = 4, | ||
768 | PRB_MX_ADDR_MOD_SEL_ODE2 = 5, | ||
769 | PRB_MX_ADDR_MOD_SEL_DA1 = 6, | ||
770 | PRB_MX_ADDR_MOD_SEL_DA2 = 7, | ||
771 | PRB_MX_ADDR_MOD_SEL_IMP1 = 8, | ||
772 | PRB_MX_ADDR_MOD_SEL_IMP2 = 9, | ||
773 | PRB_MX_ADDR_MOD_SEL_OMP1 = 10, | ||
774 | PRB_MX_ADDR_MOD_SEL_OMP2 = 11, | ||
775 | PRB_MX_ADDR_MOD_SEL_ORS1 = 12, | ||
776 | PRB_MX_ADDR_MOD_SEL_ORS2 = 13, | ||
777 | PRB_MX_ADDR_MOD_SEL_REG = 14, | ||
778 | PRB_MX_ADDR_MOD_SEL_MAC1 = 16, | ||
779 | PRB_MX_ADDR_MOD_SEL_MAC2 = 17, | ||
780 | PRB_MX_ADDR_MOD_SEL_VQM1 = 18, | ||
781 | PRB_MX_ADDR_MOD_SEL_VQM2 = 19, | ||
782 | PRB_MX_ADDR_MOD_SEL_MOP = 20, | ||
783 | /* Bit fields indicating which modules | ||
784 | * are valid for each clock domain. | ||
785 | */ | ||
786 | PRB_MX_ADDR_VALID_SYS_MOD = 0x000f7ff7, | ||
787 | PRB_MX_ADDR_VALID_PCI_MOD = 0x000040c1, | ||
788 | PRB_MX_ADDR_VALID_XGM_MOD = 0x00037309, | ||
789 | PRB_MX_ADDR_VALID_FC_MOD = 0x00003001, | ||
790 | PRB_MX_ADDR_VALID_TOTAL = 34, | ||
791 | |||
792 | /* Clock domain values. */ | ||
793 | PRB_MX_ADDR_CLOCK_SHIFT = 6, | ||
794 | PRB_MX_ADDR_SYS_CLOCK = 0, | ||
795 | PRB_MX_ADDR_PCI_CLOCK = 2, | ||
796 | PRB_MX_ADDR_FC_CLOCK = 5, | ||
797 | PRB_MX_ADDR_XGM_CLOCK = 6, | ||
798 | |||
799 | PRB_MX_ADDR_MAX_MUX = 64, | ||
664 | }; | 800 | }; |
665 | 801 | ||
666 | /* | 802 | /* |
@@ -1432,7 +1568,7 @@ struct nic_stats { | |||
1432 | u64 rx_nic_fifo_drop; | 1568 | u64 rx_nic_fifo_drop; |
1433 | }; | 1569 | }; |
1434 | 1570 | ||
1435 | /* Address/Length pairs for the coredump. */ | 1571 | /* Firmware coredump internal register address/length pairs. */ |
1436 | enum { | 1572 | enum { |
1437 | MPI_CORE_REGS_ADDR = 0x00030000, | 1573 | MPI_CORE_REGS_ADDR = 0x00030000, |
1438 | MPI_CORE_REGS_CNT = 127, | 1574 | MPI_CORE_REGS_CNT = 127, |
@@ -1487,7 +1623,7 @@ struct mpi_coredump_segment_header { | |||
1487 | u8 description[16]; | 1623 | u8 description[16]; |
1488 | }; | 1624 | }; |
1489 | 1625 | ||
1490 | /* Reg dump segment numbers. */ | 1626 | /* Firmware coredump header segment numbers. */ |
1491 | enum { | 1627 | enum { |
1492 | CORE_SEG_NUM = 1, | 1628 | CORE_SEG_NUM = 1, |
1493 | TEST_LOGIC_SEG_NUM = 2, | 1629 | TEST_LOGIC_SEG_NUM = 2, |
@@ -1538,6 +1674,67 @@ enum { | |||
1538 | 1674 | ||
1539 | }; | 1675 | }; |
1540 | 1676 | ||
1677 | /* There are 64 generic NIC registers. */ | ||
1678 | #define NIC_REGS_DUMP_WORD_COUNT 64 | ||
1679 | /* XGMAC word count. */ | ||
1680 | #define XGMAC_DUMP_WORD_COUNT (XGMAC_REGISTER_END / 4) | ||
1681 | /* Word counts for the SERDES blocks. */ | ||
1682 | #define XG_SERDES_XAUI_AN_COUNT 14 | ||
1683 | #define XG_SERDES_XAUI_HSS_PCS_COUNT 33 | ||
1684 | #define XG_SERDES_XFI_AN_COUNT 14 | ||
1685 | #define XG_SERDES_XFI_TRAIN_COUNT 12 | ||
1686 | #define XG_SERDES_XFI_HSS_PCS_COUNT 15 | ||
1687 | #define XG_SERDES_XFI_HSS_TX_COUNT 32 | ||
1688 | #define XG_SERDES_XFI_HSS_RX_COUNT 32 | ||
1689 | #define XG_SERDES_XFI_HSS_PLL_COUNT 32 | ||
1690 | |||
1691 | /* There are 2 CNA ETS and 8 NIC ETS registers. */ | ||
1692 | #define ETS_REGS_DUMP_WORD_COUNT 10 | ||
1693 | |||
1694 | /* Each probe mux entry stores the probe type plus 64 entries | ||
1695 | * that are each each 64-bits in length. There are a total of | ||
1696 | * 34 (PRB_MX_ADDR_VALID_TOTAL) valid probes. | ||
1697 | */ | ||
1698 | #define PRB_MX_ADDR_PRB_WORD_COUNT (1 + (PRB_MX_ADDR_MAX_MUX * 2)) | ||
1699 | #define PRB_MX_DUMP_TOT_COUNT (PRB_MX_ADDR_PRB_WORD_COUNT * \ | ||
1700 | PRB_MX_ADDR_VALID_TOTAL) | ||
1701 | /* Each routing entry consists of 4 32-bit words. | ||
1702 | * They are route type, index, index word, and result. | ||
1703 | * There are 2 route blocks with 8 entries each and | ||
1704 | * 2 NIC blocks with 16 entries each. | ||
1705 | * The totol entries is 48 with 4 words each. | ||
1706 | */ | ||
1707 | #define RT_IDX_DUMP_ENTRIES 48 | ||
1708 | #define RT_IDX_DUMP_WORDS_PER_ENTRY 4 | ||
1709 | #define RT_IDX_DUMP_TOT_WORDS (RT_IDX_DUMP_ENTRIES * \ | ||
1710 | RT_IDX_DUMP_WORDS_PER_ENTRY) | ||
1711 | /* There are 10 address blocks in filter, each with | ||
1712 | * different entry counts and different word-count-per-entry. | ||
1713 | */ | ||
1714 | #define MAC_ADDR_DUMP_ENTRIES \ | ||
1715 | ((MAC_ADDR_MAX_CAM_ENTRIES * MAC_ADDR_MAX_CAM_WCOUNT) + \ | ||
1716 | (MAC_ADDR_MAX_MULTICAST_ENTRIES * MAC_ADDR_MAX_MULTICAST_WCOUNT) + \ | ||
1717 | (MAC_ADDR_MAX_VLAN_ENTRIES * MAC_ADDR_MAX_VLAN_WCOUNT) + \ | ||
1718 | (MAC_ADDR_MAX_MCAST_FLTR_ENTRIES * MAC_ADDR_MAX_MCAST_FLTR_WCOUNT) + \ | ||
1719 | (MAC_ADDR_MAX_FC_MAC_ENTRIES * MAC_ADDR_MAX_FC_MAC_WCOUNT) + \ | ||
1720 | (MAC_ADDR_MAX_MGMT_MAC_ENTRIES * MAC_ADDR_MAX_MGMT_MAC_WCOUNT) + \ | ||
1721 | (MAC_ADDR_MAX_MGMT_VLAN_ENTRIES * MAC_ADDR_MAX_MGMT_VLAN_WCOUNT) + \ | ||
1722 | (MAC_ADDR_MAX_MGMT_V4_ENTRIES * MAC_ADDR_MAX_MGMT_V4_WCOUNT) + \ | ||
1723 | (MAC_ADDR_MAX_MGMT_V6_ENTRIES * MAC_ADDR_MAX_MGMT_V6_WCOUNT) + \ | ||
1724 | (MAC_ADDR_MAX_MGMT_TU_DP_ENTRIES * MAC_ADDR_MAX_MGMT_TU_DP_WCOUNT)) | ||
1725 | #define MAC_ADDR_DUMP_WORDS_PER_ENTRY 2 | ||
1726 | #define MAC_ADDR_DUMP_TOT_WORDS (MAC_ADDR_DUMP_ENTRIES * \ | ||
1727 | MAC_ADDR_DUMP_WORDS_PER_ENTRY) | ||
1728 | /* Maximum of 4 functions whose semaphore registeres are | ||
1729 | * in the coredump. | ||
1730 | */ | ||
1731 | #define MAX_SEMAPHORE_FUNCTIONS 4 | ||
1732 | /* Defines for access the MPI shadow registers. */ | ||
1733 | #define RISC_124 0x0003007c | ||
1734 | #define RISC_127 0x0003007f | ||
1735 | #define SHADOW_OFFSET 0xb0000000 | ||
1736 | #define SHADOW_REG_SHIFT 20 | ||
1737 | |||
1541 | struct ql_nic_misc { | 1738 | struct ql_nic_misc { |
1542 | u32 rx_ring_count; | 1739 | u32 rx_ring_count; |
1543 | u32 tx_ring_count; | 1740 | u32 tx_ring_count; |
@@ -1579,6 +1776,199 @@ struct ql_reg_dump { | |||
1579 | u32 ets[8+2]; | 1776 | u32 ets[8+2]; |
1580 | }; | 1777 | }; |
1581 | 1778 | ||
1779 | struct ql_mpi_coredump { | ||
1780 | /* segment 0 */ | ||
1781 | struct mpi_coredump_global_header mpi_global_header; | ||
1782 | |||
1783 | /* segment 1 */ | ||
1784 | struct mpi_coredump_segment_header core_regs_seg_hdr; | ||
1785 | u32 mpi_core_regs[MPI_CORE_REGS_CNT]; | ||
1786 | u32 mpi_core_sh_regs[MPI_CORE_SH_REGS_CNT]; | ||
1787 | |||
1788 | /* segment 2 */ | ||
1789 | struct mpi_coredump_segment_header test_logic_regs_seg_hdr; | ||
1790 | u32 test_logic_regs[TEST_REGS_CNT]; | ||
1791 | |||
1792 | /* segment 3 */ | ||
1793 | struct mpi_coredump_segment_header rmii_regs_seg_hdr; | ||
1794 | u32 rmii_regs[RMII_REGS_CNT]; | ||
1795 | |||
1796 | /* segment 4 */ | ||
1797 | struct mpi_coredump_segment_header fcmac1_regs_seg_hdr; | ||
1798 | u32 fcmac1_regs[FCMAC_REGS_CNT]; | ||
1799 | |||
1800 | /* segment 5 */ | ||
1801 | struct mpi_coredump_segment_header fcmac2_regs_seg_hdr; | ||
1802 | u32 fcmac2_regs[FCMAC_REGS_CNT]; | ||
1803 | |||
1804 | /* segment 6 */ | ||
1805 | struct mpi_coredump_segment_header fc1_mbx_regs_seg_hdr; | ||
1806 | u32 fc1_mbx_regs[FC_MBX_REGS_CNT]; | ||
1807 | |||
1808 | /* segment 7 */ | ||
1809 | struct mpi_coredump_segment_header ide_regs_seg_hdr; | ||
1810 | u32 ide_regs[IDE_REGS_CNT]; | ||
1811 | |||
1812 | /* segment 8 */ | ||
1813 | struct mpi_coredump_segment_header nic1_mbx_regs_seg_hdr; | ||
1814 | u32 nic1_mbx_regs[NIC_MBX_REGS_CNT]; | ||
1815 | |||
1816 | /* segment 9 */ | ||
1817 | struct mpi_coredump_segment_header smbus_regs_seg_hdr; | ||
1818 | u32 smbus_regs[SMBUS_REGS_CNT]; | ||
1819 | |||
1820 | /* segment 10 */ | ||
1821 | struct mpi_coredump_segment_header fc2_mbx_regs_seg_hdr; | ||
1822 | u32 fc2_mbx_regs[FC_MBX_REGS_CNT]; | ||
1823 | |||
1824 | /* segment 11 */ | ||
1825 | struct mpi_coredump_segment_header nic2_mbx_regs_seg_hdr; | ||
1826 | u32 nic2_mbx_regs[NIC_MBX_REGS_CNT]; | ||
1827 | |||
1828 | /* segment 12 */ | ||
1829 | struct mpi_coredump_segment_header i2c_regs_seg_hdr; | ||
1830 | u32 i2c_regs[I2C_REGS_CNT]; | ||
1831 | /* segment 13 */ | ||
1832 | struct mpi_coredump_segment_header memc_regs_seg_hdr; | ||
1833 | u32 memc_regs[MEMC_REGS_CNT]; | ||
1834 | |||
1835 | /* segment 14 */ | ||
1836 | struct mpi_coredump_segment_header pbus_regs_seg_hdr; | ||
1837 | u32 pbus_regs[PBUS_REGS_CNT]; | ||
1838 | |||
1839 | /* segment 15 */ | ||
1840 | struct mpi_coredump_segment_header mde_regs_seg_hdr; | ||
1841 | u32 mde_regs[MDE_REGS_CNT]; | ||
1842 | |||
1843 | /* segment 16 */ | ||
1844 | struct mpi_coredump_segment_header nic_regs_seg_hdr; | ||
1845 | u32 nic_regs[NIC_REGS_DUMP_WORD_COUNT]; | ||
1846 | |||
1847 | /* segment 17 */ | ||
1848 | struct mpi_coredump_segment_header nic2_regs_seg_hdr; | ||
1849 | u32 nic2_regs[NIC_REGS_DUMP_WORD_COUNT]; | ||
1850 | |||
1851 | /* segment 18 */ | ||
1852 | struct mpi_coredump_segment_header xgmac1_seg_hdr; | ||
1853 | u32 xgmac1[XGMAC_DUMP_WORD_COUNT]; | ||
1854 | |||
1855 | /* segment 19 */ | ||
1856 | struct mpi_coredump_segment_header xgmac2_seg_hdr; | ||
1857 | u32 xgmac2[XGMAC_DUMP_WORD_COUNT]; | ||
1858 | |||
1859 | /* segment 20 */ | ||
1860 | struct mpi_coredump_segment_header code_ram_seg_hdr; | ||
1861 | u32 code_ram[CODE_RAM_CNT]; | ||
1862 | |||
1863 | /* segment 21 */ | ||
1864 | struct mpi_coredump_segment_header memc_ram_seg_hdr; | ||
1865 | u32 memc_ram[MEMC_RAM_CNT]; | ||
1866 | |||
1867 | /* segment 22 */ | ||
1868 | struct mpi_coredump_segment_header xaui_an_hdr; | ||
1869 | u32 serdes_xaui_an[XG_SERDES_XAUI_AN_COUNT]; | ||
1870 | |||
1871 | /* segment 23 */ | ||
1872 | struct mpi_coredump_segment_header xaui_hss_pcs_hdr; | ||
1873 | u32 serdes_xaui_hss_pcs[XG_SERDES_XAUI_HSS_PCS_COUNT]; | ||
1874 | |||
1875 | /* segment 24 */ | ||
1876 | struct mpi_coredump_segment_header xfi_an_hdr; | ||
1877 | u32 serdes_xfi_an[XG_SERDES_XFI_AN_COUNT]; | ||
1878 | |||
1879 | /* segment 25 */ | ||
1880 | struct mpi_coredump_segment_header xfi_train_hdr; | ||
1881 | u32 serdes_xfi_train[XG_SERDES_XFI_TRAIN_COUNT]; | ||
1882 | |||
1883 | /* segment 26 */ | ||
1884 | struct mpi_coredump_segment_header xfi_hss_pcs_hdr; | ||
1885 | u32 serdes_xfi_hss_pcs[XG_SERDES_XFI_HSS_PCS_COUNT]; | ||
1886 | |||
1887 | /* segment 27 */ | ||
1888 | struct mpi_coredump_segment_header xfi_hss_tx_hdr; | ||
1889 | u32 serdes_xfi_hss_tx[XG_SERDES_XFI_HSS_TX_COUNT]; | ||
1890 | |||
1891 | /* segment 28 */ | ||
1892 | struct mpi_coredump_segment_header xfi_hss_rx_hdr; | ||
1893 | u32 serdes_xfi_hss_rx[XG_SERDES_XFI_HSS_RX_COUNT]; | ||
1894 | |||
1895 | /* segment 29 */ | ||
1896 | struct mpi_coredump_segment_header xfi_hss_pll_hdr; | ||
1897 | u32 serdes_xfi_hss_pll[XG_SERDES_XFI_HSS_PLL_COUNT]; | ||
1898 | |||
1899 | /* segment 30 */ | ||
1900 | struct mpi_coredump_segment_header misc_nic_seg_hdr; | ||
1901 | struct ql_nic_misc misc_nic_info; | ||
1902 | |||
1903 | /* segment 31 */ | ||
1904 | /* one interrupt state for each CQ */ | ||
1905 | struct mpi_coredump_segment_header intr_states_seg_hdr; | ||
1906 | u32 intr_states[MAX_RX_RINGS]; | ||
1907 | |||
1908 | /* segment 32 */ | ||
1909 | /* 3 cam words each for 16 unicast, | ||
1910 | * 2 cam words for each of 32 multicast. | ||
1911 | */ | ||
1912 | struct mpi_coredump_segment_header cam_entries_seg_hdr; | ||
1913 | u32 cam_entries[(16 * 3) + (32 * 3)]; | ||
1914 | |||
1915 | /* segment 33 */ | ||
1916 | struct mpi_coredump_segment_header nic_routing_words_seg_hdr; | ||
1917 | u32 nic_routing_words[16]; | ||
1918 | /* segment 34 */ | ||
1919 | struct mpi_coredump_segment_header ets_seg_hdr; | ||
1920 | u32 ets[ETS_REGS_DUMP_WORD_COUNT]; | ||
1921 | |||
1922 | /* segment 35 */ | ||
1923 | struct mpi_coredump_segment_header probe_dump_seg_hdr; | ||
1924 | u32 probe_dump[PRB_MX_DUMP_TOT_COUNT]; | ||
1925 | |||
1926 | /* segment 36 */ | ||
1927 | struct mpi_coredump_segment_header routing_reg_seg_hdr; | ||
1928 | u32 routing_regs[RT_IDX_DUMP_TOT_WORDS]; | ||
1929 | |||
1930 | /* segment 37 */ | ||
1931 | struct mpi_coredump_segment_header mac_prot_reg_seg_hdr; | ||
1932 | u32 mac_prot_regs[MAC_ADDR_DUMP_TOT_WORDS]; | ||
1933 | |||
1934 | /* segment 38 */ | ||
1935 | struct mpi_coredump_segment_header xaui2_an_hdr; | ||
1936 | u32 serdes2_xaui_an[XG_SERDES_XAUI_AN_COUNT]; | ||
1937 | |||
1938 | /* segment 39 */ | ||
1939 | struct mpi_coredump_segment_header xaui2_hss_pcs_hdr; | ||
1940 | u32 serdes2_xaui_hss_pcs[XG_SERDES_XAUI_HSS_PCS_COUNT]; | ||
1941 | |||
1942 | /* segment 40 */ | ||
1943 | struct mpi_coredump_segment_header xfi2_an_hdr; | ||
1944 | u32 serdes2_xfi_an[XG_SERDES_XFI_AN_COUNT]; | ||
1945 | |||
1946 | /* segment 41 */ | ||
1947 | struct mpi_coredump_segment_header xfi2_train_hdr; | ||
1948 | u32 serdes2_xfi_train[XG_SERDES_XFI_TRAIN_COUNT]; | ||
1949 | |||
1950 | /* segment 42 */ | ||
1951 | struct mpi_coredump_segment_header xfi2_hss_pcs_hdr; | ||
1952 | u32 serdes2_xfi_hss_pcs[XG_SERDES_XFI_HSS_PCS_COUNT]; | ||
1953 | |||
1954 | /* segment 43 */ | ||
1955 | struct mpi_coredump_segment_header xfi2_hss_tx_hdr; | ||
1956 | u32 serdes2_xfi_hss_tx[XG_SERDES_XFI_HSS_TX_COUNT]; | ||
1957 | |||
1958 | /* segment 44 */ | ||
1959 | struct mpi_coredump_segment_header xfi2_hss_rx_hdr; | ||
1960 | u32 serdes2_xfi_hss_rx[XG_SERDES_XFI_HSS_RX_COUNT]; | ||
1961 | |||
1962 | /* segment 45 */ | ||
1963 | struct mpi_coredump_segment_header xfi2_hss_pll_hdr; | ||
1964 | u32 serdes2_xfi_hss_pll[XG_SERDES_XFI_HSS_PLL_COUNT]; | ||
1965 | |||
1966 | /* segment 50 */ | ||
1967 | /* semaphore register for all 5 functions */ | ||
1968 | struct mpi_coredump_segment_header sem_regs_seg_hdr; | ||
1969 | u32 sem_regs[MAX_SEMAPHORE_FUNCTIONS]; | ||
1970 | }; | ||
1971 | |||
1582 | /* | 1972 | /* |
1583 | * intr_context structure is used during initialization | 1973 | * intr_context structure is used during initialization |
1584 | * to hook the interrupts. It is also used in a single | 1974 | * to hook the interrupts. It is also used in a single |
@@ -1735,6 +2125,8 @@ struct ql_adapter { | |||
1735 | u32 port_link_up; | 2125 | u32 port_link_up; |
1736 | u32 port_init; | 2126 | u32 port_init; |
1737 | u32 link_status; | 2127 | u32 link_status; |
2128 | struct ql_mpi_coredump *mpi_coredump; | ||
2129 | u32 core_is_dumped; | ||
1738 | u32 link_config; | 2130 | u32 link_config; |
1739 | u32 led_config; | 2131 | u32 led_config; |
1740 | u32 max_frame_size; | 2132 | u32 max_frame_size; |
@@ -1747,6 +2139,7 @@ struct ql_adapter { | |||
1747 | struct delayed_work mpi_work; | 2139 | struct delayed_work mpi_work; |
1748 | struct delayed_work mpi_port_cfg_work; | 2140 | struct delayed_work mpi_port_cfg_work; |
1749 | struct delayed_work mpi_idc_work; | 2141 | struct delayed_work mpi_idc_work; |
2142 | struct delayed_work mpi_core_to_log; | ||
1750 | struct completion ide_completion; | 2143 | struct completion ide_completion; |
1751 | struct nic_operations *nic_ops; | 2144 | struct nic_operations *nic_ops; |
1752 | u16 device_id; | 2145 | u16 device_id; |