root/usr/src/lib/libprtdiag_psr/sparc/opl/common/opl_picl.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.
 *
 * Opl Platform header file.
 *
 *      called when :
 *      machine_type == MTYPE_OPL
 */

#ifndef _OPL_PICL_H
#define _OPL_PICL_H

#ifdef __cplusplus
extern "C" {
#endif

/*
 * Property names
 */
#define OBP_PROP_REG                    "reg"
#define OBP_PROP_CLOCK_FREQ             "clock-frequency"
#define OBP_PROP_BOARD_NUM              "board#"
#define OBP_PROP_REVISION_ID            "revision-id"
#define OBP_PROP_VENDOR_ID              "vendor-id"
#define OBP_PROP_DEVICE_ID              "device-id"
#define OBP_PROP_VERSION_NUM            "version#"
#define OBP_PROP_BOARD_TYPE             "board_type"
#define OBP_PROP_ECACHE_SIZE            "ecache-size"
#define OBP_PROP_IMPLEMENTATION         "implementation#"
#define OBP_PROP_MASK                   "mask#"
#define OBP_PROP_COMPATIBLE             "compatible"
#define OBP_PROP_BANNER_NAME            "banner-name"
#define OBP_PROP_MODEL                  "model"
#define OBP_PROP_66MHZ_CAPABLE          "66mhz-capable"
#define OBP_PROP_VERSION                "version"
#define OBP_PROP_INSTANCE               "instance"

/* PCI BUS types */

#define PCI_UNKN        -1
#define PCI     10
#define PCIX    20
#define PCIE    30

/* PCI device defines */

#define PCI_CONF_VENID          0x0             /* vendor id, 2 bytes */
#define PCI_CONF_DEVID          0x2             /* device id, 2 bytes */
#define PCI_CONF_CAP_PTR        0x34            /* 1 byte capability pointer */
#define PCI_CAP_ID_PCI_E        0x10            /* PCI Express supported */
#define PCIE_LINKCAP            0x0C            /* Link Capability */
#define PCIE_LINKSTS            0x12            /* Link Status */
#define PCI_CAP_MASK            0xff            /* CAP Mask */
#define PCI_DEV_MASK            0xF800          /* Dev# Mask */
#define PCI_FUNC_MASK           0x700           /* Func# Mask */
#define PCI_BUS_MASK            0x1ff0000       /* Bus# Mask */
#define PCI_LINK_MASK           0x1f            /* Link Mask */

#define PCI_LINK_SHIFT          4               /* Link shift Bits */
#define PCI_FREQ_33             33              /* legacy PCI default freq */
#define PCI_FREQ_66             66              /* PCI default freq */
#define PCI_FREQ_100            100

/* PCI frequencies */

#define PCI_FREQ_133            133
#define PCI_FREQ_266            266
#define PCI_FREQ_533            533

/* PCI frequency shift bits */

#define PCI_SHIFT_133           17
#define PCI_SHIFT_266           30
#define PCI_SHIFT_533           31

/* PCI frequency modes */

#define PCI_MODE_66             1
#define PCI_MODE_100            2
#define PCI_MODE_133            3

/* PCI frequency SEC status masks */

#define PCI_SEC_133             0x2
#define PCI_SEC_266             0x4000
#define PCI_SEC_533             0x8000
#define PCI_LEAF_ULONG          1UL


/* Invalid property value */
#define PROP_INVALID            -1

/* Macros */

#define IS_PCI(name) \
        (((name) != NULL) && (strncmp((name), "pci", 3) == 0))

#define IS_EBUS(class) \
        (((class) != NULL) && (strncmp((class), "ebus", 4) == 0))

#define ROUND_TO_MHZ(x) (((x) + 500000)/ 1000000)

#define PRINT_FREQ_FMT(arg_1, arg_2) \
                if (((arg_1) != 0) && \
                        ((arg_2) != 0)) \
                                log_printf("%4d, %4d  ", (arg_1), (arg_2)); \
                        else if ((arg_2) != 0) \
                                log_printf("  --, %4d  ", (arg_2)); \
                        else if ((arg_1) != 0) \
                                log_printf("%4d,  -- ", (arg_1)); \
                        else \
                                log_printf("  --,  --  ");

#define PRINT_FMT(arg_1, arg_2) \
                if (((arg_1) != PROP_INVALID) && \
                        ((arg_2) != PROP_INVALID)) \
                                log_printf("%4d, %4d  ", (arg_1), (arg_2)); \
                        else if ((arg_2) != PROP_INVALID) \
                                log_printf("  --, %4d  ", (arg_2)); \
                        else if ((arg_1) != PROP_INVALID) \
                                log_printf("%4d,  -- ", (arg_1)); \
                        else \
                                log_printf("  --,  --  ");



#ifdef __cplusplus
}
#endif

#endif /* _OPL_PICL_H */