25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CDDL HEADER START
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * The contents of this file are subject to the terms of the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Common Development and Distribution License (the "License").
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * You may not use this file except in compliance with the License.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * or http://www.opensolaris.org/os/licensing.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * See the License for the specific language governing permissions
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * and limitations under the License.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * When distributing Covered Code, include this CDDL HEADER in each
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * If applicable, add the following below this CDDL HEADER, with the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * fields enclosed by brackets "[]" replaced with your own identifying
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * information: Portions Copyright [yyyy] [name of copyright owner]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CDDL HEADER END
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
c9b6d37c673213b7ad91d849a105790cb469f95bfherard * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Use is subject to license terms.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifndef _SYS_PCICMU_H
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define _SYS_PCICMU_H
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#pragma ident "%Z%%M% %I% %E% SMI"
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifdef __cplusplus
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern "C" {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#include <sys/pci.h>
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#include <sys/pci_intr_lib.h>
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#include <sys/pcicmu/pcmu_types.h>
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#include <sys/pcicmu/pcmu_ib.h>
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#include <sys/pcicmu/pcmu_cb.h>
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#include <sys/pcicmu/pcmu_ecc.h>
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#include <sys/pcicmu/pcmu_pbm.h>
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#include <sys/pcicmu/pcmu_counters.h>
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#include <sys/pcicmu/pcmu_util.h>
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#include <sys/pcicmu/pcmu_err.h>
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * The following typedef is used to represent a
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * 1275 "bus-range" property of a PCI Bus node.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlstruct pcmu_bus_range {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t lo;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t hi;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl};
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Structure to represent an entry in the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * "ranges" property of a device node.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlstruct pcmu_ranges {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t child_high;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t child_mid;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t child_low;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t parent_high;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t parent_low;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t size_high;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t size_low;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl};
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jltypedef enum {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl PCMU_NEW,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl PCMU_ATTACHED,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl PCMU_DETACHED,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl PCMU_SUSPENDED
25cf1a301a396c38e8adf52c15f537b80d2483f7jl} pcmu_state_t;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jltypedef enum {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl PCMU_PBM_OBJ,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl PCMU_ECC_OBJ,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl PCMU_CB_OBJ
25cf1a301a396c38e8adf52c15f537b80d2483f7jl} pcmu_obj_t;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jltypedef enum {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl PCMU_OBJ_INTR_ADD,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl PCMU_OBJ_INTR_REMOVE
25cf1a301a396c38e8adf52c15f537b80d2483f7jl} pcmu_obj_op_t;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCI_OPLCMU "pcicmu"
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * pcicmu soft state structure.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlstruct pcicmu {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * State flags and mutex:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl pcmu_state_t pcmu_state;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint_t pcmu_soft_state;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint_t pcmu_open_count;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl kmutex_t pcmu_mutex;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Links to other state structures:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl dev_info_t *pcmu_dip; /* devinfo structure */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl pcmu_ib_t *pcmu_ib_p; /* interrupt block */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl pcmu_cb_t *pcmu_cb_p; /* control block */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl pcmu_pbm_t *pcmu_pcbm_p; /* PBM block */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl pcmu_ecc_t *pcmu_pecc_p; /* ECC error block */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * other state info:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint_t pcmu_id; /* Jupiter device id */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t pcmu_rev; /* Bus bridge chip identification */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * pci device node properties:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl pcmu_bus_range_t pcmu_bus_range; /* "bus-range" */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl pcmu_ranges_t *pcmu_ranges; /* "ranges" data & length */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int pcmu_ranges_length;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t *pcmu_inos; /* inos from "interrupts" prop */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int pcmu_inos_len; /* "interrupts" length */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int pcmu_numproxy; /* upa interrupt proxies */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * register mapping:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl caddr_t pcmu_address[4];
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ddi_acc_handle_t pcmu_ac[4];
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Performance counters kstat.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl pcmu_cntr_pa_t pcmu_uks_pa;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl kstat_t *pcmu_uksp; /* ptr to upstream kstat */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl kmutex_t pcmu_err_mutex; /* per chip error handling mutex */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /* Fault Management support */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int pcmu_fm_cap;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ddi_iblock_cookie_t pcmu_fm_ibc;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl};
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * pcmu_soft_state values.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_SOFT_STATE_OPEN 0x01
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_SOFT_STATE_OPEN_EXCL 0x02
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_SOFT_STATE_CLOSED 0x04
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CMU-CH and PBM soft state macros:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_AP_MINOR_NUM_TO_INSTANCE(x) ((x) >> 8)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define get_pcmu_soft_state(i) \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ((pcmu_t *)ddi_get_soft_state(per_pcmu_state, (i)))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define alloc_pcmu_soft_state(i) \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ddi_soft_state_zalloc(per_pcmu_state, (i))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define free_pcmu_soft_state(i) \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ddi_soft_state_free(per_pcmu_state, (i))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DEV_TO_SOFTSTATE(dev) ((pcmu_t *)ddi_get_soft_state(per_pcmu_state, \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl PCMU_AP_MINOR_NUM_TO_INSTANCE(getminor(dev))))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ATTACH_RETCODE(obj, op, err) \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ((err) ? (obj) << 8 | (op) << 4 | (err) & 0xf : DDI_SUCCESS)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Performance counters information.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_SHIFT_PIC0 8
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_SHIFT_PIC1 0
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CMU-CH-specific register offsets & bit field positions.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Offsets of global registers:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CB_DEVICE_ID_REG_OFFSET 0x00000000 /* RAGS */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CB_CONTROL_STATUS_REG_OFFSET 0x00000010
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CMU-CH performance counters offsets.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PERF_PCR_OFFSET 0x00000100
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PERF_PIC_OFFSET 0x00000108
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Offsets of registers in the interrupt block:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_IB_OBIO_INTR_MAP_REG_OFFSET 0x00001000
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_IB_OBIO_CLEAR_INTR_REG_OFFSET 0x00001800
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Offsets of registers in the PBM block:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_PBM_REG_BASE 0x00002000 /* RAGS */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_CTRL_REG_OFFSET 0x00000000
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_ASYNC_FLT_STATUS_REG_OFFSET 0x00000010
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_ASYNC_FLT_ADDR_REG_OFFSET 0x00000018
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_DIAG_REG_OFFSET 0x00000020
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CMU-CH control register bit definitions:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CB_CONTROL_STATUS_MODE 0x0000000000000001ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CB_CONTROL_STATUS_IMPL 0xf000000000000000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CB_CONTROL_STATUS_IMPL_SHIFT 60
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CB_CONTROL_STATUS_VER 0x0f00000000000000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CB_CONTROL_STATUS_VER_SHIFT 56
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CMU-CH ECC UE AFSR bit definitions:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ECC_UE_AFSR_BYTEMASK 0x0000ffff00000000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ECC_UE_AFSR_BYTEMASK_SHIFT 32
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ECC_UE_AFSR_DW_OFFSET 0x00000000e0000000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ECC_UE_AFSR_DW_OFFSET_SHIFT 29
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ECC_UE_AFSR_ID 0x000000001f000000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ECC_UE_AFSR_ID_SHIFT 24
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ECC_UE_AFSR_BLK 0x0000000000800000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CMU-CH pci control register bits:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_CTRL_ARB_PARK 0x0000000000200000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_CTRL_WAKEUP_EN 0x0000000000000200ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_CTRL_ERR_INT_EN 0x0000000000000100ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_CTRL_ARB_EN_MASK 0x000000000000000full
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CMU-CH PCI asynchronous fault status register bit definitions:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_AFSR_PE_SHIFT 60
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_AFSR_SE_SHIFT 56
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_AFSR_E_MA 0x0000000000000008ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_AFSR_E_TA 0x0000000000000004ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_AFSR_E_RTRY 0x0000000000000002ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_AFSR_E_PERR 0x0000000000000001ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_AFSR_E_MASK 0x000000000000000full
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_AFSR_BYTEMASK 0x0000ffff00000000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_AFSR_BYTEMASK_SHIFT 32
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_AFSR_BLK 0x0000000080000000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_AFSR_MID 0x000000003e000000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_AFSR_MID_SHIFT 25
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CMU-CH PCI diagnostic register bit definitions:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_DIAG_DIS_DWSYNC 0x0000000000000010ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PBM_AFSR_TO_PRIERR(afsr) \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl (afsr >> PCMU_PCI_AFSR_PE_SHIFT & PCMU_PCI_AFSR_E_MASK)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PBM_AFSR_TO_SECERR(afsr) \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl (afsr >> PCMU_PCI_AFSR_SE_SHIFT & PCMU_PCI_AFSR_E_MASK)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ID_TO_IGN(pcmu_id) ((pcmu_ign_t)UPAID_TO_IGN(pcmu_id))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Number of dispatch target entries.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define U2U_DATA_NUM 16
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Offsets of registers in the Interrupt Dispatch Table:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define U2U_MODE_STATUS_REGISTER_OFFSET 0x00000000
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define U2U_PID_REGISTER_OFFSET 0x00000008
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define U2U_DATA_REGISTER_OFFSET 0x00000010
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Mode Status register bit definitions:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define U2U_MS_IEV 0x00000040 /* bit-6: Interrupt Extension enable */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Index number of U2U registers in OBP's "regs-property" of CMU-CH
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define REGS_INDEX_OF_U2U 3
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * The following two difinitions are used to control target id
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * for Interrupt dispatch data by software.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jltypedef struct u2u_ittrans_id {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint_t u2u_tgt_cpu_id; /* target CPU ID */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint_t u2u_rsv1; /* reserved */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl volatile uint64_t *u2u_ino_map_reg; /* u2u intr. map register */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl} u2u_ittrans_id_t;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jltypedef struct u2u_ittrans_data {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl kmutex_t u2u_ittrans_lock;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uintptr_t u2u_regs_base; /* "reg" property */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ddi_acc_handle_t u2u_acc; /* pointer to acc */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint_t u2u_port_id; /* "PID" register n U2U */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint_t u2u_board; /* "board#" property */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl u2u_ittrans_id_t u2u_ittrans_id[U2U_DATA_NUM];
25cf1a301a396c38e8adf52c15f537b80d2483f7jl} u2u_ittrans_data_t;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
c9b6d37c673213b7ad91d849a105790cb469f95bfherard/*
c9b6d37c673213b7ad91d849a105790cb469f95bfherard * Driver binding name for OPL DC system
c9b6d37c673213b7ad91d849a105790cb469f95bfherard */
c9b6d37c673213b7ad91d849a105790cb469f95bfherard#define PCICMU_OPL_DC_BINDING_NAME "pci10cf,1390"
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Offsets of registers in the interrupt block:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_IB_UPA0_INTR_MAP_REG_OFFSET 0x6000
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_IB_UPA1_INTR_MAP_REG_OFFSET 0x8000
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_IB_SLOT_CLEAR_INTR_REG_OFFSET 0x1400
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_IB_OBIO_INTR_STATE_DIAG_REG 0xA808
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_IB_INTR_RETRY_TIMER_OFFSET 0x1A00
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Offsets of registers in the ECC block:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ECC_CSR_OFFSET 0x20
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_UE_AFSR_OFFSET 0x30
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_UE_AFAR_OFFSET 0x38
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CMU-CH control register bit definitions:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CB_CONTROL_STATUS_IGN 0x0007c00000000000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CB_CONTROL_STATUS_IGN_SHIFT 46
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CB_CONTROL_STATUS_APCKEN 0x0000000000000008ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CB_CONTROL_STATUS_APERR 0x0000000000000004ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CB_CONTROL_STATUS_IAP 0x0000000000000002ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CMU-CH interrupt mapping register bit definitions:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_INTR_MAP_REG_VALID 0x0000000080000000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_INTR_MAP_REG_TID 0x000000007C000000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_INTR_MAP_REG_IGN 0x00000000000007C0ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_INTR_MAP_REG_INO 0x000000000000003full
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_INTR_MAP_REG_TID_SHIFT 26
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_INTR_MAP_REG_IGN_SHIFT 6
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CMU-CH clear interrupt register bit definitions:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CLEAR_INTR_REG_MASK 0x0000000000000003ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CLEAR_INTR_REG_IDLE 0x0000000000000000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CLEAR_INTR_REG_RECEIVED 0x0000000000000001ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CLEAR_INTR_REG_RSVD 0x0000000000000002ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CLEAR_INTR_REG_PENDING 0x0000000000000003ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CMU-CH ECC control register bit definitions:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ECC_CTRL_ECC_EN 0x8000000000000000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ECC_CTRL_UE_INTEN 0x4000000000000000ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CMU-CH ECC UE AFSR bit definitions:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ECC_UE_AFSR_PE_SHIFT 61
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ECC_UE_AFSR_SE_SHIFT 58
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ECC_UE_AFSR_E_MASK 0x0000000000000007ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_ECC_UE_AFSR_E_PIO 0x0000000000000004ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CMU-CH PCI diagnostic register bit definitions:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_DIAG_DIS_RETRY 0x0000000000000040ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_PCI_DIAG_DIS_INTSYNC 0x0000000000000020ull
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define NAMEINST(dip) ddi_driver_name(dip), ddi_get_instance(dip)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define NAMEADDR(dip) ddi_node_name(dip), ddi_get_name_addr(dip)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CMU-CH Tunables
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint32_t pcmu_spurintr_duration; /* spurious interupt duration */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern ushort_t pcmu_command_default; /* default command */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint_t ecc_error_intr_enable; /* ECC error intr */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint_t pcmu_ecc_afsr_retries; /* num ECC afsr retries */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint_t pcmu_intr_retry_intv; /* intr retry interval */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint_t pcmu_panic_on_fatal_errors; /* PANIC on fatal errors */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint_t pcmu_unclaimed_intr_max; /* Max unclaimed interrupts */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern hrtime_t pcmu_intrpend_timeout; /* intr pending timeout */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void *per_pcmu_state; /* per-pbm soft state pointer */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern kmutex_t pcmu_global_mutex; /* attach/detach common struct lock */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint64_t pcmu_errtrig_pa;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Prototypes.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_post_uninit_child(pcmu_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_kstat_init(void);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_kstat_fini(void);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_add_upstream_kstat(pcmu_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_fix_ranges(pcmu_ranges_t *, int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint_t pcmu_pbm_disable_errors(pcmu_pbm_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint32_t ib_map_reg_get_cpu(volatile uint64_t);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint64_t *ib_intr_map_reg_addr(pcmu_ib_t *, pcmu_ib_ino_t);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint64_t *ib_clear_intr_reg_addr(pcmu_ib_t *, pcmu_ib_ino_t);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_cb_setup(pcmu_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_cb_teardown(pcmu_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern int cb_register_intr(pcmu_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void cb_enable_intr(pcmu_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint64_t cb_ino_to_map_pa(pcmu_cb_t *, pcmu_ib_ino_t);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint64_t cb_ino_to_clr_pa(pcmu_cb_t *, pcmu_ib_ino_t);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern int cb_remove_xintr(pcmu_t *, dev_info_t *, dev_info_t *,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl pcmu_ib_ino_t, pcmu_ib_mondo_t);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint32_t pcmu_intr_dist_cpuid(pcmu_ib_t *, pcmu_ib_ino_info_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_ecc_setup(pcmu_ecc_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern ushort_t pcmu_ecc_get_synd(uint64_t);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_pbm_setup(pcmu_pbm_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_pbm_teardown(pcmu_pbm_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uintptr_t pcmu_ib_setup(pcmu_ib_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern int pcmu_get_numproxy(dev_info_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern int pcmu_ecc_add_intr(pcmu_t *, int, pcmu_ecc_intr_info_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_ecc_rem_intr(pcmu_t *, int, pcmu_ecc_intr_info_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern int pcmu_pbm_err_handler(dev_info_t *, ddi_fm_error_t *,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl const void *, int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_ecc_classify(uint64_t, pcmu_ecc_errstate_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern int pcmu_pbm_classify(pcmu_pbm_errstate_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern int pcmu_check_error(pcmu_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void set_intr_mapping_reg(int, uint64_t *, int);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern uint32_t pcmu_class_to_pil(dev_info_t *rdip);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern int pcmu_add_intr(dev_info_t *dip, dev_info_t *rdip,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ddi_intr_handle_impl_t *hdlp);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern int pcmu_remove_intr(dev_info_t *dip, dev_info_t *rdip,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ddi_intr_handle_impl_t *hdlp);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_intr_teardown(pcmu_t *pcmu_p);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern int u2u_translate_tgtid(pcmu_t *, uint_t, volatile uint64_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void u2u_ittrans_cleanup(u2u_ittrans_data_t *, volatile uint64_t *);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid pcmu_err_create(pcmu_t *pcmu_p);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid pcmu_err_destroy(pcmu_t *pcmu_p);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlvoid pcmu_pbm_ereport_post(dev_info_t *dip, uint64_t ena,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl pcmu_pbm_errstate_t *pbm_err);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifdef __cplusplus
25cf1a301a396c38e8adf52c15f537b80d2483f7jl}
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif /* _SYS_PCICMU_H */