3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * CDDL HEADER START
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 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * See the License for the specific language governing permissions
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * and limitations under the License.
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 * CDDL HEADER END
1ed830817782694e7259ee818a2f8eee72233f1eMichael Speer * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Use is subject to license terms.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qslb_property_t lb_normal = {normal, "normal", hxge_lb_normal};
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qslb_property_t lb_mac10g = {internal, "mac10g", hxge_lb_mac10g};
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United Statesextern uint32_t hxge_jumbo_frame_size;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsstatic void hxge_rtrace_ioctl(p_hxge_t, queue_t *, mblk_t *, struct iocblk *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, DDI_CTL, "==> hxge_global_reset"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, DDI_CTL, "<== hxge_global_reset"));
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States * Initialize the frame size to either standard "1500 + 38" or
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States * jumbo. The user may tune the frame size through the "mtu" parameter
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States * using "dladm set-linkprop"
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States hxgep->vmac.minframesize = MIN_FRAME_SIZE;
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States hxgep->vmac.maxframesize = HXGE_DEFAULT_MTU + MTU_TO_FRAME_SIZE;
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States if (hxgep->param_arr[param_accept_jumbo].value)
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States hxgep->vmac.maxframesize = (uint16_t)hxge_jumbo_frame_size;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, DDI_CTL, "==> hxge_hw_id_init: maxframesize %d",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, DDI_CTL, "==> hxge_hw_init_niu_common"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, MOD_CTL, "hxge_hw_init_niu_common"
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs " already done for dip $%p exiting", hw_p->parent_devp));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "hxge_hw_init_niu_common Started for device id %x",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "hxge_hw_init_niu_common Done for device id %x",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, DDI_CTL, "<== hxge_hw_init_niu_common"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * DDI interface returns second arg as NULL
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer if (hxgep->hxge_mac_state != HXGE_MAC_STARTED) {
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer "<== hxge_intr: not initialized"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, INT_CTL, "==> hxge_intr: ldgvp $%p", ldgvp));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_ERROR_MSG((hxgep, INT_CTL, "<== hxge_intr: not ready"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * This interrupt handler will have to go through
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * all the logical devices to find out which
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * logical device interrupts us and then call
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * its handler to process the events.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, INT_CTL, "==> hxge_intr: #ldvs %d #intrs %d",
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer * Get this group's flag bits.
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer rs = hpi_ldsv_ldfs_get(handle, t_ldgp->ldg, &vector0, &vector1);
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer HXGE_DEBUG_MSG((hxgep, INT_CTL, "==> hxge_intr: "
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer "vector0 0x%llx vector1 0x%llx", vector0, vector1));
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer * Process all devices that share this group.
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer * Call device's handler if flag bits are on.
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer if ((LDV_ON(ldv, vector0) | (LDV_ON(ldv, vector1)))) {
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer "==> hxge_intr: calling device %d"
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer * Re-arm group interrupts
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer (void) hpi_intr_ldg_mgmt_set(handle, t_ldgp->ldg,
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer HXGE_DEBUG_MSG((hxgep, INT_CTL, "<== hxge_intr"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs statsp = (p_hxge_peu_sys_stats_t)&hxgep->statsp->peu_sys_stats;
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States HXGE_REG_RD32(handle, PEU_INTR_STAT, &stat.value);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * The PCIE errors are unrecoverrable and cannot be cleared.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * The only thing we can do here is to mask them off to prevent
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * continued interrupts.
a512c5d1f2908d965887ad5494954ba2cf904bd2Qiyan Sun - Sun Microsystems - San Diego United States HXGE_REG_WR32(handle, PEU_INTR_MASK, 0xffffffff);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_peu_handle_sys_errors: spc_acc_err"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_peu_handle_sys_errors: tdc_pioacc_err"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_peu_handle_sys_errors: rdc_pioacc_err"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_peu_handle_sys_errors: pfc_pioacc_err"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_peu_handle_sys_errors: vmac_pioacc_err"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_peu_handle_sys_errors: cpl_hdrq_parerr"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_peu_handle_sys_errors: cpl_dataq_parerr"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_peu_handle_sys_errors: retryram_xdlh_parerr"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_peu_handle_sys_errors: retrysotram_xdlh_parerr"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_peu_handle_sys_errors: p_hdrq_parerr"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_peu_handle_sys_errors: p_dataq_parerr"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_peu_handle_sys_errors: np_hdrq_parerr"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_peu_handle_sys_errors: np_dataq_parerr"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_peu_handle_sys_errors: eic_msix_parerr"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_peu_handle_sys_errors: hcr_parerr"));
1c29f7e382074ff2792b7f30c9be898ead487a30Qiyan Sun - Sun Microsystems - San Diego United States HXGE_FM_REPORT_ERROR(hxgep, NULL, HXGE_FM_EREPORT_PEU_ERR);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*ARGSUSED*/
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_syserr_intr: arg2 $%p arg1 $%p", hxgep, ldvp));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "<== hxge_syserrintr(no logical group): "
6ffca240bba331a8b22ff3ce47de58da6a205843Michael Speer * This interrupt handler is for system error interrupts.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_syserr_intr: device error 0x%016llx", estat.value));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* TDMC */
3a109ad9413b360a5bfa6fa5ddfacef5fd64fe5bQiyan Sun - Sun Microsystems - San Diego United States HXGE_ERROR_MSG((hxgep, HXGE_ERR_CTL,
3a109ad9413b360a5bfa6fa5ddfacef5fd64fe5bQiyan Sun - Sun Microsystems - San Diego United States "==> hxge_syserr_intr: device error - TDMC"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* RDMC */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_syserr_intr: device error - RDMC"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs } else if (estat.bits.vnm_pio_err1 || estat.bits.peu_err1) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* PCI-E */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_syserr_intr: device error - PCI-E"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* kstats are updated here */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "==> hxge_syserr_intr: device error - unknown"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, SYSERR_CTL, "<== hxge_syserr_intr"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, INT_CTL, "==> hxge_intr_hw_enable"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, INT_CTL, "<== hxge_intr_hw_enable"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, INT_CTL, "==> hxge_intr_hw_disable"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, INT_CTL, "<== hxge_intr_hw_disable"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, INT_CTL, "==> hxge_rx_hw_blank"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Replace current ticks and counts for later
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * processing by the receive packet interrupt routines.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, INT_CTL, "<== hxge_rx_hw_blank"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_hw_ioctl(p_hxge_t hxgep, queue_t *wq, mblk_t *mp, struct iocblk *iocp)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs switch (cmd) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * 10G is the only loopback mode for Hydra.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_loopback_ioctl(p_hxge_t hxgep, queue_t *wq, mblk_t *mp,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, IOC_CTL, "HXGE_GET_LB_MODE command"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, IOC_CTL, "HXGE_SET_LB_MODE command"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if ((hxgep != NULL) && hxge_set_lb(hxgep, wq, mp->b_cont)) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, IOC_CTL, "LB_GET_INFO_SIZE command"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, IOC_CTL, "HXGE_GET_LB_INFO command"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*ARGSUSED*/
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "hxge%d: Loopback mode already set (lb_mode %d).\n",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* 10G is the only loopback mode for Hydra */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "hxge%d: Loopback mode not supported(mode %d).\n",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "!hxge%d: Returning to normal operation",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs cmn_err(CE_NOTE, "!hxge%d: Adapter now in %s loopback mode",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if ((hxgep->statsp->port_stats.lb_mode == hxge_lb_mac10g))
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "hxge%d: Loopback mode not supported(mode %d).\n",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, SYSERR_CTL, "==> hxge_check_hw_state"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_ERROR_MSG((hxgep, SYSERR_CTL, "<== hxge_check_hw_state: "
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "NULL ldgvp (interrupt not ready)."));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, SYSERR_CTL, "<== hxge_check_hw_state: "
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "ldgvp $%p t_ldvp $%p use_timer flag %d",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs if (fm_check_acc_handle(hxgep->dev_regs->hxge_regh) != DDI_FM_OK) {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "Bad register acc handle"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs (void) hxge_syserr_intr((caddr_t)t_ldvp, (caddr_t)hxgep);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxgep->hxge_timerid = hxge_start_timer(hxgep, hxge_check_hw_state,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, SYSERR_CTL, "<== hxge_check_hw_state"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*ARGSUSED*/
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsstatic void
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qshxge_rtrace_ioctl(p_hxge_t hxgep, queue_t *wq, mblk_t *mp,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, STR_CTL, "==> hxge_rtrace_ioctl"));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs "malformed M_IOCTL MBLKL = %d size = %d",
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, STR_CTL, "start_blk = %d\n", start_blk));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, STR_CTL, "num_entries = %d\n", num_entries));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, STR_CTL, "base_entry = %d\n", base_entry));
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_DEBUG_MSG((hxgep, STR_CTL, "<== hxge_rtrace_ioctl"));