9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * CDDL HEADER START
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * The contents of this file are subject to the terms of the
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Common Development and Distribution License (the "License").
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * You may not use this file except in compliance with the License.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * or http://www.opensolaris.org/os/licensing.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * See the License for the specific language governing permissions
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * and limitations under the License.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * When distributing Covered Code, include this CDDL HEADER in each
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * If applicable, add the following below this CDDL HEADER, with the
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * fields enclosed by brackets "[]" replaced with your own identifying
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * information: Portions Copyright [yyyy] [name of copyright owner]
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * CDDL HEADER END
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
93833965647072e8fb234b6f0cd4060544c6dc4ajing xiong ERI-SUN
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Copyright 2008 NetXen, Inc. All rights reserved.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Use is subject to license terms.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
93833965647072e8fb234b6f0cd4060544c6dc4ajing xiong ERI-SUN
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/types.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/conf.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/debug.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/stropts.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/stream.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/strlog.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/kmem.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/stat.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/kstat.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/vtrace.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/dlpi.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/strsun.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/ethernet.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/modctl.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/errno.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/dditypes.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/ddi.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/sunddi.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/sysmacros.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include <sys/pci.h>
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include "unm_nic.h"
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include "unm_nic_hw.h"
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include "nic_cmn.h"
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include "nic_phan_reg.h"
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinastatic void
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_isr_other(struct unm_adapter_s *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u32 portno = adapter->portnum;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u32 val, linkup, qg_linksup = adapter->ahw.linkup;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_LOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter, CRB_XG_STATE, &val, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_UNLOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China linkup = 1 & (val >> adapter->physical_port);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.linkup = linkup;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (linkup != qg_linksup) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s: PORT %d link %s\n", unm_nic_driver_name,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China portno, ((linkup == 0) ? "down" : "up"));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mac_link_update(adapter->mach, linkup);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (linkup)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_set_link_parameters(adapter);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinavoid
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_handle_phy_intr(struct unm_adapter_s *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China uint32_t val, val1, linkupval;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch (adapter->ahw.board_type) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_NIC_GBE:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_isr_other(adapter);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* FALLTHROUGH */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_NIC_XGBE:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* WINDOW = 1 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_LOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter, CRB_XG_STATE_P3,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China &val, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China val1 = XG_LINK_STATE_P3(adapter->ahw.pci_func, val);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China linkupval = XG_LINK_UP_P3;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter, CRB_XG_STATE,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China &val, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China val >>= (adapter->portnum * 8);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China val1 = val & 0xff;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China linkupval = XG_LINK_UP;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_UNLOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->ahw.linkup && (val1 != linkupval)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (verbmsg != 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_NOTE, "%s%d: NIC Link is down\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->name, adapter->portnum);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mac_link_update(adapter->mach, LINK_STATE_DOWN);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.linkup = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else if ((adapter->ahw.linkup == 0) && (val1 == linkupval)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (verbmsg != 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_NOTE, "%s%d: NIC Link is up\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->name, adapter->portnum);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mac_link_update(adapter->mach, LINK_STATE_UP);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.linkup = 1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->ahw.board_type == UNM_NIC_GBE)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_set_link_parameters(adapter);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China default:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China DPRINTF(0, (CE_WARN, "%s%d ISR: Unknown board type\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name, adapter->portnum));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}