3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * CDDL HEADER START
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * The contents of this file are subject to the terms of the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Common Development and Distribution License (the "License").
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * You may not use this file except in compliance with the License.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * or http://www.opensolaris.org/os/licensing.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * See the License for the specific language governing permissions
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * and limitations under the License.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * When distributing Covered Code, include this CDDL HEADER in each
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * If applicable, add the following below this CDDL HEADER, with the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * fields enclosed by brackets "[]" replaced with your own identifying
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * information: Portions Copyright [yyyy] [name of copyright owner]
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * CDDL HEADER END
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Use is subject to license terms.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#pragma ident "%Z%%M% %I% %E% SMI"
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <hpi_vir.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <hxge_defs.h>
fe930412c257f961ae67039de3b164b83717976aqs#include <hxge_impl.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Set up a logical group number that a logical device belongs to.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_fzc_ldg_num_set(hpi_handle_t handle, uint8_t ld, uint8_t ldg)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ld_grp_ctrl_t gnum;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (!LD_VALID(ld)) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HPI_ERROR_MSG((handle.function, HPI_ERR_CTL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs " hpi_fzc_ldg_num_set ld <0x%x>", ld));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_FAILURE | HPI_VIR_LD_INVALID(ld));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (!LDG_VALID(ldg)) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HPI_ERROR_MSG((handle.function, HPI_ERR_CTL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs " hpi_fzc_ldg_num_set ldg <0x%x>", ldg));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_FAILURE | HPI_VIR_LDG_INVALID(ld));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs gnum.value = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs gnum.bits.num = ldg;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_WR32(handle, LD_GRP_CTRL + LD_NUM_OFFSET(ld), gnum.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_SUCCESS);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Get device state vectors.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_ldsv_ldfs_get(hpi_handle_t handle, uint8_t ldg, uint32_t *vector0_p,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t *vector1_p)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs int status;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if ((status = hpi_ldsv_get(handle, ldg, VECTOR0, vector0_p))) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (status);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if ((status = hpi_ldsv_get(handle, ldg, VECTOR1, vector1_p))) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (status);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_SUCCESS);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Get device state vectors.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_ldsv_get(hpi_handle_t handle, uint8_t ldg, ldsv_type_t vector,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t *ldf_p)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t offset;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (!LDG_VALID(ldg)) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HPI_ERROR_MSG((handle.function, HPI_ERR_CTL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs " hpi_ldsv_get Invalid Input ldg <0x%x>", ldg));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_FAILURE | HPI_VIR_LDG_INVALID(ldg));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs switch (vector) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case VECTOR0:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs offset = LDSV0 + LDSV_OFFSET(ldg);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs case VECTOR1:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs offset = LDSV1 + LDSV_OFFSET(ldg);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs break;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs default:
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HPI_ERROR_MSG((handle.function, HPI_ERR_CTL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs " hpi_ldsv_get Invalid Input: ldsv type <0x%x>", vector));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_FAILURE | HPI_VIR_LDSV_INVALID(vector));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_RD32(handle, offset, ldf_p);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_SUCCESS);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Set the mask bits for both ldf0 and ldf1.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_intr_mask_set(hpi_handle_t handle, uint8_t ld, uint8_t ldf_mask)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t offset;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (!LD_VALID(ld)) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HPI_ERROR_MSG((handle.function, HPI_ERR_CTL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs " hpi_intr_mask_set ld", ld));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_FAILURE | HPI_VIR_LD_INVALID(ld));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ldf_mask &= LD_IM_MASK;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs offset = LDSV_OFFSET_MASK(ld);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HPI_DEBUG_MSG((handle.function, HPI_VIR_CTL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "hpi_intr_mask_set: ld %d offset 0x%0x mask 0x%x",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ld, offset, ldf_mask));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_WR32(handle, offset, (uint32_t)ldf_mask);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_SUCCESS);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Set interrupt timer and arm bit.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_intr_ldg_mgmt_set(hpi_handle_t handle, uint8_t ldg, boolean_t arm,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint8_t timer)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ld_intr_mgmt_t mgm;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (!LDG_VALID(ldg)) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HPI_ERROR_MSG((handle.function, HPI_ERR_CTL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs " hpi_intr_ldg_mgmt_set Invalid Input: ldg <0x%x>", ldg));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_FAILURE | HPI_VIR_LDG_INVALID(ldg));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (!LD_INTTIMER_VALID(timer)) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HPI_ERROR_MSG((handle.function, HPI_ERR_CTL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs " hpi_intr_ldg_mgmt_set Invalid Input"
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs " timer <0x%x>", timer));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_FAILURE | HPI_VIR_INTM_TM_INVALID(ldg));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (arm) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs mgm.bits.arm = 1;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs } else {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_RD32(handle, LD_INTR_MGMT + LDSV_OFFSET(ldg),
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs &mgm.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs mgm.bits.timer = timer;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_WR32(handle, LD_INTR_MGMT + LDSV_OFFSET(ldg), mgm.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HPI_DEBUG_MSG((handle.function, HPI_VIR_CTL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs " hpi_intr_ldg_mgmt_set: ldg %d reg offset 0x%x",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ldg, LD_INTR_MGMT + LDSV_OFFSET(ldg)));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_SUCCESS);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Set the timer resolution.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_fzc_ldg_timer_res_set(hpi_handle_t handle, uint32_t res)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ld_intr_tim_res_t tm;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (res > LDGTITMRES_RES_MASK) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HPI_ERROR_MSG((handle.function, HPI_ERR_CTL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs " hpi_fzc_ldg_timer_res_set Invalid Input: res <0x%x>",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs res));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_FAILURE | HPI_VIR_TM_RES_INVALID);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tm.value = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs tm.bits.res = res;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_WR32(handle, LD_INTR_TIM_RES, tm.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_SUCCESS);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Set the system interrupt data.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_fzc_sid_set(hpi_handle_t handle, fzc_sid_t sid)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs sid_t sd;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (!LDG_VALID(sid.ldg)) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HPI_ERROR_MSG((handle.function, HPI_ERR_CTL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs " hpi_fzc_sid_set Invalid Input: ldg <0x%x>", sid.ldg));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_FAILURE | HPI_VIR_LDG_INVALID(sid.ldg));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (!SID_VECTOR_VALID(sid.vector)) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HPI_ERROR_MSG((handle.function, HPI_ERR_CTL,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs " hpi_fzc_sid_set Invalid Input: vector <0x%x>",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs sid.vector));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_FAILURE | HPI_VIR_SID_VEC_INVALID(sid.vector));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs sd.value = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs sd.bits.data = sid.vector;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_WR32(handle, SID + LDG_SID_OFFSET(sid.ldg), sd.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_SUCCESS);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Mask/Unmask the device error mask bits.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_fzc_sys_err_mask_set(hpi_handle_t handle, boolean_t mask)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs dev_err_mask_t dev_mask;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs dev_mask.value = 0;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (mask) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs dev_mask.bits.tdc_mask0 = 1;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs dev_mask.bits.rdc_mask0 = 1;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs dev_mask.bits.vnm_pio_mask1 = 1;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs dev_mask.bits.tdc_mask1 = 1;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs dev_mask.bits.rdc_mask1 = 1;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs dev_mask.bits.peu_mask1 = 1;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs }
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_WR32(handle, DEV_ERR_MASK, dev_mask.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_SUCCESS);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Get the system error stats.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_status_t
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshpi_fzc_sys_err_stat_get(hpi_handle_t handle, dev_err_stat_t *statp)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs{
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_RD32(handle, DEV_ERR_STAT, &statp->value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs return (HPI_SUCCESS);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}