3d9c56a157784839d32b49e03a3468a72c53f2dcet/*
3d9c56a157784839d32b49e03a3468a72c53f2dcet * CDDL HEADER START
3d9c56a157784839d32b49e03a3468a72c53f2dcet *
3d9c56a157784839d32b49e03a3468a72c53f2dcet * The contents of this file are subject to the terms of the
3d9c56a157784839d32b49e03a3468a72c53f2dcet * Common Development and Distribution License (the "License").
3d9c56a157784839d32b49e03a3468a72c53f2dcet * You may not use this file except in compliance with the License.
3d9c56a157784839d32b49e03a3468a72c53f2dcet *
3d9c56a157784839d32b49e03a3468a72c53f2dcet * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3d9c56a157784839d32b49e03a3468a72c53f2dcet * or http://www.opensolaris.org/os/licensing.
3d9c56a157784839d32b49e03a3468a72c53f2dcet * See the License for the specific language governing permissions
3d9c56a157784839d32b49e03a3468a72c53f2dcet * and limitations under the License.
3d9c56a157784839d32b49e03a3468a72c53f2dcet *
3d9c56a157784839d32b49e03a3468a72c53f2dcet * When distributing Covered Code, include this CDDL HEADER in each
3d9c56a157784839d32b49e03a3468a72c53f2dcet * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
3d9c56a157784839d32b49e03a3468a72c53f2dcet * If applicable, add the following below this CDDL HEADER, with the
3d9c56a157784839d32b49e03a3468a72c53f2dcet * fields enclosed by brackets "[]" replaced with your own identifying
3d9c56a157784839d32b49e03a3468a72c53f2dcet * information: Portions Copyright [yyyy] [name of copyright owner]
3d9c56a157784839d32b49e03a3468a72c53f2dcet *
3d9c56a157784839d32b49e03a3468a72c53f2dcet * CDDL HEADER END
3d9c56a157784839d32b49e03a3468a72c53f2dcet */
3d9c56a157784839d32b49e03a3468a72c53f2dcet/*
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
3d9c56a157784839d32b49e03a3468a72c53f2dcet */
3d9c56a157784839d32b49e03a3468a72c53f2dcet
3d9c56a157784839d32b49e03a3468a72c53f2dcet/*
3d9c56a157784839d32b49e03a3468a72c53f2dcet * The file has been code generated. Do NOT modify this file directly. Please
3d9c56a157784839d32b49e03a3468a72c53f2dcet * use the sun4v PCIe FMA code generation tool.
3d9c56a157784839d32b49e03a3468a72c53f2dcet *
3d9c56a157784839d32b49e03a3468a72c53f2dcet * This file was generated for the following platforms:
3d9c56a157784839d32b49e03a3468a72c53f2dcet * - Fire
3d9c56a157784839d32b49e03a3468a72c53f2dcet * - N2PIU
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu * - Rainbow Falls
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu * - Victoria Falls
3d9c56a157784839d32b49e03a3468a72c53f2dcet */
3d9c56a157784839d32b49e03a3468a72c53f2dcet
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango#include <sys/pcie_impl.h>
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango
3d9c56a157784839d32b49e03a3468a72c53f2dcet/* ARGSUSED */
3d9c56a157784839d32b49e03a3468a72c53f2dcetstatic int
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elangopx_cb_epkt_severity(dev_info_t *dip, ddi_fm_error_t *derr, px_rc_err_t *epkt,
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango pf_data_t *pfd_p)
3d9c56a157784839d32b49e03a3468a72c53f2dcet{
3d9c56a157784839d32b49e03a3468a72c53f2dcet int err = 0;
3d9c56a157784839d32b49e03a3468a72c53f2dcet
3d9c56a157784839d32b49e03a3468a72c53f2dcet /* STOP bit indicates a secondary error. Panic if it is set */
3d9c56a157784839d32b49e03a3468a72c53f2dcet if (epkt->rc_descr.STOP == 1)
3d9c56a157784839d32b49e03a3468a72c53f2dcet return (PX_PANIC);
3d9c56a157784839d32b49e03a3468a72c53f2dcet
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.op) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case OP_DMA:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.phase) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_ADDR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_WRITE:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_DATA:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_INT:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_READ:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_RDWR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_UNKNOWN:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_WRITE:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_TO:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_READ:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_WRITE:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_UE:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_READ:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_READ:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_READ:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* PH */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case OP_PIO:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.phase) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_ADDR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_UNMAP:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_READ:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_WRITE:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_DATA:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_INT:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_RDWR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_WRITE:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_WRITE:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_READ:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_WRITE:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_TO:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_RDWR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* PH */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case OP_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.phase) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_ADDR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_UNMAP:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_RDWR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_DATA:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_INT:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_UNKNOWN:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_UE:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* PH */
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* OP */
3d9c56a157784839d32b49e03a3468a72c53f2dcet
3d9c56a157784839d32b49e03a3468a72c53f2dcet return (err);
3d9c56a157784839d32b49e03a3468a72c53f2dcet}
3d9c56a157784839d32b49e03a3468a72c53f2dcet
3d9c56a157784839d32b49e03a3468a72c53f2dcet
3d9c56a157784839d32b49e03a3468a72c53f2dcet/* ARGSUSED */
3d9c56a157784839d32b49e03a3468a72c53f2dcetstatic int
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elangopx_mmu_epkt_severity(dev_info_t *dip, ddi_fm_error_t *derr, px_rc_err_t *epkt,
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango pf_data_t *pfd_p)
3d9c56a157784839d32b49e03a3468a72c53f2dcet{
3d9c56a157784839d32b49e03a3468a72c53f2dcet int err = 0;
3d9c56a157784839d32b49e03a3468a72c53f2dcet
3d9c56a157784839d32b49e03a3468a72c53f2dcet /* STOP bit indicates a secondary error. Panic if it is set */
3d9c56a157784839d32b49e03a3468a72c53f2dcet if (epkt->rc_descr.STOP == 1)
3d9c56a157784839d32b49e03a3468a72c53f2dcet return (PX_PANIC);
3d9c56a157784839d32b49e03a3468a72c53f2dcet
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.op) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case OP_BYPASS:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.phase) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_ADDR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_RDWR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_NO_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_NO_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* PH */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case OP_TBW:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.phase) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case PH_ADDR:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.cond) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_UNKNOWN:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_UNKNOWN:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_UNMAP:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_UNKNOWN:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* CND */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_DATA:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_INT:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_UNKNOWN:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* PH */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case OP_XLAT:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.phase) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_ADDR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_RDWR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_NO_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_PROT:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_RDWR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_NO_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_UNMAP:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_RDWR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_NO_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_DATA:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_INT:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_UNKNOWN:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_INV:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_RDWR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_NO_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_NO_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_PROT:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_RDWR:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_NO_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_WRITE:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_NO_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* PH */
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* OP */
3d9c56a157784839d32b49e03a3468a72c53f2dcet
3d9c56a157784839d32b49e03a3468a72c53f2dcet if (epkt->rc_descr.D && (err & (PX_PANIC | PX_PROTECTED)) &&
3d9c56a157784839d32b49e03a3468a72c53f2dcet px_mmu_handle_lookup(dip, derr, epkt) == PF_HDL_FOUND)
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_NO_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet
3d9c56a157784839d32b49e03a3468a72c53f2dcet return (err);
3d9c56a157784839d32b49e03a3468a72c53f2dcet}
3d9c56a157784839d32b49e03a3468a72c53f2dcet
3d9c56a157784839d32b49e03a3468a72c53f2dcet
3d9c56a157784839d32b49e03a3468a72c53f2dcet/* ARGSUSED */
3d9c56a157784839d32b49e03a3468a72c53f2dcetstatic int
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elangopx_intr_epkt_severity(dev_info_t *dip, ddi_fm_error_t *derr, px_rc_err_t *epkt,
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango pf_data_t *pfd_p)
3d9c56a157784839d32b49e03a3468a72c53f2dcet{
3d9c56a157784839d32b49e03a3468a72c53f2dcet int err = 0;
3d9c56a157784839d32b49e03a3468a72c53f2dcet
3d9c56a157784839d32b49e03a3468a72c53f2dcet /* STOP bit indicates a secondary error. Panic if it is set */
3d9c56a157784839d32b49e03a3468a72c53f2dcet if (epkt->rc_descr.STOP == 1)
3d9c56a157784839d32b49e03a3468a72c53f2dcet return (PX_PANIC);
3d9c56a157784839d32b49e03a3468a72c53f2dcet
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.op) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case OP_FIXED:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.phase) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case PH_UNKNOWN:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.cond) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_ILL:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_INGRESS:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* CND */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* PH */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case OP_MSI32:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.phase) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_DATA:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_INT:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* PH */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case OP_MSI64:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.phase) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_DATA:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_INT:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* PH */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case OP_MSIQ:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.phase) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case PH_DATA:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.cond) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_INT:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_UNKNOWN:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* CND */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_OV:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_IRR:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = px_intr_handle_errors(dip, derr,
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango epkt, pfd_p);
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* PH */
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet case OP_PCIEMSG:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.phase) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case PH_UNKNOWN:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.cond) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case CND_ILL:
3d9c56a157784839d32b49e03a3468a72c53f2dcet switch (epkt->rc_descr.dir) {
3d9c56a157784839d32b49e03a3468a72c53f2dcet case DIR_INGRESS:
3d9c56a157784839d32b49e03a3468a72c53f2dcet err = PX_PANIC;
3d9c56a157784839d32b49e03a3468a72c53f2dcet break;
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* CND */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* PH */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case OP_UNKNOWN:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.phase) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case PH_DATA:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.cond) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_INT:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_UNKNOWN:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_ILL:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_IRR:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* CND */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case PH_UNKNOWN:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.cond) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_ILL:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_IRR:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* CND */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* PH */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* OP */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu return (err);
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu}
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu/* ARGSUSED */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lustatic int
fc256490629fe68815f7e0f23cf9b3545720cfacJason Beloropx_port_epkt_severity(dev_info_t *dip, ddi_fm_error_t *derr, px_rc_err_t *epkt,
fc256490629fe68815f7e0f23cf9b3545720cfacJason Beloro pf_data_t *pfd_p)
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu{
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu int err = 0;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu /* STOP bit indicates a secondary error. Panic if it is set */
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango if (epkt->rc_descr.STOP == 1)
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu return (PX_PANIC);
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.op) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case OP_DMA:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.phase) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case PH_DATA:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.cond) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_INT:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_READ:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango PFD_SET_AFFECTED_FLAG(pfd_p,
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango PF_AFFECTED_BDF);
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango PFD_SET_AFFECTED_BDF(pfd_p,
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango (uint16_t)epkt->reserved);
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* CND */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* PH */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case OP_LINK:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.phase) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case PH_FC:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.cond) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_TO:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_IRR:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango PFD_SET_AFFECTED_FLAG(pfd_p,
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango PF_AFFECTED_BDF);
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango PFD_SET_AFFECTED_BDF(pfd_p,
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango (uint16_t)epkt->reserved);
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* CND */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* PH */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case OP_PIO:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.phase) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case PH_DATA:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.cond) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_INT:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_READ:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango PFD_SET_AFFECTED_FLAG(pfd_p,
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango PF_AFFECTED_BDF);
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango PFD_SET_AFFECTED_BDF(pfd_p,
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango (uint16_t)epkt->reserved);
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_UNKNOWN:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango PFD_SET_AFFECTED_FLAG(pfd_p,
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango PF_AFFECTED_BDF);
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango PFD_SET_AFFECTED_BDF(pfd_p,
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango (uint16_t)epkt->reserved);
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* CND */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case PH_IRR:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.cond) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_INV:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_RDWR:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_RCA:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_WRITE:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = px_port_handle_errors(dip, derr,
fc256490629fe68815f7e0f23cf9b3545720cfacJason Beloro epkt, pfd_p);
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_RUR:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_WRITE:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = px_port_handle_errors(dip, derr,
fc256490629fe68815f7e0f23cf9b3545720cfacJason Beloro epkt, pfd_p);
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_TO:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_WRITE:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_UC:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_IRR:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_NO_PANIC;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* CND */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* PH */
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case OP_UNKNOWN:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.phase) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case PH_DATA:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.cond) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case CND_INT:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu switch (epkt->rc_descr.dir) {
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu case DIR_UNKNOWN:
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu err = PX_PANIC;
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango PFD_SET_AFFECTED_FLAG(pfd_p,
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango PF_AFFECTED_BDF);
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango PFD_SET_AFFECTED_BDF(pfd_p,
d0f40dc6a997c84bacf5f9ba83d57a95495c399bKrishna Elango (uint16_t)epkt->reserved);
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu break;
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu } /* DIR */
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* CND */
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* PH */
3d9c56a157784839d32b49e03a3468a72c53f2dcet } /* OP */
3d9c56a157784839d32b49e03a3468a72c53f2dcet
3d9c56a157784839d32b49e03a3468a72c53f2dcet return (err);
3d9c56a157784839d32b49e03a3468a72c53f2dcet}