16f45ec7bSml29623 /* 26f45ec7bSml29623 * CDDL HEADER START 36f45ec7bSml29623 * 46f45ec7bSml29623 * The contents of this file are subject to the terms of the 56f45ec7bSml29623 * Common Development and Distribution License (the "License"). 66f45ec7bSml29623 * You may not use this file except in compliance with the License. 76f45ec7bSml29623 * 86f45ec7bSml29623 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 96f45ec7bSml29623 * or http://www.opensolaris.org/os/licensing. 106f45ec7bSml29623 * See the License for the specific language governing permissions 116f45ec7bSml29623 * and limitations under the License. 126f45ec7bSml29623 * 136f45ec7bSml29623 * When distributing Covered Code, include this CDDL HEADER in each 146f45ec7bSml29623 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 156f45ec7bSml29623 * If applicable, add the following below this CDDL HEADER, with the 166f45ec7bSml29623 * fields enclosed by brackets "[]" replaced with your own identifying 176f45ec7bSml29623 * information: Portions Copyright [yyyy] [name of copyright owner] 186f45ec7bSml29623 * 196f45ec7bSml29623 * CDDL HEADER END 206f45ec7bSml29623 */ 216f45ec7bSml29623 /* 22*837c1ac4SStephen Hanson * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 236f45ec7bSml29623 * Use is subject to license terms. 246f45ec7bSml29623 */ 256f45ec7bSml29623 266f45ec7bSml29623 #include <sys/nxge/nxge_impl.h> 27678453a8Sspeer #include <sys/nxge/nxge_hio.h> 286f45ec7bSml29623 #include <sys/ddifm.h> 296f45ec7bSml29623 #include <sys/fm/protocol.h> 306f45ec7bSml29623 #include <sys/fm/util.h> 316f45ec7bSml29623 #include <sys/fm/io/ddi.h> 326f45ec7bSml29623 336f45ec7bSml29623 static nxge_fm_ereport_attr_t 346f45ec7bSml29623 *nxge_fm_get_ereport_attr(nxge_fm_ereport_id_t); 356f45ec7bSml29623 36ee5416c9Syc148097 static int 37ee5416c9Syc148097 nxge_fm_error_cb(dev_info_t *dip, ddi_fm_error_t *err, const void *impl_data); 38ee5416c9Syc148097 396f45ec7bSml29623 nxge_fm_ereport_attr_t nxge_fm_ereport_pcs[] = { 406f45ec7bSml29623 {NXGE_FM_EREPORT_XPCS_LINK_DOWN, "10g_link_down", 416f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 426f45ec7bSml29623 DDI_SERVICE_LOST}, 436f45ec7bSml29623 {NXGE_FM_EREPORT_XPCS_TX_LINK_FAULT, "10g_tx_link_fault", 446f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 456f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 466f45ec7bSml29623 {NXGE_FM_EREPORT_XPCS_RX_LINK_FAULT, "10g_rx_link_fault", 476f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 486f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 496f45ec7bSml29623 {NXGE_FM_EREPORT_PCS_LINK_DOWN, "1g_link_down", 506f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 516f45ec7bSml29623 DDI_SERVICE_LOST}, 526f45ec7bSml29623 {NXGE_FM_EREPORT_PCS_REMOTE_FAULT, "1g_remote_fault", 536f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 546f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 556f45ec7bSml29623 }; 566f45ec7bSml29623 576f45ec7bSml29623 nxge_fm_ereport_attr_t nxge_fm_ereport_mif[] = { 586f45ec7bSml29623 {NXGE_FM_EREPORT_MIF_ACCESS_FAIL, "transceiver_access_fail"} 596f45ec7bSml29623 }; 606f45ec7bSml29623 616f45ec7bSml29623 nxge_fm_ereport_attr_t nxge_fm_ereport_fflp[] = { 626f45ec7bSml29623 {NXGE_FM_EREPORT_FFLP_TCAM_ERR, "classifier_tcam_err", 636f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 646f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 656f45ec7bSml29623 {NXGE_FM_EREPORT_FFLP_VLAN_PAR_ERR, "classifier_vlan_par_err", 666f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 676f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 686f45ec7bSml29623 {NXGE_FM_EREPORT_FFLP_HASHT_DATA_ERR, "classifier_hasht_data_err", 696f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 706f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 716f45ec7bSml29623 {NXGE_FM_EREPORT_FFLP_HASHT_LOOKUP_ERR, "classifier_hasht_lookup_err", 726f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 736f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 746f45ec7bSml29623 {NXGE_FM_EREPORT_FFLP_ACCESS_FAIL, "classifier_access_fail", 756f45ec7bSml29623 DDI_FM_DEVICE_NO_RESPONSE, 766f45ec7bSml29623 DDI_SERVICE_DEGRADED} 776f45ec7bSml29623 }; 786f45ec7bSml29623 796f45ec7bSml29623 nxge_fm_ereport_attr_t nxge_fm_ereport_ipp[] = { 806f45ec7bSml29623 {NXGE_FM_EREPORT_IPP_EOP_MISS, "rx_eop_miss", 816f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 826f45ec7bSml29623 DDI_SERVICE_LOST}, 836f45ec7bSml29623 {NXGE_FM_EREPORT_IPP_SOP_MISS, "rx_sop_miss", 846f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 856f45ec7bSml29623 DDI_SERVICE_LOST}, 866f45ec7bSml29623 {NXGE_FM_EREPORT_IPP_DFIFO_UE, "rx_dfifo_ucorr_err", 876f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 886f45ec7bSml29623 DDI_SERVICE_LOST}, 896f45ec7bSml29623 {NXGE_FM_EREPORT_IPP_DFIFO_CE, "rx_dfifo_corr_err", 906f45ec7bSml29623 DDI_FM_DEVICE_INTERN_CORR, 916f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 926f45ec7bSml29623 {NXGE_FM_EREPORT_IPP_PFIFO_PERR, "rx_dfifo_parity_err", 936f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 946f45ec7bSml29623 DDI_SERVICE_LOST}, 956f45ec7bSml29623 {NXGE_FM_EREPORT_IPP_ECC_ERR_MAX, "rx_ecc_err_max", 966f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 976f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 986f45ec7bSml29623 {NXGE_FM_EREPORT_IPP_PFIFO_OVER, "rx_pfifo_overflow", 996f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 1006f45ec7bSml29623 DDI_SERVICE_LOST}, 1016f45ec7bSml29623 {NXGE_FM_EREPORT_IPP_PFIFO_UND, "rx_pfifo_underrun", 1026f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 1036f45ec7bSml29623 DDI_SERVICE_LOST}, 1046f45ec7bSml29623 {NXGE_FM_EREPORT_IPP_BAD_CS_MX, "rx_bad_cksum_max", 1056f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 1066f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 1076f45ec7bSml29623 {NXGE_FM_EREPORT_IPP_PKT_DIS_MX, "rx_pkt_discard_max", 1086f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 1096f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 1106f45ec7bSml29623 {NXGE_FM_EREPORT_IPP_RESET_FAIL, "rx_reset_fail", 1116f45ec7bSml29623 DDI_FM_DEVICE_NO_RESPONSE, 1126f45ec7bSml29623 DDI_SERVICE_LOST} 1136f45ec7bSml29623 }; 1146f45ec7bSml29623 1156f45ec7bSml29623 nxge_fm_ereport_attr_t nxge_fm_ereport_rdmc[] = { 1166f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_DCF_ERR, "rxdma_dcf_err", 1176f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 1186f45ec7bSml29623 DDI_SERVICE_LOST}, 1196f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_RCR_ACK_ERR, "rxdma_rcr_ack_err", 1206f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 1216f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 1226f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_DC_FIFO_ERR, "rxdma_dc_fifo_err", 1236f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 1246f45ec7bSml29623 DDI_SERVICE_LOST}, 1256f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_RCR_SHA_PAR, "rxdma_rcr_sha_par_err", 1266f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 1276f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 1286f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_RBR_PRE_PAR, "rxdma_rbr_pre_par_err", 1296f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 1306f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 1316f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_RBR_TMOUT, "rxdma_rbr_tmout", 1326f45ec7bSml29623 DDI_FM_DEVICE_NO_RESPONSE, 1336f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 1346f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_RSP_CNT_ERR, "rxdma_rsp_cnt_err", 1356f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 1366f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 1376f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_BYTE_EN_BUS, "rxdma_byte_en_bus", 1386f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 1396f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 1406f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_RSP_DAT_ERR, "rxdma_rsp_dat_err", 1416f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 1426f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 1436f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_ID_MISMATCH, "rxdma_id_mismatch", 1446f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 1456f45ec7bSml29623 DDI_SERVICE_LOST}, 1466f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_ZCP_EOP_ERR, "rxdma_zcp_eop_err", 1476f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 1486f45ec7bSml29623 DDI_SERVICE_LOST}, 1496f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_IPP_EOP_ERR, "rxdma_ipp_eop_err", 1506f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 1516f45ec7bSml29623 DDI_SERVICE_LOST}, 15253f3d8ecSyc148097 {NXGE_FM_EREPORT_RDMC_RCR_ERR, "rxdma_completion_err", 1536f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 1546f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 1556f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_CONFIG_ERR, "rxdma_config_err", 1566f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 1576f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 1586f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_RCRINCON, "rxdma_rcrincon", 1596f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 1606f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 1616f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_RCRFULL, "rxdma_rcrfull", 1626f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 1636f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 1646f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_RBRFULL, "rxdma_rbrfull", 1656f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 1666f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 1676f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_RBRLOGPAGE, "rxdma_rbrlogpage", 1686f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 1696f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 1706f45ec7bSml29623 {NXGE_FM_EREPORT_RDMC_CFIGLOGPAGE, "rxdma_cfiglogpage", 1716f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 1726f45ec7bSml29623 DDI_SERVICE_DEGRADED} 1736f45ec7bSml29623 }; 1746f45ec7bSml29623 1756f45ec7bSml29623 nxge_fm_ereport_attr_t nxge_fm_ereport_zcp[] = { 1766f45ec7bSml29623 {NXGE_FM_EREPORT_ZCP_RRFIFO_UNDERRUN, "rxzcopy_rrfifo_underrun", 1776f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 1786f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 1796f45ec7bSml29623 {NXGE_FM_EREPORT_ZCP_RSPFIFO_UNCORR_ERR, 1806f45ec7bSml29623 "rxzcopy_rspfifo_uncorr_err", 1816f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 1826f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 1836f45ec7bSml29623 {NXGE_FM_EREPORT_ZCP_STAT_TBL_PERR, "rxzcopy_stat_tbl_perr", 1846f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 1856f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 1866f45ec7bSml29623 {NXGE_FM_EREPORT_ZCP_DYN_TBL_PERR, "rxzcopy_dyn_tbl_perr", 1876f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 1886f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 1896f45ec7bSml29623 {NXGE_FM_EREPORT_ZCP_BUF_TBL_PERR, "rxzcopy_buf_tbl_perr", 1906f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 1916f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 1926f45ec7bSml29623 {NXGE_FM_EREPORT_ZCP_CFIFO_ECC, "rxzcopy_cfifo_ecc", 1936f45ec7bSml29623 DDI_FM_DEVICE_INTERN_CORR, 1946f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 1956f45ec7bSml29623 {NXGE_FM_EREPORT_ZCP_RRFIFO_OVERRUN, "rxzcopy_rrfifo_overrun", 1966f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 1976f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 1986f45ec7bSml29623 {NXGE_FM_EREPORT_ZCP_BUFFER_OVERFLOW, "rxzcopy_buffer_overflow", 1996f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 2006f45ec7bSml29623 DDI_SERVICE_LOST}, 2016f45ec7bSml29623 {NXGE_FM_EREPORT_ZCP_TT_PROGRAM_ERR, "rxzcopy_tt_program_err", 2026f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 2036f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2046f45ec7bSml29623 {NXGE_FM_EREPORT_ZCP_RSP_TT_INDEX_ERR, "rxzcopy_rsp_tt_index_err", 2056f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 2066f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2076f45ec7bSml29623 {NXGE_FM_EREPORT_ZCP_SLV_TT_INDEX_ERR, "rxzcopy_slv_tt_index_err", 2086f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 2096f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2106f45ec7bSml29623 {NXGE_FM_EREPORT_ZCP_TT_INDEX_ERR, "rxzcopy_tt_index_err", 2116f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 2126f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2136f45ec7bSml29623 {NXGE_FM_EREPORT_ZCP_ACCESS_FAIL, "rxzcopy_access_fail", 2146f45ec7bSml29623 DDI_FM_DEVICE_NO_RESPONSE, 2156f45ec7bSml29623 DDI_SERVICE_LOST}, 2166f45ec7bSml29623 }; 2176f45ec7bSml29623 2186f45ec7bSml29623 nxge_fm_ereport_attr_t nxge_fm_ereport_rxmac[] = { 2196f45ec7bSml29623 {NXGE_FM_EREPORT_RXMAC_UNDERFLOW, "rxmac_underflow", 2206f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 2216f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2226f45ec7bSml29623 {NXGE_FM_EREPORT_RXMAC_CRC_ERRCNT_EXP, "rxmac_crc_errcnt_exp", 2236f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 2246f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2256f45ec7bSml29623 {NXGE_FM_EREPORT_RXMAC_LENGTH_ERRCNT_EXP, 2266f45ec7bSml29623 "rxmac_length_errcnt_exp", 2276f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 2286f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2296f45ec7bSml29623 {NXGE_FM_EREPORT_RXMAC_VIOL_ERRCNT_EXP, "rxmac_viol_errcnt_exp", 2306f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 2316f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2326f45ec7bSml29623 {NXGE_FM_EREPORT_RXMAC_RXFRAG_CNT_EXP, "rxmac_rxfrag_cnt_exp", 2336f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 2346f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2356f45ec7bSml29623 {NXGE_FM_EREPORT_RXMAC_ALIGN_ECNT_EXP, "rxmac_align_ecnt_exp", 2366f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 2376f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2386f45ec7bSml29623 {NXGE_FM_EREPORT_RXMAC_LINKFAULT_CNT_EXP, 2396f45ec7bSml29623 "rxmac_linkfault_cnt_exp", 2406f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 2416f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2426f45ec7bSml29623 {NXGE_FM_EREPORT_RXMAC_RESET_FAIL, "rxmac_reset_fail", 2436f45ec7bSml29623 DDI_FM_DEVICE_NO_RESPONSE, 2446f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2456f45ec7bSml29623 }; 2466f45ec7bSml29623 2476f45ec7bSml29623 nxge_fm_ereport_attr_t nxge_fm_ereport_tdmc[] = { 2486f45ec7bSml29623 {NXGE_FM_EREPORT_TDMC_PREF_BUF_PAR_ERR, "txdma_pref_buf_par_err", 2496f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 2506f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 2516f45ec7bSml29623 {NXGE_FM_EREPORT_TDMC_MBOX_ERR, "txdma_mbox_err", 2526f45ec7bSml29623 DDI_FM_DEVICE_NO_RESPONSE, 2536f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 2546f45ec7bSml29623 {NXGE_FM_EREPORT_TDMC_NACK_PREF, "txdma_nack_pref", 2556f45ec7bSml29623 DDI_FM_DEVICE_NO_RESPONSE, 2566f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 2576f45ec7bSml29623 {NXGE_FM_EREPORT_TDMC_NACK_PKT_RD, "txdma_nack_pkt_rd", 2586f45ec7bSml29623 DDI_FM_DEVICE_NO_RESPONSE, 2596f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 2606f45ec7bSml29623 {NXGE_FM_EREPORT_TDMC_PKT_SIZE_ERR, "txdma_pkt_size_err", 2616f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 2626f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 2636f45ec7bSml29623 {NXGE_FM_EREPORT_TDMC_TX_RING_OFLOW, "txdma_tx_ring_oflow", 2646f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 2656f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 2666f45ec7bSml29623 {NXGE_FM_EREPORT_TDMC_CONF_PART_ERR, "txdma_conf_part_err", 2676f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 2686f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 2696f45ec7bSml29623 {NXGE_FM_EREPORT_TDMC_PKT_PRT_ERR, "txdma_pkt_prt_err", 2706f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 2716f45ec7bSml29623 DDI_SERVICE_DEGRADED}, 2726f45ec7bSml29623 {NXGE_FM_EREPORT_TDMC_RESET_FAIL, "txdma_reset_fail", 2736f45ec7bSml29623 DDI_FM_DEVICE_NO_RESPONSE, 2746f45ec7bSml29623 DDI_SERVICE_LOST}, 2756f45ec7bSml29623 }; 2766f45ec7bSml29623 2776f45ec7bSml29623 nxge_fm_ereport_attr_t nxge_fm_ereport_txc[] = { 2786f45ec7bSml29623 {NXGE_FM_EREPORT_TXC_RO_CORRECT_ERR, "tx_ro_correct_err", 2796f45ec7bSml29623 DDI_FM_DEVICE_INTERN_CORR, 2806f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2816f45ec7bSml29623 {NXGE_FM_EREPORT_TXC_RO_UNCORRECT_ERR, "tx_ro_uncorrect_err", 2826f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 2836f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2846f45ec7bSml29623 {NXGE_FM_EREPORT_TXC_SF_CORRECT_ERR, "tx_sf_correct_err", 2856f45ec7bSml29623 DDI_FM_DEVICE_INTERN_CORR, 2866f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2876f45ec7bSml29623 {NXGE_FM_EREPORT_TXC_SF_UNCORRECT_ERR, "tx_sf_uncorrect_err", 2886f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 2896f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2906f45ec7bSml29623 {NXGE_FM_EREPORT_TXC_ASSY_DEAD, "tx_assembly_uncorrect_err", 2916f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 2926f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 2936f45ec7bSml29623 {NXGE_FM_EREPORT_TXC_REORDER_ERR, "tx_reorder_err", 2946f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 2956f45ec7bSml29623 DDI_SERVICE_LOST}, 2966f45ec7bSml29623 }; 2976f45ec7bSml29623 2986f45ec7bSml29623 nxge_fm_ereport_attr_t nxge_fm_ereport_txmac[] = { 2996f45ec7bSml29623 {NXGE_FM_EREPORT_TXMAC_UNDERFLOW, "txmac_underflow", 3006f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 3016f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 3026f45ec7bSml29623 {NXGE_FM_EREPORT_TXMAC_OVERFLOW, "txmac_overflow", 3036f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 3046f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 3056f45ec7bSml29623 {NXGE_FM_EREPORT_TXMAC_TXFIFO_XFR_ERR, "txmac_txfifo_xfr_err", 3066f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 3076f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 3086f45ec7bSml29623 {NXGE_FM_EREPORT_TXMAC_MAX_PKT_ERR, "txmac_max_pkt_err", 3096f45ec7bSml29623 DDI_FM_DEVICE_INTERN_UNCORR, 3106f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 3116f45ec7bSml29623 {NXGE_FM_EREPORT_TXMAC_RESET_FAIL, "txmac_reset_fail", 3126f45ec7bSml29623 DDI_FM_DEVICE_NO_RESPONSE, 3136f45ec7bSml29623 DDI_SERVICE_UNAFFECTED}, 3146f45ec7bSml29623 }; 3156f45ec7bSml29623 3166f45ec7bSml29623 nxge_fm_ereport_attr_t nxge_fm_ereport_espc[] = { 3176f45ec7bSml29623 {NXGE_FM_EREPORT_ESPC_ACCESS_FAIL, "eprom_access_fail", 3186f45ec7bSml29623 DDI_FM_DEVICE_NO_RESPONSE, 3196f45ec7bSml29623 DDI_SERVICE_LOST}, 3206f45ec7bSml29623 }; 3216f45ec7bSml29623 322ee5416c9Syc148097 nxge_fm_ereport_attr_t nxge_fm_ereport_xaui[] = { 323ee5416c9Syc148097 {NXGE_FM_EREPORT_XAUI_ERR, "xaui_bad_or_missing", 324ee5416c9Syc148097 NXGE_FM_DEVICE_XAUI_ERR, 325ee5416c9Syc148097 DDI_SERVICE_LOST}, 326ee5416c9Syc148097 }; 327ee5416c9Syc148097 328ee5416c9Syc148097 nxge_fm_ereport_attr_t nxge_fm_ereport_xfp[] = { 329ee5416c9Syc148097 {NXGE_FM_EREPORT_XFP_ERR, "xfp_bad_or_missing", 330ee5416c9Syc148097 NXGE_FM_DEVICE_XFP_ERR, 331ee5416c9Syc148097 DDI_SERVICE_LOST}, 332ee5416c9Syc148097 }; 333ee5416c9Syc148097 3346f45ec7bSml29623 nxge_fm_ereport_attr_t nxge_fm_ereport_sw[] = { 3356f45ec7bSml29623 {NXGE_FM_EREPORT_SW_INVALID_PORT_NUM, "invalid_port_num", 3366f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 3376f45ec7bSml29623 DDI_SERVICE_LOST}, 3386f45ec7bSml29623 {NXGE_FM_EREPORT_SW_INVALID_CHAN_NUM, "invalid_chan_num", 3396f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 3406f45ec7bSml29623 DDI_SERVICE_LOST}, 3416f45ec7bSml29623 {NXGE_FM_EREPORT_SW_INVALID_PARAM, "invalid_param", 3426f45ec7bSml29623 DDI_FM_DEVICE_INVAL_STATE, 3436f45ec7bSml29623 DDI_SERVICE_LOST}, 3446f45ec7bSml29623 }; 3456f45ec7bSml29623 3466f45ec7bSml29623 void 3476f45ec7bSml29623 nxge_fm_init(p_nxge_t nxgep, ddi_device_acc_attr_t *reg_attr, 348*837c1ac4SStephen Hanson ddi_dma_attr_t *dma_attr) 3496f45ec7bSml29623 { 3506f45ec7bSml29623 ddi_iblock_cookie_t iblk; 3516f45ec7bSml29623 352ee5416c9Syc148097 /* 353ee5416c9Syc148097 * fm-capable in nxge.conf can be used to set fm_capabilities. 354ee5416c9Syc148097 * If fm-capable is not defined, then the last argument passed to 355ee5416c9Syc148097 * ddi_prop_get_int will be returned as the capabilities. 356ee5416c9Syc148097 */ 3576f45ec7bSml29623 nxgep->fm_capabilities = ddi_prop_get_int(DDI_DEV_T_ANY, nxgep->dip, 358ee5416c9Syc148097 DDI_PROP_DONTPASS | DDI_PROP_NOTPROM, "fm-capable", 359ee5416c9Syc148097 DDI_FM_EREPORT_CAPABLE | DDI_FM_ERRCB_CAPABLE); 360ee5416c9Syc148097 361678453a8Sspeer NXGE_ERROR_MSG((nxgep, DDI_CTL, 3626f45ec7bSml29623 "FM capable = %d\n", nxgep->fm_capabilities)); 3636f45ec7bSml29623 364678453a8Sspeer if (isLDOMguest(nxgep)) { 365678453a8Sspeer nxgep->fm_capabilities = DDI_FM_NOT_CAPABLE; 366678453a8Sspeer return; 367678453a8Sspeer } 368678453a8Sspeer 369ee5416c9Syc148097 /* 370ee5416c9Syc148097 * Register capabilities with IO Fault Services. The capabilities 371ee5416c9Syc148097 * set above may not be supported by the parent nexus, in that case 372ee5416c9Syc148097 * some capability bits may be cleared. 373ee5416c9Syc148097 */ 374ee5416c9Syc148097 if (nxgep->fm_capabilities) 3756f45ec7bSml29623 ddi_fm_init(nxgep->dip, &nxgep->fm_capabilities, &iblk); 3766f45ec7bSml29623 3776f45ec7bSml29623 /* 3786f45ec7bSml29623 * Initialize pci ereport capabilities if ereport capable 3796f45ec7bSml29623 */ 3806f45ec7bSml29623 if (DDI_FM_EREPORT_CAP(nxgep->fm_capabilities) || 381ee5416c9Syc148097 DDI_FM_ERRCB_CAP(nxgep->fm_capabilities)) { 3826f45ec7bSml29623 pci_ereport_setup(nxgep->dip); 383ee5416c9Syc148097 } 384ee5416c9Syc148097 385ee5416c9Syc148097 /* Register error callback if error callback capable */ 386ee5416c9Syc148097 if (DDI_FM_ERRCB_CAP(nxgep->fm_capabilities)) { 387ee5416c9Syc148097 ddi_fm_handler_register(nxgep->dip, 388ee5416c9Syc148097 nxge_fm_error_cb, (void*) nxgep); 389ee5416c9Syc148097 } 390ee5416c9Syc148097 3916f45ec7bSml29623 /* 392ee5416c9Syc148097 * DDI_FLGERR_ACC indicates: 393ee5416c9Syc148097 * o Driver will check its access handle(s) for faults on 394ee5416c9Syc148097 * a regular basis by calling ddi_fm_acc_err_get 395ee5416c9Syc148097 * o Driver is able to cope with incorrect results of I/O 396ee5416c9Syc148097 * operations resulted from an I/O fault 3976f45ec7bSml29623 */ 398ee5416c9Syc148097 if (DDI_FM_ACC_ERR_CAP(nxgep->fm_capabilities)) { 399ee5416c9Syc148097 reg_attr->devacc_attr_access = DDI_FLAGERR_ACC; 400ee5416c9Syc148097 } else { 4016f45ec7bSml29623 reg_attr->devacc_attr_access = DDI_DEFAULT_ACC; 4026f45ec7bSml29623 } 403ee5416c9Syc148097 404ee5416c9Syc148097 /* 405ee5416c9Syc148097 * DDI_DMA_FLAGERR indicates: 406ee5416c9Syc148097 * o Driver will check its DMA handle(s) for faults on a 407ee5416c9Syc148097 * regular basis using ddi_fm_dma_err_get 408ee5416c9Syc148097 * o Driver is able to cope with incorrect results of DMA 409ee5416c9Syc148097 * operations resulted from an I/O fault 410ee5416c9Syc148097 */ 411ee5416c9Syc148097 if (DDI_FM_DMA_ERR_CAP(nxgep->fm_capabilities)) 412ee5416c9Syc148097 dma_attr->dma_attr_flags |= DDI_DMA_FLAGERR; 413ee5416c9Syc148097 else 414ee5416c9Syc148097 dma_attr->dma_attr_flags &= ~DDI_DMA_FLAGERR; 415ee5416c9Syc148097 4166f45ec7bSml29623 } 4176f45ec7bSml29623 4186f45ec7bSml29623 void 4196f45ec7bSml29623 nxge_fm_fini(p_nxge_t nxgep) 4206f45ec7bSml29623 { 4216f45ec7bSml29623 /* Only unregister FMA capabilities if we registered some */ 4226f45ec7bSml29623 if (nxgep->fm_capabilities) { 4236f45ec7bSml29623 4246f45ec7bSml29623 /* 4256f45ec7bSml29623 * Release any resources allocated by pci_ereport_setup() 4266f45ec7bSml29623 */ 4276f45ec7bSml29623 if (DDI_FM_EREPORT_CAP(nxgep->fm_capabilities) || 4286f45ec7bSml29623 DDI_FM_ERRCB_CAP(nxgep->fm_capabilities)) 4296f45ec7bSml29623 pci_ereport_teardown(nxgep->dip); 4306f45ec7bSml29623 4316f45ec7bSml29623 /* 4326f45ec7bSml29623 * Un-register error callback if error callback capable 4336f45ec7bSml29623 */ 4346f45ec7bSml29623 if (DDI_FM_ERRCB_CAP(nxgep->fm_capabilities)) 4356f45ec7bSml29623 ddi_fm_handler_unregister(nxgep->dip); 4366f45ec7bSml29623 4376f45ec7bSml29623 /* Unregister from IO Fault Services */ 4386f45ec7bSml29623 ddi_fm_fini(nxgep->dip); 4396f45ec7bSml29623 } 4406f45ec7bSml29623 } 4416f45ec7bSml29623 442ee5416c9Syc148097 /*ARGSUSED*/ 443ee5416c9Syc148097 /* 444ee5416c9Syc148097 * Simply call pci_ereport_post which generates ereports for errors 445ee5416c9Syc148097 * that occur in the PCI local bus configuration status registers. 446ee5416c9Syc148097 */ 447ee5416c9Syc148097 static int 448ee5416c9Syc148097 nxge_fm_error_cb(dev_info_t *dip, ddi_fm_error_t *err, 449ee5416c9Syc148097 const void *impl_data) 4506f45ec7bSml29623 { 451ee5416c9Syc148097 pci_ereport_post(dip, err, NULL); 452ee5416c9Syc148097 return (err->fme_status); 4536f45ec7bSml29623 } 4546f45ec7bSml29623 4556f45ec7bSml29623 4566f45ec7bSml29623 static nxge_fm_ereport_attr_t * 4576f45ec7bSml29623 nxge_fm_get_ereport_attr(nxge_fm_ereport_id_t ereport_id) 4586f45ec7bSml29623 { 4596f45ec7bSml29623 nxge_fm_ereport_attr_t *attr; 460ee5416c9Syc148097 uint8_t blk_id = (ereport_id >> EREPORT_FM_ID_SHIFT) & 461ee5416c9Syc148097 EREPORT_FM_ID_MASK; 462ee5416c9Syc148097 uint8_t index = ereport_id & EREPORT_INDEX_MASK; 4636f45ec7bSml29623 4646f45ec7bSml29623 switch (blk_id) { 4656f45ec7bSml29623 case FM_SW_ID: 4666f45ec7bSml29623 attr = &nxge_fm_ereport_sw[index]; 4676f45ec7bSml29623 break; 4686f45ec7bSml29623 case FM_PCS_ID: 4696f45ec7bSml29623 attr = &nxge_fm_ereport_pcs[index]; 4706f45ec7bSml29623 break; 4716f45ec7bSml29623 case FM_TXMAC_ID: 4726f45ec7bSml29623 attr = &nxge_fm_ereport_txmac[index]; 4736f45ec7bSml29623 break; 4746f45ec7bSml29623 case FM_RXMAC_ID: 4756f45ec7bSml29623 attr = &nxge_fm_ereport_rxmac[index]; 4766f45ec7bSml29623 break; 4776f45ec7bSml29623 case FM_MIF_ID: 4786f45ec7bSml29623 attr = &nxge_fm_ereport_mif[index]; 4796f45ec7bSml29623 break; 4806f45ec7bSml29623 case FM_FFLP_ID: 4816f45ec7bSml29623 attr = &nxge_fm_ereport_fflp[index]; 4826f45ec7bSml29623 break; 4836f45ec7bSml29623 case FM_ZCP_ID: 4846f45ec7bSml29623 attr = &nxge_fm_ereport_zcp[index]; 4856f45ec7bSml29623 break; 4866f45ec7bSml29623 case FM_RXDMA_ID: 4876f45ec7bSml29623 attr = &nxge_fm_ereport_rdmc[index]; 4886f45ec7bSml29623 break; 4896f45ec7bSml29623 case FM_TXDMA_ID: 4906f45ec7bSml29623 attr = &nxge_fm_ereport_tdmc[index]; 4916f45ec7bSml29623 break; 4926f45ec7bSml29623 case FM_IPP_ID: 4936f45ec7bSml29623 attr = &nxge_fm_ereport_ipp[index]; 4946f45ec7bSml29623 break; 4956f45ec7bSml29623 case FM_TXC_ID: 4966f45ec7bSml29623 attr = &nxge_fm_ereport_txc[index]; 4976f45ec7bSml29623 break; 4986f45ec7bSml29623 case FM_ESPC_ID: 4996f45ec7bSml29623 attr = &nxge_fm_ereport_espc[index]; 5006f45ec7bSml29623 break; 501ee5416c9Syc148097 case FM_XAUI_ID: 502ee5416c9Syc148097 attr = &nxge_fm_ereport_xaui[index]; 503ee5416c9Syc148097 break; 504ee5416c9Syc148097 case FM_XFP_ID: 505ee5416c9Syc148097 attr = &nxge_fm_ereport_xfp[index]; 506ee5416c9Syc148097 break; 5076f45ec7bSml29623 default: 5086f45ec7bSml29623 attr = NULL; 5096f45ec7bSml29623 } 5106f45ec7bSml29623 5116f45ec7bSml29623 return (attr); 5126f45ec7bSml29623 } 5136f45ec7bSml29623 5146f45ec7bSml29623 static void 5156f45ec7bSml29623 nxge_fm_ereport(p_nxge_t nxgep, uint8_t err_portn, uint8_t err_chan, 5166f45ec7bSml29623 nxge_fm_ereport_attr_t *ereport) 5176f45ec7bSml29623 { 5186f45ec7bSml29623 uint64_t ena; 5196f45ec7bSml29623 char eclass[FM_MAX_CLASS]; 5206f45ec7bSml29623 char *err_str; 5216f45ec7bSml29623 p_nxge_stats_t statsp; 5226f45ec7bSml29623 5236f45ec7bSml29623 (void) snprintf(eclass, FM_MAX_CLASS, "%s.%s", DDI_FM_DEVICE, 5246f45ec7bSml29623 ereport->eclass); 5256f45ec7bSml29623 err_str = ereport->str; 5266f45ec7bSml29623 ena = fm_ena_generate(0, FM_ENA_FMT1); 5276f45ec7bSml29623 statsp = nxgep->statsp; 5286f45ec7bSml29623 5296f45ec7bSml29623 switch (ereport->index) { 5306f45ec7bSml29623 case NXGE_FM_EREPORT_XPCS_LINK_DOWN: 5316f45ec7bSml29623 case NXGE_FM_EREPORT_XPCS_TX_LINK_FAULT: 5326f45ec7bSml29623 case NXGE_FM_EREPORT_XPCS_RX_LINK_FAULT: 5336f45ec7bSml29623 case NXGE_FM_EREPORT_PCS_LINK_DOWN: 5346f45ec7bSml29623 case NXGE_FM_EREPORT_PCS_REMOTE_FAULT: 5356f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 5366f45ec7bSml29623 DDI_NOSLEEP, 5376f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 538ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 5396f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 5406f45ec7bSml29623 NULL); 5416f45ec7bSml29623 break; 5426f45ec7bSml29623 case NXGE_FM_EREPORT_IPP_EOP_MISS: 5436f45ec7bSml29623 case NXGE_FM_EREPORT_IPP_SOP_MISS: 5446f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 5456f45ec7bSml29623 DDI_NOSLEEP, 5466f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 547ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 5486f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 5496f45ec7bSml29623 ERNAME_DFIFO_RD_PTR, DATA_TYPE_UINT16, 5506f45ec7bSml29623 statsp->ipp_stats.errlog.dfifo_rd_ptr, 5516f45ec7bSml29623 ERNAME_IPP_STATE_MACH, DATA_TYPE_UINT32, 5526f45ec7bSml29623 statsp->ipp_stats.errlog.state_mach, 5536f45ec7bSml29623 NULL); 5546f45ec7bSml29623 break; 5556f45ec7bSml29623 case NXGE_FM_EREPORT_IPP_DFIFO_UE: 5566f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 5576f45ec7bSml29623 DDI_NOSLEEP, 5586f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 559ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 5606f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 5616f45ec7bSml29623 ERNAME_DFIFO_ENTRY, DATA_TYPE_UINT16, 5626f45ec7bSml29623 nxgep->ipp.status.bits.w0.dfifo_ecc_err_idx, 5636f45ec7bSml29623 ERNAME_DFIFO_SYNDROME, DATA_TYPE_UINT16, 5646f45ec7bSml29623 statsp->ipp_stats.errlog.ecc_syndrome, 5656f45ec7bSml29623 NULL); 5666f45ec7bSml29623 break; 5676f45ec7bSml29623 case NXGE_FM_EREPORT_IPP_PFIFO_PERR: 5686f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 5696f45ec7bSml29623 DDI_NOSLEEP, 5706f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 571ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 5726f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 5736f45ec7bSml29623 ERNAME_PFIFO_ENTRY, DATA_TYPE_UINT8, 5746f45ec7bSml29623 nxgep->ipp.status.bits.w0.pre_fifo_perr_idx, 5756f45ec7bSml29623 NULL); 5766f45ec7bSml29623 break; 5776f45ec7bSml29623 case NXGE_FM_EREPORT_IPP_DFIFO_CE: 5786f45ec7bSml29623 case NXGE_FM_EREPORT_IPP_ECC_ERR_MAX: 5796f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 5806f45ec7bSml29623 DDI_NOSLEEP, 5816f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 582ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 5836f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 5846f45ec7bSml29623 NULL); 5856f45ec7bSml29623 break; 5866f45ec7bSml29623 case NXGE_FM_EREPORT_IPP_PFIFO_OVER: 5876f45ec7bSml29623 case NXGE_FM_EREPORT_IPP_PFIFO_UND: 5886f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 5896f45ec7bSml29623 DDI_NOSLEEP, 5906f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 591ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 5926f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 5936f45ec7bSml29623 ERNAME_IPP_STATE_MACH, DATA_TYPE_UINT32, 5946f45ec7bSml29623 statsp->ipp_stats.errlog.state_mach, 5956f45ec7bSml29623 NULL); 5966f45ec7bSml29623 break; 5976f45ec7bSml29623 case NXGE_FM_EREPORT_IPP_BAD_CS_MX: 5986f45ec7bSml29623 case NXGE_FM_EREPORT_IPP_PKT_DIS_MX: 5996f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 6006f45ec7bSml29623 DDI_NOSLEEP, 6016f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 602ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 6036f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 6046f45ec7bSml29623 NULL); 6056f45ec7bSml29623 break; 6066f45ec7bSml29623 case NXGE_FM_EREPORT_FFLP_TCAM_ERR: 6076f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 6086f45ec7bSml29623 DDI_NOSLEEP, 6096f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 610ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 6116f45ec7bSml29623 ERNAME_TCAM_ERR_LOG, DATA_TYPE_UINT32, 6126f45ec7bSml29623 statsp->fflp_stats.errlog.tcam, 6136f45ec7bSml29623 NULL); 6146f45ec7bSml29623 break; 6156f45ec7bSml29623 case NXGE_FM_EREPORT_FFLP_VLAN_PAR_ERR: 6166f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 6176f45ec7bSml29623 DDI_NOSLEEP, 6186f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 619ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 6206f45ec7bSml29623 ERNAME_VLANTAB_ERR_LOG, DATA_TYPE_UINT32, 6216f45ec7bSml29623 statsp->fflp_stats.errlog.vlan, 6226f45ec7bSml29623 NULL); 6236f45ec7bSml29623 break; 6246f45ec7bSml29623 case NXGE_FM_EREPORT_FFLP_HASHT_DATA_ERR: 6256f45ec7bSml29623 { 6266f45ec7bSml29623 int rdc_grp; 6276f45ec7bSml29623 hash_tbl_data_log_t hash_log; 6286f45ec7bSml29623 6296f45ec7bSml29623 for (rdc_grp = 0; rdc_grp < MAX_PARTITION; rdc_grp++) { 6306f45ec7bSml29623 hash_log.value = nxgep->classifier.fflp_stats-> 6316f45ec7bSml29623 errlog.hash_pio[rdc_grp]; 6326f45ec7bSml29623 if (hash_log.bits.ldw.pio_err) { 6336f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, 6346f45ec7bSml29623 ena, DDI_NOSLEEP, 6356f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, 6366f45ec7bSml29623 FM_EREPORT_VERS0, 637ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, 638ee5416c9Syc148097 DATA_TYPE_STRING, err_str, 6396f45ec7bSml29623 ERNAME_HASHTAB_ERR_LOG, 6406f45ec7bSml29623 DATA_TYPE_UINT32, 6416f45ec7bSml29623 nxgep->classifier.fflp_stats-> 6426f45ec7bSml29623 errlog.hash_pio[rdc_grp], NULL); 6436f45ec7bSml29623 } 6446f45ec7bSml29623 } 6456f45ec7bSml29623 } 6466f45ec7bSml29623 break; 6476f45ec7bSml29623 case NXGE_FM_EREPORT_FFLP_HASHT_LOOKUP_ERR: 6486f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 6496f45ec7bSml29623 DDI_NOSLEEP, 6506f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 651ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 6526f45ec7bSml29623 ERNAME_HASHT_LOOKUP_ERR_LOG0, DATA_TYPE_UINT32, 6536f45ec7bSml29623 statsp->fflp_stats.errlog. hash_lookup1, 6546f45ec7bSml29623 ERNAME_HASHT_LOOKUP_ERR_LOG1, DATA_TYPE_UINT32, 6556f45ec7bSml29623 statsp->fflp_stats.errlog.hash_lookup2, 6566f45ec7bSml29623 NULL); 6576f45ec7bSml29623 break; 6586f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_DCF_ERR: 6596f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_RBR_TMOUT: 6606f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_RSP_CNT_ERR: 6616f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_BYTE_EN_BUS: 6626f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_RSP_DAT_ERR: 6636f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_RCR_ACK_ERR: 6646f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_DC_FIFO_ERR: 6656f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_CONFIG_ERR: 6666f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_RCRINCON: 6676f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_RCRFULL: 6686f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_RBRFULL: 6696f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_RBRLOGPAGE: 6706f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_CFIGLOGPAGE: 6716f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_ID_MISMATCH: 6726f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_ZCP_EOP_ERR: 6736f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_IPP_EOP_ERR: 6746f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 6756f45ec7bSml29623 DDI_NOSLEEP, 6766f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 677ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 6786f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 6796f45ec7bSml29623 ERNAME_ERR_DCHAN, DATA_TYPE_UINT8, err_chan, 6806f45ec7bSml29623 NULL); 6816f45ec7bSml29623 break; 6826f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_RBR_PRE_PAR: 6836f45ec7bSml29623 case NXGE_FM_EREPORT_RDMC_RCR_SHA_PAR: 6846f45ec7bSml29623 { 6856f45ec7bSml29623 uint32_t err_log; 6866f45ec7bSml29623 if (ereport->index == NXGE_FM_EREPORT_RDMC_RBR_PRE_PAR) 6876f45ec7bSml29623 err_log = (uint32_t)statsp-> 6886f45ec7bSml29623 rdc_stats[err_chan].errlog.pre_par.value; 6896f45ec7bSml29623 else 6906f45ec7bSml29623 err_log = (uint32_t)statsp-> 6916f45ec7bSml29623 rdc_stats[err_chan].errlog.sha_par.value; 6926f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 6936f45ec7bSml29623 DDI_NOSLEEP, 6946f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 695ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 6966f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 6976f45ec7bSml29623 ERNAME_ERR_DCHAN, DATA_TYPE_UINT8, err_chan, 698ee5416c9Syc148097 ERNAME_RDMC_PAR_ERR_LOG, DATA_TYPE_UINT8, err_log, 699ee5416c9Syc148097 NULL); 7006f45ec7bSml29623 } 7016f45ec7bSml29623 break; 70253f3d8ecSyc148097 case NXGE_FM_EREPORT_RDMC_RCR_ERR: 7036f45ec7bSml29623 { 7046f45ec7bSml29623 uint8_t err_type; 7056f45ec7bSml29623 err_type = statsp-> 7066f45ec7bSml29623 rdc_stats[err_chan].errlog.compl_err_type; 7076f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 7086f45ec7bSml29623 DDI_NOSLEEP, 7096f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 710ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 7116f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 7126f45ec7bSml29623 ERNAME_ERR_DCHAN, DATA_TYPE_UINT8, err_chan, 713ee5416c9Syc148097 ERNAME_RDC_ERR_TYPE, DATA_TYPE_UINT8, err_type, 714ee5416c9Syc148097 NULL); 7156f45ec7bSml29623 } 7166f45ec7bSml29623 break; 7176f45ec7bSml29623 7186f45ec7bSml29623 case NXGE_FM_EREPORT_ZCP_RRFIFO_UNDERRUN: 7196f45ec7bSml29623 case NXGE_FM_EREPORT_ZCP_RRFIFO_OVERRUN: 7206f45ec7bSml29623 case NXGE_FM_EREPORT_ZCP_BUFFER_OVERFLOW: 7216f45ec7bSml29623 { 7226f45ec7bSml29623 uint32_t sm; 7236f45ec7bSml29623 sm = statsp-> 7246f45ec7bSml29623 zcp_stats.errlog.state_mach.bits.ldw.state; 7256f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 7266f45ec7bSml29623 DDI_NOSLEEP, 7276f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 728ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 7296f45ec7bSml29623 sm, DATA_TYPE_UINT32, 7306f45ec7bSml29623 NULL); 7316f45ec7bSml29623 break; 7326f45ec7bSml29623 } 7336f45ec7bSml29623 case NXGE_FM_EREPORT_ZCP_CFIFO_ECC: 7346f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 7356f45ec7bSml29623 DDI_NOSLEEP, 7366f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 737ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 738ee5416c9Syc148097 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 7396f45ec7bSml29623 NULL); 7406f45ec7bSml29623 break; 7416f45ec7bSml29623 case NXGE_FM_EREPORT_ZCP_RSPFIFO_UNCORR_ERR: 7426f45ec7bSml29623 case NXGE_FM_EREPORT_ZCP_STAT_TBL_PERR: 7436f45ec7bSml29623 case NXGE_FM_EREPORT_ZCP_DYN_TBL_PERR: 7446f45ec7bSml29623 case NXGE_FM_EREPORT_ZCP_BUF_TBL_PERR: 7456f45ec7bSml29623 case NXGE_FM_EREPORT_ZCP_TT_PROGRAM_ERR: 7466f45ec7bSml29623 case NXGE_FM_EREPORT_ZCP_RSP_TT_INDEX_ERR: 7476f45ec7bSml29623 case NXGE_FM_EREPORT_ZCP_SLV_TT_INDEX_ERR: 7486f45ec7bSml29623 case NXGE_FM_EREPORT_ZCP_TT_INDEX_ERR: 7496f45ec7bSml29623 case NXGE_FM_EREPORT_RXMAC_UNDERFLOW: 7506f45ec7bSml29623 case NXGE_FM_EREPORT_RXMAC_CRC_ERRCNT_EXP: 7516f45ec7bSml29623 case NXGE_FM_EREPORT_RXMAC_LENGTH_ERRCNT_EXP: 7526f45ec7bSml29623 case NXGE_FM_EREPORT_RXMAC_VIOL_ERRCNT_EXP: 7536f45ec7bSml29623 case NXGE_FM_EREPORT_RXMAC_RXFRAG_CNT_EXP: 7546f45ec7bSml29623 case NXGE_FM_EREPORT_RXMAC_LINKFAULT_CNT_EXP: 7556f45ec7bSml29623 case NXGE_FM_EREPORT_RXMAC_ALIGN_ECNT_EXP: 7566f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 7576f45ec7bSml29623 DDI_NOSLEEP, 7586f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 759ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 7606f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 7616f45ec7bSml29623 NULL); 7626f45ec7bSml29623 break; 7636f45ec7bSml29623 case NXGE_FM_EREPORT_TDMC_MBOX_ERR: 7646f45ec7bSml29623 case NXGE_FM_EREPORT_TDMC_TX_RING_OFLOW: 7656f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 7666f45ec7bSml29623 DDI_NOSLEEP, 7676f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 768ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 7696f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 7706f45ec7bSml29623 ERNAME_ERR_DCHAN, DATA_TYPE_UINT8, err_chan, 7716f45ec7bSml29623 NULL); 7726f45ec7bSml29623 break; 7736f45ec7bSml29623 case NXGE_FM_EREPORT_TDMC_PREF_BUF_PAR_ERR: 7746f45ec7bSml29623 case NXGE_FM_EREPORT_TDMC_NACK_PREF: 7756f45ec7bSml29623 case NXGE_FM_EREPORT_TDMC_NACK_PKT_RD: 7766f45ec7bSml29623 case NXGE_FM_EREPORT_TDMC_PKT_SIZE_ERR: 7776f45ec7bSml29623 case NXGE_FM_EREPORT_TDMC_CONF_PART_ERR: 7786f45ec7bSml29623 case NXGE_FM_EREPORT_TDMC_PKT_PRT_ERR: 7796f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 7806f45ec7bSml29623 DDI_NOSLEEP, 7816f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 782ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 7836f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 7846f45ec7bSml29623 ERNAME_ERR_DCHAN, DATA_TYPE_UINT8, err_chan, 7856f45ec7bSml29623 ERNAME_TDMC_ERR_LOG1, DATA_TYPE_UINT32, 786ee5416c9Syc148097 statsp->tdc_stats[err_chan].errlog.logl.value, 7876f45ec7bSml29623 ERNAME_TDMC_ERR_LOG1, DATA_TYPE_UINT32, 7886f45ec7bSml29623 statsp->tdc_stats[err_chan].errlog.logh.value, 7896f45ec7bSml29623 DATA_TYPE_UINT32, 7906f45ec7bSml29623 NULL); 7916f45ec7bSml29623 break; 7926f45ec7bSml29623 case NXGE_FM_EREPORT_TXC_RO_CORRECT_ERR: 7936f45ec7bSml29623 case NXGE_FM_EREPORT_TXC_RO_UNCORRECT_ERR: 7946f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 7956f45ec7bSml29623 DDI_NOSLEEP, 7966f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 797ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 7986f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 7996f45ec7bSml29623 ERNAME_TXC_ROECC_ADDR, DATA_TYPE_UINT16, 8006f45ec7bSml29623 statsp->txc_stats.errlog.ro_st.roecc. 8016f45ec7bSml29623 bits.ldw.ecc_address, 8026f45ec7bSml29623 ERNAME_TXC_ROECC_DATA0, DATA_TYPE_UINT32, 8036f45ec7bSml29623 statsp->txc_stats.errlog.ro_st.d0. 8046f45ec7bSml29623 bits.ldw.ro_ecc_data0, 8056f45ec7bSml29623 ERNAME_TXC_ROECC_DATA1, DATA_TYPE_UINT32, 8066f45ec7bSml29623 statsp->txc_stats.errlog.ro_st.d1. 8076f45ec7bSml29623 bits.ldw.ro_ecc_data1, 8086f45ec7bSml29623 ERNAME_TXC_ROECC_DATA2, DATA_TYPE_UINT32, 8096f45ec7bSml29623 statsp->txc_stats.errlog.ro_st.d2. 8106f45ec7bSml29623 bits.ldw.ro_ecc_data2, 8116f45ec7bSml29623 ERNAME_TXC_ROECC_DATA3, DATA_TYPE_UINT32, 8126f45ec7bSml29623 statsp->txc_stats.errlog.ro_st.d3. 8136f45ec7bSml29623 bits.ldw.ro_ecc_data3, 8146f45ec7bSml29623 ERNAME_TXC_ROECC_DATA4, DATA_TYPE_UINT32, 8156f45ec7bSml29623 statsp->txc_stats.errlog.ro_st.d4. 8166f45ec7bSml29623 bits.ldw.ro_ecc_data4, 8176f45ec7bSml29623 NULL); 8186f45ec7bSml29623 break; 8196f45ec7bSml29623 case NXGE_FM_EREPORT_TXC_REORDER_ERR: 8206f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 8216f45ec7bSml29623 DDI_NOSLEEP, 8226f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 823ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 8246f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 8256f45ec7bSml29623 ERNAME_TXC_RO_STATE0, DATA_TYPE_UINT32, 826ee5416c9Syc148097 (uint32_t)statsp->txc_stats.errlog.ro_st.st0.value, 8276f45ec7bSml29623 ERNAME_TXC_RO_STATE1, DATA_TYPE_UINT32, 828ee5416c9Syc148097 (uint32_t)statsp->txc_stats.errlog.ro_st.st1.value, 8296f45ec7bSml29623 ERNAME_TXC_RO_STATE2, DATA_TYPE_UINT32, 830ee5416c9Syc148097 (uint32_t)statsp->txc_stats.errlog.ro_st.st2.value, 8316f45ec7bSml29623 ERNAME_TXC_RO_STATE3, DATA_TYPE_UINT32, 832ee5416c9Syc148097 (uint32_t)statsp->txc_stats.errlog.ro_st.st3.value, 8336f45ec7bSml29623 ERNAME_TXC_RO_STATE_CTL, DATA_TYPE_UINT32, 834ee5416c9Syc148097 (uint32_t)statsp->txc_stats.errlog.ro_st.ctl.value, 8356f45ec7bSml29623 ERNAME_TXC_RO_TIDS, DATA_TYPE_UINT32, 836ee5416c9Syc148097 (uint32_t)statsp->txc_stats.errlog.ro_st.tids.value, 8376f45ec7bSml29623 NULL); 8386f45ec7bSml29623 break; 8396f45ec7bSml29623 case NXGE_FM_EREPORT_TXC_SF_CORRECT_ERR: 8406f45ec7bSml29623 case NXGE_FM_EREPORT_TXC_SF_UNCORRECT_ERR: 8416f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 8426f45ec7bSml29623 DDI_NOSLEEP, 8436f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 844ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 8456f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 8466f45ec7bSml29623 ERNAME_TXC_SFECC_ADDR, DATA_TYPE_UINT32, 8476f45ec7bSml29623 statsp->txc_stats.errlog.sf_st.sfecc. 8486f45ec7bSml29623 bits.ldw.ecc_address, 8496f45ec7bSml29623 ERNAME_TXC_SFECC_DATA0, DATA_TYPE_UINT32, 8506f45ec7bSml29623 statsp->txc_stats.errlog.sf_st.d0. 8516f45ec7bSml29623 bits.ldw.sf_ecc_data0, 8526f45ec7bSml29623 ERNAME_TXC_SFECC_DATA0, DATA_TYPE_UINT32, 8536f45ec7bSml29623 statsp->txc_stats.errlog.sf_st.d1. 8546f45ec7bSml29623 bits.ldw.sf_ecc_data1, 8556f45ec7bSml29623 ERNAME_TXC_SFECC_DATA0, DATA_TYPE_UINT32, 8566f45ec7bSml29623 statsp->txc_stats.errlog.sf_st.d2. 8576f45ec7bSml29623 bits.ldw.sf_ecc_data2, 8586f45ec7bSml29623 ERNAME_TXC_SFECC_DATA0, DATA_TYPE_UINT32, 8596f45ec7bSml29623 statsp->txc_stats.errlog.sf_st.d3. 8606f45ec7bSml29623 bits.ldw.sf_ecc_data3, 8616f45ec7bSml29623 ERNAME_TXC_SFECC_DATA0, DATA_TYPE_UINT32, 8626f45ec7bSml29623 statsp->txc_stats.errlog.sf_st.d4. 8636f45ec7bSml29623 bits.ldw.sf_ecc_data4, 8646f45ec7bSml29623 NULL); 8656f45ec7bSml29623 break; 8666f45ec7bSml29623 case NXGE_FM_EREPORT_TXMAC_UNDERFLOW: 8676f45ec7bSml29623 case NXGE_FM_EREPORT_TXMAC_OVERFLOW: 8686f45ec7bSml29623 case NXGE_FM_EREPORT_TXMAC_TXFIFO_XFR_ERR: 8696f45ec7bSml29623 case NXGE_FM_EREPORT_TXMAC_MAX_PKT_ERR: 870ee5416c9Syc148097 case NXGE_FM_EREPORT_XAUI_ERR: 871ee5416c9Syc148097 case NXGE_FM_EREPORT_XFP_ERR: 8726f45ec7bSml29623 case NXGE_FM_EREPORT_SW_INVALID_PORT_NUM: 8736f45ec7bSml29623 case NXGE_FM_EREPORT_SW_INVALID_CHAN_NUM: 8746f45ec7bSml29623 case NXGE_FM_EREPORT_SW_INVALID_PARAM: 8756f45ec7bSml29623 ddi_fm_ereport_post(nxgep->dip, eclass, ena, 8766f45ec7bSml29623 DDI_NOSLEEP, 8776f45ec7bSml29623 FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, 878ee5416c9Syc148097 ERNAME_DETAILED_ERR_TYPE, DATA_TYPE_STRING, err_str, 8796f45ec7bSml29623 ERNAME_ERR_PORTN, DATA_TYPE_UINT8, err_portn, 8806f45ec7bSml29623 NULL); 8816f45ec7bSml29623 break; 8826f45ec7bSml29623 } 8836f45ec7bSml29623 } 8846f45ec7bSml29623 8856f45ec7bSml29623 void 8866f45ec7bSml29623 nxge_fm_report_error(p_nxge_t nxgep, uint8_t err_portn, uint8_t err_chan, 8876f45ec7bSml29623 nxge_fm_ereport_id_t fm_ereport_id) 8886f45ec7bSml29623 { 8896f45ec7bSml29623 nxge_fm_ereport_attr_t *fm_ereport_attr; 8906f45ec7bSml29623 8916f45ec7bSml29623 fm_ereport_attr = nxge_fm_get_ereport_attr(fm_ereport_id); 892f6485eecSyc148097 if (fm_ereport_attr != NULL && 893f6485eecSyc148097 (DDI_FM_EREPORT_CAP(nxgep->fm_capabilities))) { 8946f45ec7bSml29623 nxge_fm_ereport(nxgep, err_portn, err_chan, fm_ereport_attr); 8956f45ec7bSml29623 ddi_fm_service_impact(nxgep->dip, fm_ereport_attr->impact); 8966f45ec7bSml29623 } 8976f45ec7bSml29623 } 8986f45ec7bSml29623 8996f45ec7bSml29623 int 9006f45ec7bSml29623 fm_check_acc_handle(ddi_acc_handle_t handle) 9016f45ec7bSml29623 { 9026f45ec7bSml29623 ddi_fm_error_t err; 9036f45ec7bSml29623 9046f45ec7bSml29623 ddi_fm_acc_err_get(handle, &err, DDI_FME_VERSION); 9056f45ec7bSml29623 #ifndef NXGE_FM_S10 9066f45ec7bSml29623 ddi_fm_acc_err_clear(handle, DDI_FME_VERSION); 9076f45ec7bSml29623 #endif 9086f45ec7bSml29623 return (err.fme_status); 9096f45ec7bSml29623 } 9106f45ec7bSml29623 9116f45ec7bSml29623 int 9126f45ec7bSml29623 fm_check_dma_handle(ddi_dma_handle_t handle) 9136f45ec7bSml29623 { 9146f45ec7bSml29623 ddi_fm_error_t err; 9156f45ec7bSml29623 9166f45ec7bSml29623 ddi_fm_dma_err_get(handle, &err, DDI_FME_VERSION); 9176f45ec7bSml29623 return (err.fme_status); 9186f45ec7bSml29623 } 919