px_err.c revision d0f40dc6a997c84bacf5f9ba83d57a95495c399b
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * CDDL HEADER START
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * The contents of this file are subject to the terms of the
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * Common Development and Distribution License (the "License").
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * You may not use this file except in compliance with the License.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * See the License for the specific language governing permissions
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * and limitations under the License.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * When distributing Covered Code, include this CDDL HEADER in each
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * If applicable, add the following below this CDDL HEADER, with the
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * fields enclosed by brackets "[]" replaced with your own identifying
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * information: Portions Copyright [yyyy] [name of copyright owner]
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * CDDL HEADER END
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * sun4v Fire Error Handling
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftstatic void px_err_fill_pfd(dev_info_t *dip, pf_data_t *pfd_p,
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftstatic uint_t px_err_intr(px_fault_t *fault_p, px_rc_err_t *epkt);
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftstatic int px_err_epkt_severity(px_t *px_p, ddi_fm_error_t *derr,
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftstatic void px_err_log_handle(dev_info_t *dip, px_rc_err_t *epkt,
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftstatic void px_err_send_epkt_erpt(dev_info_t *dip, px_rc_err_t *epkt,
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift boolean_t is_block_pci, int err, ddi_fm_error_t *derr,
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftstatic int px_cb_epkt_severity(dev_info_t *dip, ddi_fm_error_t *derr,
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftstatic int px_mmu_epkt_severity(dev_info_t *dip, ddi_fm_error_t *derr,
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftstatic int px_intr_epkt_severity(dev_info_t *dip, ddi_fm_error_t *derr,
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftstatic int px_port_epkt_severity(dev_info_t *dip, ddi_fm_error_t *derr,
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftstatic int px_pcie_epkt_severity(dev_info_t *dip, ddi_fm_error_t *derr,
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftstatic int px_intr_handle_errors(dev_info_t *dip, ddi_fm_error_t *derr,
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftstatic int px_port_handle_errors(dev_info_t *dip, ddi_fm_error_t *derr,
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftstatic void px_fix_legacy_epkt(dev_info_t *dip, ddi_fm_error_t *derr,
#include "px_err_gen.c"
return (DDI_INTR_UNCLAIMED);
return (DDI_INTR_UNCLAIMED);
return (PX_NO_ERROR);
case BLOCK_MMU:
case BLOCK_PCIE:
DDI_SUCCESS) {
case BLOCK_HOSTBUS:
case BLOCK_INTR:
case BLOCK_PORT:
int fab_err = 0;
return (fab_err);
static uint_t
goto done;
return (DDI_INTR_UNCLAIMED);
case BLOCK_INTR:
case BLOCK_PCIE:
done:
return (DDI_INTR_CLAIMED);
int err = 0;
case DDI_FM_ERR_EXPECTED:
case DDI_FM_ERR_PEEK:
case DDI_FM_ERR_POKE:
if (px_legacy_epkt)
case BLOCK_HOSTBUS:
case BLOCK_MMU:
case BLOCK_INTR:
case BLOCK_PORT:
case BLOCK_PCIE:
err = 0;
} else if (err == 0) {
return (err);
if (is_block_pci) {
err);
char *msg)
if (is_block_pci) {
case BLOCK_HOSTBUS:
case OP_DMA:
case PH_UNKNOWN:
case CND_UNKNOWN:
case DIR_RESERVED:
case BLOCK_MMU:
case OP_XLAT:
case PH_DATA:
case CND_PROT:
case DIR_UNKNOWN:
case PH_IRR:
case CND_RESERVED:
case DIR_IRR:
case BLOCK_INTR:
case OP_MSIQ:
case PH_UNKNOWN:
case CND_ILL:
case DIR_RESERVED:
case CND_IRR:
case DIR_IRR:
case OP_RESERVED:
case PH_UNKNOWN:
case CND_ILL:
case DIR_IRR:
case PH_DATA:
case CND_INT:
case DIR_UNKNOWN:
goto done;
goto done;
goto done;
case CND_RCA:
case CND_RUR:
done:
return (sts);
int sts;
return (PX_NO_PANIC);
return (PX_PANIC);
if (temp) {
bdf));