root/usr/src/uts/sun4v/io/px/px_err.h
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _SYS_PX_ERR_H
#define _SYS_PX_ERR_H

#ifdef  __cplusplus
extern "C" {
#endif

/* error packet definitions */

/* Block Definitions */
#define BLOCK_RSVD              0x0
#define BLOCK_HOSTBUS           0x1
#define BLOCK_MMU               0x2
#define BLOCK_INTR              0x3
#define BLOCK_PCIE              0x4
#define BLOCK_PORT              0x5
#define BLOCK_UNKNOWN           0xe

/* Op definitions for HOSTBUS */
#define OP_RESERVED             0x0
#define OP_PIO                  0x1
#define OP_DMA                  0x2
#define OP_UNKNOWN              0xe

/* Op definitions for MMU */
#define OP_RESERVED             0x0
#define OP_XLAT                 0x1
#define OP_BYPASS               0x2
#define OP_TBW                  0x3
#define OP_UNKNOWN              0xe

/* Op definitions for INTR */
#define OP_RESERVED             0x0
#define OP_MSI32                0x1
#define OP_MSI64                0x2
#define OP_MSIQ                 0x3
#define OP_PCIEMSG              0x4
#define OP_FIXED                0x5
#define OP_UNKNOWN              0xe

/* Op definitions for PORT */
#define OP_RESERVED             0x0
#define OP_PIO                  0x1
#define OP_DMA                  0x2
#define OP_LINK                 0x3
#define OP_UNKNOWN              0xe

/* Phase definitons */
#define PH_RESERVED             0x0
#define PH_ADDR                 0x1
#define PH_DATA                 0x2
#define PH_UNKNOWN              0xe
#define PH_IRR                  0xf

/* Phase definitions for PORT/Link */
#define PH_FC                   0x1


/* Condition definitions for any major Block/Op/Phase */
#define CND_RESERVED            0x0
#define CND_ILL                 0x1
#define CND_UNMAP               0x2
#define CND_INT                 0x3
#define CND_UE                  0x4
#define CND_INV                 0x6
#define CND_UNKNOWN             0xe
#define CND_IRR                 0xf

/* Additional condition definitions for INTR Block MSIQ phase */
#define CND_OV                  0x5

/* Additional condition definitions for MMU|INTR Block ADDR phase */
#define CND_PROT                0x5

/* Additional condition definitions for DATA phase */
#define CND_TO                  0x5

/* Additional condition definitions for Port Link phase */
#define CND_RCA                 0x7
#define CND_RUR                 0x8
#define CND_UC                  0x9

/* Dir definitions for HOSTBUS & MMU */
#define DIR_RESERVED            0x0
#define DIR_READ                0x1
#define DIR_WRITE               0x2
#define DIR_RDWR                0x3
#define DIR_INGRESS             0x4
#define DIR_EGRESS              0x5
#define DIR_LINK                0x6
#define DIR_UNKNOWN             0xe
#define DIR_IRR                 0xf

#define PX_FM_RC_UNRECOG        "fire.epkt"
#define EPKT_SYSINO             "sysino"
#define EPKT_EHDL               "ehdl"
#define EPKT_STICK              "stick"
#define EPKT_DW0                "dw0"
#define EPKT_DW1                "dw1"
#define EPKT_DW2                "dw2"
#define EPKT_DW3                "dw3"
#define EPKT_DW4                "dw4"
#define EPKT_RC_DESCR           "rc_descr"
#define EPKT_PEC_DESCR          "pec_descr"

#ifndef _ESC
typedef struct root_complex {
        uint64_t  sysino;
        uint64_t  ehdl;
        uint64_t  stick;
        struct  {
#if defined(_BIT_FIELDS_LTOH)
                uint32_t S      : 1,    /* Also the "Q" flag */
                        M       : 1,
                        D       : 1,
                        R       : 1,
                        H       : 1,
                        C       : 1,
                        I       : 1,
                        B       : 1,
                                : 3,
                        STOP    : 1,
                        dir     : 4,
                        cond    : 4,
                        phase   : 4,
                        op      : 4,
                        block   : 4;
#elif defined(_BIT_FIELDS_HTOL)
                uint32_t block  : 4,
                        op      : 4,
                        phase   : 4,
                        cond    : 4,
                        dir     : 4,
                        STOP    : 1,
                                : 3,
                        B       : 1,
                        I       : 1,
                        C       : 1,
                        H       : 1,
                        R       : 1,
                        D       : 1,
                        M       : 1,
                        S       : 1;    /* Also the "Q" flag */
#else
#error "bit field not defined"
#endif
        } rc_descr;
        uint32_t  size;                 /* Also the EQ Num */
        uint64_t  addr;
        uint64_t  hdr[2];
        uint64_t  reserved;             /* Contains Port */
} px_rc_err_t;

typedef struct pec_block_err {
        uint64_t  sysino;
        uint64_t  ehdl;
        uint64_t  stick;
        struct  {
                uint32_t block  : 4,
                        rsvd1   : 12,
                        dir     : 4,
                                : 3,
                        Z       : 1,
                        S       : 1,
                        R       : 1,
                        I       : 1,
                        H       : 1,
                        C       : 1,
                        U       : 1,
                        E       : 1,
                        P       : 1;
        } pec_descr;
        uint16_t  pci_err_status;
        uint16_t  pcie_err_status;
        uint32_t  ce_reg_status;
        uint32_t  ue_reg_status;
        uint64_t  hdr[2];
        uint32_t  err_src_reg;
        uint32_t  root_err_status;
} px_pec_err_t;
#endif  /* _ESC */

#ifdef  __cplusplus
}
#endif

#endif  /* _SYS_PX_ERR_H */