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/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Use is subject to license terms.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifndef _SYS_PCMU_CB_H
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define _SYS_PCMU_CB_H
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#pragma ident "%Z%%M% %I% %E% SMI"
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifdef __cplusplus
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern "C" {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jlenum pcmu_cb_nintr_index {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl CBNINTR_PBM = 0, /* not shared */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl CBNINTR_UE = 1, /* shared */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl CBNINTR_CE = 2, /* shared */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl CBNINTR_POWER_FAIL = 3, /* shared */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl CBNINTR_THERMAL = 4, /* shared */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl CBNINTR_MAX /* max */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl};
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * control block soft state structure:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlstruct pcmu_cb {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl pcmu_t *pcb_pcmu_p;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl pcmu_ign_t pcb_ign; /* interrupt grp# */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl kmutex_t pcb_intr_lock; /* guards add/rem intr and intr dist */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t pcb_no_of_inos; /* # of actual inos, including PBM */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t pcb_inos[CBNINTR_MAX]; /* subset of pcmu_p->pcmu_inos array */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint64_t pcb_base_pa; /* PA of CSR bank, 2nd "reg" */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint64_t pcb_map_pa; /* map reg base PA */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint64_t pcb_clr_pa; /* clr reg base PA */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint64_t pcb_obsta_pa; /* sta reg base PA */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint64_t *pcb_imr_save;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl caddr_t pcb_ittrans_cookie; /* intr tgt translation */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl};
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PCMU_CB_INO_TO_MONDO(pcb_p, ino) \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ((pcb_p)->pcb_ign << PCMU_INO_BITS | (ino))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Prototypes.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_cb_create(pcmu_t *pcmu_p);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_cb_destroy(pcmu_t *pcmu_p);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_cb_suspend(pcmu_cb_t *cb_p);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_cb_resume(pcmu_cb_t *cb_p);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_cb_enable_nintr(pcmu_t *pcmu_p, pcmu_cb_nintr_index_t idx);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_cb_disable_nintr(pcmu_cb_t *cb_p,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl pcmu_cb_nintr_index_t idx, int wait);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_cb_clear_nintr(pcmu_cb_t *cb_p, pcmu_cb_nintr_index_t idx);
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern void pcmu_cb_intr_dist(void *arg);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifdef __cplusplus
25cf1a301a396c38e8adf52c15f537b80d2483f7jl}
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif /* _SYS_PCMU_CB_H */