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 "unm_brdcfg.h"
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#include "driver_info.h"
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinalong unm_niu_gbe_phy_read(struct unm_adapter_s *,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China long reg, unm_crbword_t *readval);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define MASK(n) ((1ULL<<(n))-1)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define MN_WIN(addr) (((addr & 0x1fc0000) >> 1) | ((addr >> 25) & 0x3ff))
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define OCM_WIN(addr) (((addr & 0x1ff0000) >> 1) | \
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ((addr >> 25) & 0x3ff)) // 64K?
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define MS_WIN(addr) (addr & 0x0ffc0000)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define UNM_PCI_MN_2M (0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define UNM_PCI_MS_2M (0x80000)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define UNM_PCI_OCM0_2M (0xc0000)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define VALID_OCM_ADDR(addr) (((addr) & 0x3f800) != 0x3f800)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define GET_MEM_OFFS_2M(addr) (addr & MASK(18))
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define CRB_BLK(off) ((off >> 20) & 0x3f)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define CRB_SUBBLK(off) ((off >> 16) & 0xf)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define CRB_WINDOW_2M (0x130060)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define UNM_PCI_CAMQM_2M_END (0x04800800UL)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define CRB_HI(off) ((crb_hub_agt[CRB_BLK(off)] << 20) | ((off) & 0xf0000))
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define UNM_PCI_CAMQM_2M_BASE (0x000ff800UL)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define CRB_INDIRECT_2M (0x1e0000UL)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinastatic crb_128M_2M_block_map_t crb_128M_2M_map[64] = {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0, 0, 0, 0}}}, /* 0: PCI */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x0100000, 0x0102000, 0x120000}, /* 1: PCIE */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x0110000, 0x0120000, 0x130000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x0120000, 0x0122000, 0x124000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x0130000, 0x0132000, 0x126000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x0140000, 0x0142000, 0x128000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x0150000, 0x0152000, 0x12a000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x0160000, 0x0170000, 0x110000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x0170000, 0x0172000, 0x12e000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x01e0000, 0x01e0800, 0x122000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000}}},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x0200000, 0x0210000, 0x180000}}}, /* 2: MN */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0, 0, 0, 0}}}, /* 3: */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x0400000, 0x0401000, 0x169000}}}, /* 4: P2NR1 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x0500000, 0x0510000, 0x140000}}}, /* 5: SRE */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x0600000, 0x0610000, 0x1c0000}}}, /* 6: NIU */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x0700000, 0x0704000, 0x1b8000}}}, /* 7: QM */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x0800000, 0x0802000, 0x170000}, /* 8: SQM0 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x08f0000, 0x08f2000, 0x172000}}},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x0900000, 0x0902000, 0x174000}, /* 9: SQM1 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x09f0000, 0x09f2000, 0x176000}}},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0, 0x0a00000, 0x0a02000, 0x178000}, /* 10: SQM2 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x0af0000, 0x0af2000, 0x17a000}}},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0, 0x0b00000, 0x0b02000, 0x17c000}, /* 11: SQM3 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x0bf0000, 0x0bf2000, 0x17e000}}},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x0c00000, 0x0c04000, 0x1d4000}}}, /* 12: I2Q */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x0d00000, 0x0d04000, 0x1a4000}}}, /* 13: TMR */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x0e00000, 0x0e04000, 0x1a0000}}}, /* 14: ROMUSB */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x0f00000, 0x0f01000, 0x164000}}}, /* 15: PEG4 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0, 0x1000000, 0x1004000, 0x1a8000}}}, /* 16: XDMA */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x1100000, 0x1101000, 0x160000}}}, /* 17: PEG0 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x1200000, 0x1201000, 0x161000}}}, /* 18: PEG1 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x1300000, 0x1301000, 0x162000}}}, /* 19: PEG2 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x1400000, 0x1401000, 0x163000}}}, /* 20: PEG3 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x1500000, 0x1501000, 0x165000}}}, /* 21: P2ND */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x1600000, 0x1601000, 0x166000}}}, /* 22: P2NI */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0, 0, 0, 0}}}, /* 23: */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0, 0, 0, 0}}}, /* 24: */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0, 0, 0, 0}}}, /* 25: */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0, 0, 0, 0}}}, /* 26: */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0, 0, 0, 0}}}, /* 27: */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0, 0, 0, 0}}}, /* 28: */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x1d00000, 0x1d10000, 0x190000}}}, /* 29: MS */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x1e00000, 0x1e01000, 0x16a000}}}, /* 30: P2NR2 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x1f00000, 0x1f10000, 0x150000}}}, /* 31: EPG */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0}}}, /* 32: PCI */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x2100000, 0x2102000, 0x120000}, /* 33: PCIE */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x2110000, 0x2120000, 0x130000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x2120000, 0x2122000, 0x124000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x2130000, 0x2132000, 0x126000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x2140000, 0x2142000, 0x128000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x2150000, 0x2152000, 0x12a000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x2160000, 0x2170000, 0x110000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {1, 0x2170000, 0x2172000, 0x12e000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {0, 0x0000000, 0x0000000, 0x000000}}},
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x2200000, 0x2204000, 0x1b0000}}}, /* 34: CAM */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0}}}, /* 35: */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0}}}, /* 36: */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0}}}, /* 37: */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0}}}, /* 38: */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0}}}, /* 39: */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x2800000, 0x2804000, 0x1a4000}}}, /* 40: TMR */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x2900000, 0x2901000, 0x16b000}}}, /* 41: P2NR3 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x2a00000, 0x2a00400, 0x1ac400}}}, /* 42: RPMX1 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x2b00000, 0x2b00400, 0x1ac800}}}, /* 43: RPMX2 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x2c00000, 0x2c00400, 0x1acc00}}}, /* 44: RPMX3 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x2d00000, 0x2d00400, 0x1ad000}}}, /* 45: RPMX4 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x2e00000, 0x2e00400, 0x1ad400}}}, /* 46: RPMX5 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x2f00000, 0x2f00400, 0x1ad800}}}, /* 47: RPMX6 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x3000000, 0x3000400, 0x1adc00}}}, /* 48: RPMX7 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0, 0x3100000, 0x3104000, 0x1a8000}}}, /* 49: XDMA */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x3200000, 0x3204000, 0x1d4000}}}, /* 50: I2Q */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x3300000, 0x3304000, 0x1a0000}}}, /* 51: ROMUSB */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0}}}, /* 52: */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x3500000, 0x3500400, 0x1ac000}}}, /* 53: RPMX0 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x3600000, 0x3600400, 0x1ae000}}}, /* 54: RPMX8 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x3700000, 0x3700400, 0x1ae400}}}, /* 55: RPMX9 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x3800000, 0x3804000, 0x1d0000}}}, /* 56: OCM0 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x3900000, 0x3904000, 0x1b4000}}}, /* 57: CRYPTO */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x3a00000, 0x3a04000, 0x1d8000}}}, /* 58: SMB */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0}}}, /* 59: I2C0 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{0}}}, /* 60: I2C1 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x3d00000, 0x3d04000, 0x1d8000}}}, /* 61: LPC */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x3e00000, 0x3e01000, 0x167000}}}, /* 62: P2NC */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China {{{1, 0x3f00000, 0x3f01000, 0x168000}}} /* 63: P2NR0 */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China};
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * top 12 bits of crb internal address (hub, agent)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinastatic unsigned crb_hub_agt[64] = {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_PS,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_MN,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_MS,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_SRE,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_NIU,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_QMN,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_SQN0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_SQN1,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_SQN2,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_SQN3,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_I2Q,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_TIMR,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_ROMUSB,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_PGN4,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_XDMA,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_PGN0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_PGN1,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_PGN2,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_PGN3,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_PGND,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_PGNI,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_PGS0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_PGS1,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_PGS2,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_PGS3,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_PGSI,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_SN,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_EG,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_PS,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_CAM,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_TIMR,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_RPMX1,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_RPMX2,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_RPMX3,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_RPMX4,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_RPMX5,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_RPMX6,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_RPMX7,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_XDMA,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_I2Q,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_ROMUSB,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_RPMX0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_RPMX8,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_RPMX9,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_OCM0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_SMB,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_I2C0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_I2C1,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_HW_CRB_HUB_AGT_ADR_PGNC,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China};
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define CRB_WIN_LOCK_TIMEOUT 100000000
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinastatic void
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinacrb_win_lock(struct unm_adapter_s *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int i;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int done = 0, timeout = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China while (!done) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* acquire semaphore3 from PCI HW block */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_PCIE_REG(PCIE_SEM7_LOCK), &done, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (done == 1)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (timeout >= CRB_WIN_LOCK_TIMEOUT) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s%d: crb_win_lock timed out\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->name, adapter->instance);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China timeout++;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Yield CPU
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (i = 0; i < 20; i++);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_crb_writelit_adapter(adapter, UNM_CRB_WIN_LOCK_ID,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->portnum);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinastatic void
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinacrb_win_unlock(struct unm_adapter_s *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int val;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter, UNM_PCIE_REG(PCIE_SEM7_UNLOCK),
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China &val, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Changes the CRB window to the specified window.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinavoid
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_change_crbwindow_128M(unm_adapter *adapter, uint32_t wndw)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_pcix_crb_window_t window;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unsigned long offset;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China uint32_t tmp;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->curr_window == wndw) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Move the CRB window.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * We need to write to the "direct access" region of PCI
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * to avoid a race condition where the window register has
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * not been successfully written across CRB before the target
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * register address is received by PCI. The direct region bypasses
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * the CRB bus.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China offset = PCI_OFFSET_SECOND_RANGE(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_PCIX_PH_REG(PCIE_CRB_WINDOW_REG(adapter->ahw.pci_func)));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(unm_crbword_t *)&window = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China window.addrbit = wndw;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32(*(unsigned int *)&window, (void*) (offset));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* MUST make sure window is set before we forge on... */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China while ((tmp = UNM_NIC_PCI_READ_32((void*) offset)) !=
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(uint32_t *)&window) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s: %s WARNING: CRB window value not "
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China "registered properly: 0x%08x.\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name, __FUNCTION__, tmp);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->curr_window = wndw;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Changes the CRB window to the specified window.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/* ARGSUSED */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinavoid
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_change_crbwindow_2M(unm_adapter *adapter, uint32_t wndw)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinauint32_t
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_get_crbwindow(unm_adapter *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (adapter->curr_window);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Return -1 if off is not valid,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * 1 if window access is needed. 'off' is set to offset from
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * CRB space in 128M pci map
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * 0 if no window access is needed. 'off' is set to 2M addr
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * In: 'off' is offset from base in 128M pci map
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_get_crb_addr_2M(unm_adapter *adapter, u64 *off, int len)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unsigned long end = *off + len;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China crb_128M_2M_sub_block_map_t *m;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (*off >= UNM_CRB_MAX)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (-1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (*off >= UNM_PCI_CAMQM && (end <= UNM_PCI_CAMQM_2M_END)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *off = (*off - UNM_PCI_CAMQM) + UNM_PCI_CAMQM_2M_BASE +
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.pci_base0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (*off < UNM_PCI_CRBSPACE)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (-1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *off -= UNM_PCI_CRBSPACE;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China end = *off + len;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Try direct map
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China m = &crb_128M_2M_map[CRB_BLK(*off)].sub_block[CRB_SUBBLK(*off)];
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (m->valid && (m->start_128M <= *off) && (m->end_128M >= end)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *off = *off + m->start_2M - m->start_128M +
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.pci_base0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Not in direct map, use crb window
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * In: 'off' is offset from CRB space in 128M pci map
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Out: 'off' is 2M pci map addr
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * side effect: lock crb window
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinastatic void
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_set_crbwindow_2M(unm_adapter *adapter, u64 *off)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u32 win_read;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->crb_win = CRB_HI(*off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32(adapter->crb_win, (void *) (CRB_WINDOW_2M +
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.pci_base0));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Read back value to make sure write has gone through before trying
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * to use it.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China win_read = UNM_NIC_PCI_READ_32((void *)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (CRB_WINDOW_2M + adapter->ahw.pci_base0));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (win_read != adapter->crb_win) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s: Written crbwin (0x%x) != Read crbwin "
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China "(0x%x), off=0x%llx\n", __FUNCTION__, adapter->crb_win,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China win_read, *off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *off = (*off & MASK(16)) + CRB_INDIRECT_2M +
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.pci_base0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_hw_write_ioctl_128M(unm_adapter *adapter, u64 off, void *data, int len)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China void *addr;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u64 offset = off;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (ADDR_IN_WINDOW1(off)) { // Window 1
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = CRB_NORMALIZE(adapter, off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (!addr) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China offset = CRB_NORMAL(off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->ahw.pci_len0 == 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China offset -= UNM_PCI_CRBSPACE;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = (void *) ((uint8_t *)adapter->ahw.pci_base0 +
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China offset);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_LOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {// Window 0
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = (void *) (uptr_t)(pci_base_offset(adapter, off));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (!addr) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China offset = off;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = (void *) ((uint8_t *)adapter->ahw.pci_base0 +
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China offset);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_LOCK_IRQS(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch (len) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 1:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_8 (*(__uint8_t *)data, addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 2:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_16 (*(__uint16_t *)data, addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 4:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32 (*(__uint32_t *)data, addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 8:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_64 (*(__uint64_t *)data, addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China default:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#if !defined(NDEBUG)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((len & 0x7) != 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s: %s len(%d) not multiple of 8.\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name, __FUNCTION__, len);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#endif
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_HW_BLOCK_WRITE_64(data, addr, (len>>3));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (ADDR_IN_WINDOW1(off)) {// Window 1
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_UNLOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {// Window 0
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Note : 'len' argument should be either 1, 2, 4, or a multiple of 8.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_hw_write_wx_128M(unm_adapter *adapter, u64 off, void *data, int len)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * This is modified from _unm_nic_hw_write().
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * unm_nic_hw_write does not exist now.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China void *addr;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (ADDR_IN_WINDOW1(off)) {// Window 1
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = CRB_NORMALIZE(adapter, off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_LOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {// Window 0
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = (void *) (uptr_t)(pci_base_offset(adapter, off));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_LOCK_IRQS(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (!addr) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (ADDR_IN_WINDOW1(off)) {// Window 1
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_UNLOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {// Window 0
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch (len) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 1:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_8 (*(__uint8_t *)data, addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 2:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_16 (*(__uint16_t *)data, addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 4:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32 (*(__uint32_t *)data, addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 8:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_64 (*(__uint64_t *)data, addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China default:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#if !defined(NDEBUG)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((len & 0x7) != 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China "%s: %s len(%d) not multiple of 8.\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name, __FUNCTION__, len);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#endif
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_HW_BLOCK_WRITE_64(data, addr, (len>>3));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (ADDR_IN_WINDOW1(off)) {// Window 1
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_UNLOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {// Window 0
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Note : only 32-bit writes!
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinavoid
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_write_normalize_128M(unm_adapter *adapter, u64 off, u32 data)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32(data, CRB_NORMALIZE(adapter, off));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Note : only 32-bit reads!
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinau32
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_read_normalize_128M(unm_adapter *adapter, u64 off)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (UNM_NIC_PCI_READ_32(CRB_NORMALIZE(adapter, off)));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Note : only 32-bit writes!
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_write_immediate_128M(unm_adapter *adapter, u64 off, u32 *data)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32(*data,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void *) (uptr_t)(PCI_OFFSET_SECOND_RANGE(adapter, off)));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Note : only 32-bit reads!
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_read_immediate_128M(unm_adapter *adapter, u64 off, u32 *data)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *data = UNM_NIC_PCI_READ_32((void *)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (uptr_t)(pci_base_offset(adapter, off)));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Note : only 32-bit writes!
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinavoid
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_write_normalize_2M(unm_adapter *adapter, u64 off, u32 data)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u32 temp = data;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_write_wx(adapter, off, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Note : only 32-bit reads!
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinau32
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_read_normalize_2M(unm_adapter *adapter, u64 off)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u32 temp;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter, off, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (temp);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Note : only 32-bit writes!
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_write_immediate_2M(unm_adapter *adapter, u64 off, u32 *data)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u32 temp = *data;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_write_wx(adapter, off, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Note : only 32-bit reads!
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_read_immediate_2M(unm_adapter *adapter, u64 off, u32 *data)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u32 temp;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter, off, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *data = temp;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * write cross hw window boundary is not supported
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * 'len' should be either 1, 2, 4, or multiple of 8
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_hw_write_wx_2M(unm_adapter *adapter, u64 off, void *data, int len)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int rv;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China rv = unm_nic_pci_get_crb_addr_2M(adapter, &off, len);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (rv == -1) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_PANIC, "%s: invalid offset: 0x%016llx\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __FUNCTION__, off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (-1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (rv == 1) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_LOCK_IRQS(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China crb_win_lock(adapter);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_set_crbwindow_2M(adapter, &off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch (len) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 1:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_8(*(__uint8_t *)data, (void *) (uptr_t)off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 2:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_16(*(__uint16_t *)data, (void *) (uptr_t)off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 4:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32(*(__uint32_t *)data, (void *) (uptr_t)off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 8:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_64(*(__uint64_t *)data, (void *) (uptr_t)off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China default:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#if !defined(NDEBUG)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((len & 0x7) != 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s: %s len(%d) not multiple of 8.\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name, __FUNCTION__, len);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#endif
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_HW_BLOCK_WRITE_64(data, (uptr_t)off, (len>>3));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (rv == 1) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China crb_win_unlock(adapter);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_hw_read_ioctl_128M(unm_adapter *adapter, u64 off, void *data, int len)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China void *addr;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u64 offset;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (ADDR_IN_WINDOW1(off)) {// Window 1
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = CRB_NORMALIZE(adapter, off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (!addr) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China offset = CRB_NORMAL(off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->ahw.pci_len0 == 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China offset -= UNM_PCI_CRBSPACE;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = (void *) ((uint8_t *)adapter->ahw.pci_base0 +
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China offset);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_LOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {// Window 0
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = (void *) (uptr_t)(pci_base_offset(adapter, off));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (!addr) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China offset = off;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = (void *) ((uint8_t *)adapter->ahw.pci_base0 +
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China offset);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_LOCK_IRQS(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch (len) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 1:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint8_t *)data = UNM_NIC_PCI_READ_8(addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 2:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint16_t *)data = UNM_NIC_PCI_READ_16(addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 4:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint32_t *)data = UNM_NIC_PCI_READ_32(addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 8:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint64_t *)data = UNM_NIC_PCI_READ_64(addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China default:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#if !defined(NDEBUG)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((len & 0x7) != 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s: %s len(%d) not multiple of 8.\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name, __FUNCTION__, len);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#endif
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_HW_BLOCK_READ_64(data, addr, (len>>3));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (ADDR_IN_WINDOW1(off)) {// Window 1
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_UNLOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {// Window 0
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_hw_read_wx_2M(unm_adapter *adapter, u64 off, void *data, int len)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int rv;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China rv = unm_nic_pci_get_crb_addr_2M(adapter, &off, len);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (rv == -1) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_PANIC, "%s: invalid offset: 0x%016llx\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __FUNCTION__, off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (-1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (rv == 1) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_LOCK_IRQS(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China crb_win_lock(adapter);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_set_crbwindow_2M(adapter, &off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch (len) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 1:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint8_t *)data = UNM_NIC_PCI_READ_8((void *) (uptr_t)off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 2:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint16_t *)data = UNM_NIC_PCI_READ_16((void *) (uptr_t)off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 4:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint32_t *)data = UNM_NIC_PCI_READ_32((void *) (uptr_t)off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 8:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint64_t *)data = UNM_NIC_PCI_READ_64((void *) (uptr_t)off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China default:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#if !defined(NDEBUG)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((len & 0x7) != 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s: %s len(%d) not multiple of 8.\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name, __FUNCTION__, len);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#endif
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_HW_BLOCK_READ_64(data, (void *) (uptr_t)off, (len>>3));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (rv == 1) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China crb_win_unlock(adapter);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_hw_read_wx_128M(unm_adapter *adapter, u64 off, void *data, int len)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China void *addr;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (ADDR_IN_WINDOW1(off)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China // Window 1
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = CRB_NORMALIZE(adapter, off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_LOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {// Window 0
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = (void *) (uptr_t)(pci_base_offset(adapter, off));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_LOCK_IRQS(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (!addr) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (ADDR_IN_WINDOW1(off)) {// Window 1
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_UNLOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {// Window 0
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch (len) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 1:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint8_t *)data = UNM_NIC_PCI_READ_8(addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 2:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint16_t *)data = UNM_NIC_PCI_READ_16(addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 4:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint32_t *)data = UNM_NIC_PCI_READ_32(addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 8:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint64_t *)data = UNM_NIC_PCI_READ_64(addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China default:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#if !defined(NDEBUG)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((len & 0x7) != 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China "%s: %s len(%d) not multiple of 8.\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name, __FUNCTION__, len);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#endif
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_HW_BLOCK_READ_64(data, addr, (len>>3));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (ADDR_IN_WINDOW1(off)) {// Window 1
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_UNLOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {// Window 0
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/* PCI Windowing for DDR regions. */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define ADDR_IN_RANGE(addr, low, high) \
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (((addr) <= (high)) && ((low) ? ((addr) >= (low)) : 1))
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * check memory access boundary.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * used by test agent. support ddr access only for now
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/* ARGSUSED */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinastatic unsigned long
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_mem_bound_check(struct unm_adapter_s *adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unsigned long long addr, int size)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (!ADDR_IN_RANGE(addr, UNM_ADDR_DDR_NET, UNM_ADDR_DDR_NET_MAX) ||
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China !ADDR_IN_RANGE(addr + size -1, UNM_ADDR_DDR_NET,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_ADDR_DDR_NET_MAX) || ((size != 1) && (size != 2) &&
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (size != 4) && (size != 8)))
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint unm_pci_set_window_warning_count = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunsigned long long
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_set_window_128M(struct unm_adapter_s *adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unsigned long long addr)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int window;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unsigned long long qdr_max;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China qdr_max = NX_P2_ADDR_QDR_NET_MAX;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China qdr_max = NX_P3_ADDR_QDR_NET_MAX;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (ADDR_IN_RANGE(addr, UNM_ADDR_DDR_NET, UNM_ADDR_DDR_NET_MAX)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* DDR network side */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* MN access should never come here */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_PANIC, "%s\n", __FUNCTION__);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = -1ULL;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else if (ADDR_IN_RANGE(addr, UNM_ADDR_OCM0, UNM_ADDR_OCM0_MAX)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr -= UNM_ADDR_OCM0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr += UNM_PCI_OCM0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else if (ADDR_IN_RANGE(addr, UNM_ADDR_OCM1, UNM_ADDR_OCM1_MAX)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr -= UNM_ADDR_OCM1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr += UNM_PCI_OCM1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else if (ADDR_IN_RANGE(addr, UNM_ADDR_QDR_NET, qdr_max)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* QDR network side */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr -= UNM_ADDR_QDR_NET;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China window = (addr >> 22) & 0x3f;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->ahw.qdr_sn_window != window) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.qdr_sn_window = window;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32((window << 22),
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void *) (uptr_t)(PCI_OFFSET_SECOND_RANGE(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_PCIX_PH_REG(PCIE_SN_WINDOW_REG(
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.pci_func)))));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* MUST make sure window is set before we forge on... */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void) UNM_NIC_PCI_READ_32((void *)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (uptr_t)(PCI_OFFSET_SECOND_RANGE(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_PCIX_PH_REG(PCIE_SN_WINDOW_REG(
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.pci_func)))));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr -= (window * 0x400000);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr += UNM_PCI_QDR_NET;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * peg gdb frequently accesses memory that doesn't exist,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * this limits the chit chat so debugging isn't slowed down.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((unm_pci_set_window_warning_count++ < 8) ||
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (unm_pci_set_window_warning_count%64 == 0)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s: Warning:unm_nic_pci_set_window() "
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China "Unknown address range!\n", unm_nic_driver_name);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = -1ULL;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunsigned long long
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_set_window_2M(struct unm_adapter_s *adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unsigned long long addr)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int window;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u32 win_read;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (ADDR_IN_RANGE(addr, UNM_ADDR_DDR_NET, UNM_ADDR_DDR_NET_MAX)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* DDR network side */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China window = MN_WIN(addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.ddr_mn_window = window;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_write_wx(adapter, adapter->ahw.mn_win_crb |
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_PCI_CRBSPACE, &window, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter, adapter->ahw.mn_win_crb |
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_PCI_CRBSPACE, &win_read, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((win_read << 17) != window) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China "%s: Written MNwin (0x%x) != Read MNwin (0x%x)\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __FUNCTION__, window, win_read);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = GET_MEM_OFFS_2M(addr) + UNM_PCI_DDR_NET;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else if (ADDR_IN_RANGE(addr, UNM_ADDR_OCM0, UNM_ADDR_OCM0_MAX)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unsigned int temp1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China// OCM: pci_addr[20:18] == 011 && pci_addr[17:11] != 7f
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((addr & 0x00ff800) == 0xff800) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China // if bits 19:18&17:11 are on
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s: QM access not handled.\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __FUNCTION__);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = -1ULL;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China window = OCM_WIN(addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.ddr_mn_window = window;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_write_wx(adapter, adapter->ahw.mn_win_crb |
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_PCI_CRBSPACE, &window, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter, adapter->ahw.mn_win_crb |
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_PCI_CRBSPACE, &win_read, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China temp1 = ((window & 0x1FF) << 7) |
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ((window & 0x0FFFE0000) >> 17);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (win_read != temp1) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China "%s: Written OCMwin(0x%x) != Read OCMwin(0x%x)\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __FUNCTION__, temp1, win_read);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = GET_MEM_OFFS_2M(addr) + UNM_PCI_OCM0_2M;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else if (ADDR_IN_RANGE(addr, UNM_ADDR_QDR_NET,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China NX_P3_ADDR_QDR_NET_MAX)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* QDR network side */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China window = MS_WIN(addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.qdr_sn_window = window;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_write_wx(adapter, adapter->ahw.ms_win_crb |
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_PCI_CRBSPACE, &window, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter, adapter->ahw.ms_win_crb |
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_PCI_CRBSPACE, &win_read, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (win_read != window) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China "%s: Written MSwin (0x%x) != Read MSwin (0x%x)\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __FUNCTION__, window, win_read);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = GET_MEM_OFFS_2M(addr) + UNM_PCI_QDR_NET;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * peg gdb frequently accesses memory that doesn't exist,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * this limits the chit chat so debugging isn't slowed down.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((unm_pci_set_window_warning_count++ < 8) ||
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (unm_pci_set_window_warning_count%64 == 0)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s%d: %s Unknown address range!\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->name, adapter->instance, __FUNCTION__);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = -1ULL;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/* check if address is in the same windows as the previous access */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinastatic unsigned long
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_is_same_window(struct unm_adapter_s *adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unsigned long long addr)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int window;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unsigned long long qdr_max;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China qdr_max = NX_P2_ADDR_QDR_NET_MAX;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China qdr_max = NX_P3_ADDR_QDR_NET_MAX;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (ADDR_IN_RANGE(addr, UNM_ADDR_DDR_NET, UNM_ADDR_DDR_NET_MAX)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* DDR network side */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* MN access can not come here */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_PANIC, "%s\n", __FUNCTION__);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#if 0
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China window = ((addr - UNM_ADDR_DDR_NET) >> 25) & 0x3ff;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->ahw.ddr_mn_window == window) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#endif
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else if (ADDR_IN_RANGE(addr, UNM_ADDR_OCM0, UNM_ADDR_OCM0_MAX)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else if (ADDR_IN_RANGE(addr, UNM_ADDR_OCM1, UNM_ADDR_OCM1_MAX)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else if (ADDR_IN_RANGE(addr, UNM_ADDR_QDR_NET, qdr_max)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* QDR network side */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China window = ((addr - UNM_ADDR_QDR_NET) >> 22) & 0x3f;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->ahw.qdr_sn_window == window) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinastatic int
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_mem_read_direct(struct unm_adapter_s *adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u64 off, void *data, int size)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China void *addr;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int ret = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u64 start;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#if 0
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * This check can not be currently executed, since phanmon findq
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * command breaks this check whereby 8 byte reads are being attempted
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * on "aligned-by-4" addresses on x86. Reason this works is our version
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * breaks up the access into 2 consecutive 4 byte writes; on other
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * architectures, this might require "aligned-by-8" addresses and we
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * will run into trouble.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Check alignment for expected sizes of 1, 2, 4, 8. Other size
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * values will not trigger access.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((off & (size - 1)) != 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (-1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#endif
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_LOCK_IRQS(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * If attempting to access unknown address or straddle hw windows,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * do not access.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (((start = adapter->unm_nic_pci_set_window(adapter, off)) == -1UL) ||
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (unm_nic_pci_is_same_window(adapter, off + size -1) == 0)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s out of bound pci memory access. "
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China "offset is 0x%llx\n", unm_nic_driver_name, off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (-1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = (void *) (uptr_t)(pci_base_offset(adapter, start));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (!addr)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = (void *) ((uint8_t *)adapter->ahw.pci_base0 + start);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch (size) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 1:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint8_t *)data = UNM_NIC_PCI_READ_8(addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 2:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint16_t *)data = UNM_NIC_PCI_READ_16(addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 4:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint32_t *)data = UNM_NIC_PCI_READ_32(addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 8:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint64_t *)data = UNM_NIC_PCI_READ_64(addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China default:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ret = -1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (ret);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinastatic int
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_mem_write_direct(struct unm_adapter_s *adapter, u64 off,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China void *data, int size)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China void *addr;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int ret = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u64 start;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#if 0
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * This check can not be currently executed, since firmware load
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * breaks this check whereby 8 byte writes are being attempted on
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * "aligned-by-4" addresses on x86. Reason this works is our version
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * breaks up the access into 2 consecutive 4 byte writes; on other
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * architectures, this might require "aligned-by-8" addresses and we
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * will run into trouble.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Check alignment for expected sizes of 1, 2, 4, 8. Other size
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * values will not trigger access.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((off & (size - 1)) != 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (-1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#endif
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_LOCK_IRQS(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * If attempting to access unknown address or straddle hw windows,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * do not access.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (((start = adapter->unm_nic_pci_set_window(adapter, off)) == -1UL) ||
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (unm_nic_pci_is_same_window(adapter, off + size -1) == 0)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s out of bound pci memory access. "
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China "offset is 0x%llx\n", unm_nic_driver_name, off);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (-1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = (void *) (uptr_t)(pci_base_offset(adapter, start));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (!addr)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = (void *) ((uint8_t *)adapter->ahw.pci_base0 + start);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch (size) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 1:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_8(*(__uint8_t *)data, addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 2:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_16(*(__uint16_t *)data, addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 4:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32(*(__uint32_t *)data, addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 8:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_64(*(__uint64_t *)data, addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China default:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ret = -1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (ret);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_mem_write_128M(struct unm_adapter_s *adapter, u64 off, void *data,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int size)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int i, j, ret = 0, loop, sz[2], off0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __uint32_t temp;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __uint64_t off8, mem_crb, tmpw, word[2] = {0, 0};
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define MAX_CTL_CHECK 1000
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * If not MN, go check for MS or invalid.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (unm_nic_pci_mem_bound_check(adapter, off, size) == 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (unm_nic_pci_mem_write_direct(adapter, off, data, size));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China off8 = off & 0xfffffff8;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China off0 = off & 0x7;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China sz[0] = (size < (8 - off0)) ? size : (8 - off0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China sz[1] = size - sz[0];
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China loop = ((off0 + size - 1) >> 3) + 1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* LINTED: E_FALSE_LOGICAL_EXPR */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb = (uptr_t)(pci_base_offset(adapter, UNM_CRB_DDR_NET));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((size != 8) || (off0 != 0)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (i = 0; i < loop; i++) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->unm_nic_pci_mem_read(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China off8 + (i << 3), &word[i], 8))
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (-1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch (size) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 1:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China tmpw = *((__uint8_t *)data);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 2:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China tmpw = *((__uint16_t *)data);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 4:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China tmpw = *((__uint32_t *)data);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 8:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China default:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China tmpw = *((__uint64_t *)data);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China word[0] &= ~((~(~0ULL << (sz[0] * 8))) << (off0 * 8));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China word[0] |= tmpw << (off0 * 8);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (loop == 2) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China word[1] &= ~(~0ULL << (sz[1] * 8));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China word[1] |= tmpw >> (sz[0] * 8);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_LOCK_IRQS(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (i = 0; i < loop; i++) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32((__uint32_t)(off8 + (i << 3)),
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void *) (uptr_t)(mem_crb+MIU_TEST_AGT_ADDR_LO));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32(0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void *) (uptr_t)(mem_crb+MIU_TEST_AGT_ADDR_HI));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32(word[i] & 0xffffffff,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void *) (uptr_t)(mem_crb+MIU_TEST_AGT_WRDATA_LO));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32((word[i] >> 32) & 0xffffffff,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void *) (uptr_t)(mem_crb+MIU_TEST_AGT_WRDATA_HI));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32(MIU_TA_CTL_ENABLE|MIU_TA_CTL_WRITE,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void *) (uptr_t)(mem_crb+MIU_TEST_AGT_CTRL));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32(MIU_TA_CTL_START | MIU_TA_CTL_ENABLE |
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China MIU_TA_CTL_WRITE,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void *) (uptr_t)(mem_crb+MIU_TEST_AGT_CTRL));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (j = 0; j < MAX_CTL_CHECK; j++) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China temp = UNM_NIC_PCI_READ_32((void *)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (uptr_t)(mem_crb+MIU_TEST_AGT_CTRL));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((temp & MIU_TA_CTL_BUSY) == 0) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (j >= MAX_CTL_CHECK) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s: %s Fail to write thru agent\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __FUNCTION__, unm_nic_driver_name);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ret = -1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (ret);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_mem_read_128M(struct unm_adapter_s *adapter, u64 off, void *data,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int size)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int i, j = 0, k, start, end, loop, sz[2], off0[2];
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __uint32_t temp;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __uint64_t off8, val, mem_crb, word[2] = {0, 0};
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define MAX_CTL_CHECK 1000
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * If not MN, go check for MS or invalid.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (unm_nic_pci_mem_bound_check(adapter, off, size) == 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (unm_nic_pci_mem_read_direct(adapter, off, data, size));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China off8 = off & 0xfffffff8;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China off0[0] = off & 0x7;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China off0[1] = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China sz[0] = (size < (8 - off0[0])) ? size : (8 - off0[0]);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China sz[1] = size - sz[0];
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China loop = ((off0[0] + size - 1) >> 3) + 1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* LINTED: E_FALSE_LOGICAL_EXPR */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb = (uptr_t)(pci_base_offset(adapter, UNM_CRB_DDR_NET));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_LOCK_IRQS(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (i = 0; i < loop; i++) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32((__uint32_t)(off8 + (i << 3)),
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void *) (uptr_t)(mem_crb+MIU_TEST_AGT_ADDR_LO));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32(0,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void *) (uptr_t)(mem_crb+MIU_TEST_AGT_ADDR_HI));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32(MIU_TA_CTL_ENABLE,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void *) (uptr_t)(mem_crb+MIU_TEST_AGT_CTRL));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32(MIU_TA_CTL_START|MIU_TA_CTL_ENABLE,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void *) (uptr_t)(mem_crb+MIU_TEST_AGT_CTRL));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (j = 0; j < MAX_CTL_CHECK; j++) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China temp = UNM_NIC_PCI_READ_32((void *)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (uptr_t)(mem_crb+MIU_TEST_AGT_CTRL));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((temp & MIU_TA_CTL_BUSY) == 0) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (j >= MAX_CTL_CHECK) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s: %s Fail to read through agent\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __FUNCTION__, unm_nic_driver_name);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China start = off0[i] >> 2;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China end = (off0[i] + sz[i] - 1) >> 2;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China word[i] = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (k = start; k <= end; k++) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China word[i] |= ((__uint64_t)UNM_NIC_PCI_READ_32(
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void *) (uptr_t)(mem_crb +
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China MIU_TEST_AGT_RDDATA(k))) << (32*k));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (j >= MAX_CTL_CHECK)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (-1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (sz[0] == 8) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China val = word[0];
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China val = ((word[0] >> (off0[0] * 8)) & (~(~0ULL << (sz[0] * 8)))) |
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ((word[1] & (~(~0ULL << (sz[1] * 8)))) << (sz[0] * 8));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch (size) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 1:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint8_t *)data = val;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 2:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint16_t *)data = val;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 4:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint32_t *)data = val;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 8:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint64_t *)data = val;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_mem_write_2M(struct unm_adapter_s *adapter, u64 off, void *data,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int size)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int i, j, ret = 0, loop, sz[2], off0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __uint32_t temp;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __uint64_t off8, mem_crb, tmpw, word[2] = {0, 0};
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define MAX_CTL_CHECK 1000
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * If not MN, go check for MS or invalid.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (off >= UNM_ADDR_QDR_NET && off <= NX_P3_ADDR_QDR_NET_MAX) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb = UNM_CRB_QDR_NET;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb = UNM_CRB_DDR_NET;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (unm_nic_pci_mem_bound_check(adapter, off, size) == 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (unm_nic_pci_mem_write_direct(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China off, data, size));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China off8 = off & 0xfffffff8;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China off0 = off & 0x7;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China sz[0] = (size < (8 - off0)) ? size : (8 - off0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China sz[1] = size - sz[0];
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China loop = ((off0 + size - 1) >> 3) + 1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((size != 8) || (off0 != 0)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (i = 0; i < loop; i++) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->unm_nic_pci_mem_read(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China off8 + (i << 3), &word[i], 8))
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (-1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch (size) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 1:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China tmpw = *((__uint8_t *)data);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 2:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China tmpw = *((__uint16_t *)data);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 4:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China tmpw = *((__uint32_t *)data);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 8:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China default:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China tmpw = *((__uint64_t *)data);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China word[0] &= ~((~(~0ULL << (sz[0] * 8))) << (off0 * 8));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China word[0] |= tmpw << (off0 * 8);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (loop == 2) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China word[1] &= ~(~0ULL << (sz[1] * 8));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China word[1] |= tmpw >> (sz[0] * 8);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China// don't lock here - write_wx gets the lock if each time
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China// UNM_WRITE_LOCK_IRQS(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China// unm_nic_pci_change_crbwindow_128M(adapter, 0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (i = 0; i < loop; i++) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China temp = off8 + (i << 3);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_write_wx(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb+MIU_TEST_AGT_ADDR_LO, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China temp = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_write_wx(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb+MIU_TEST_AGT_ADDR_HI, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China temp = word[i] & 0xffffffff;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_write_wx(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb+MIU_TEST_AGT_WRDATA_LO, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China temp = (word[i] >> 32) & 0xffffffff;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_write_wx(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb+MIU_TEST_AGT_WRDATA_HI, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China temp = MIU_TA_CTL_ENABLE | MIU_TA_CTL_WRITE;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_write_wx(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb+MIU_TEST_AGT_CTRL, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China temp = MIU_TA_CTL_START | MIU_TA_CTL_ENABLE | MIU_TA_CTL_WRITE;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_write_wx(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb+MIU_TEST_AGT_CTRL, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (j = 0; j < MAX_CTL_CHECK; j++) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb + MIU_TEST_AGT_CTRL, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((temp & MIU_TA_CTL_BUSY) == 0) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (j >= MAX_CTL_CHECK) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s: Fail to write through agent\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ret = -1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China// unm_nic_pci_change_crbwindow_128M(adapter, 1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China// UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (ret);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_pci_mem_read_2M(struct unm_adapter_s *adapter, u64 off, void *data,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int size)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China// unsigned long flags;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int i, j = 0, k, start, end, loop, sz[2], off0[2];
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __uint32_t temp;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __uint64_t off8, val, mem_crb, word[2] = {0, 0};
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define MAX_CTL_CHECK 1000
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * If not MN, go check for MS or invalid.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (off >= UNM_ADDR_QDR_NET && off <= NX_P3_ADDR_QDR_NET_MAX) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb = UNM_CRB_QDR_NET;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb = UNM_CRB_DDR_NET;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (unm_nic_pci_mem_bound_check(adapter, off, size) == 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (unm_nic_pci_mem_read_direct(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China off, data, size));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China off8 = off & 0xfffffff8;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China off0[0] = off & 0x7;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China off0[1] = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China sz[0] = (size < (8 - off0[0])) ? size : (8 - off0[0]);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China sz[1] = size - sz[0];
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China loop = ((off0[0] + size - 1) >> 3) + 1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China// don't get lock - write_wx will get it
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China// UNM_WRITE_LOCK_IRQS(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China// unm_nic_pci_change_crbwindow_128M(adapter, 0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (i = 0; i < loop; i++) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China temp = off8 + (i << 3);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_write_wx(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb + MIU_TEST_AGT_ADDR_LO, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China temp = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_write_wx(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb + MIU_TEST_AGT_ADDR_HI, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China temp = MIU_TA_CTL_ENABLE;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_write_wx(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb + MIU_TEST_AGT_CTRL, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China temp = MIU_TA_CTL_START | MIU_TA_CTL_ENABLE;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_write_wx(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb + MIU_TEST_AGT_CTRL, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (j = 0; j < MAX_CTL_CHECK; j++) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb + MIU_TEST_AGT_CTRL, &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((temp & MIU_TA_CTL_BUSY) == 0) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (j >= MAX_CTL_CHECK) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s: Fail to read through agent\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China start = off0[i] >> 2;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China end = (off0[i] + sz[i] - 1) >> 2;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (k = start; k <= end; k++) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mem_crb + MIU_TEST_AGT_RDDATA(k), &temp, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China word[i] |= ((__uint64_t)temp << (32 * k));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China// unm_nic_pci_change_crbwindow_128M(adapter, 1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China// UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (j >= MAX_CTL_CHECK)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (-1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (sz[0] == 8) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China val = word[0];
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China val = ((word[0] >> (off0[0] * 8)) & (~(~0ULL << (sz[0] * 8)))) |
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ((word[1] & (~(~0ULL << (sz[1] * 8)))) << (sz[0] * 8));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch (size) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 1:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint8_t *)data = val;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 2:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint16_t *)data = val;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 4:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint32_t *)data = val;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 8:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China *(__uint64_t *)data = val;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_crb_writelit_adapter_2M(struct unm_adapter_s *adapter, unsigned long off,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int data)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (unm_nic_hw_write_wx_2M(adapter, off, &data, 4));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_crb_writelit_adapter_128M(struct unm_adapter_s *adapter, unsigned long off,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int data)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China void *addr;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (ADDR_IN_WINDOW1(off)) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_LOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32(data, CRB_NORMALIZE(adapter, off));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_READ_UNLOCK(&adapter->adapter_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China // unm_nic_write_w0 (adapter, off, data);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_LOCK_IRQS(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr = (void *) (pci_base_offset(adapter, off));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIC_PCI_WRITE_32(data, addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_pci_change_crbwindow_128M(adapter, 1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_WRITE_UNLOCK_IRQR(&adapter->adapter_lock, flags);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_get_board_info(struct unm_adapter_s *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int rv = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_board_info_t *boardinfo;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int i;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int addr = BRDCFG_START;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China uint32_t *ptr32;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China uint32_t gpioval;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China boardinfo = &adapter->ahw.boardcfg;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ptr32 = (uint32_t *)boardinfo;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (i = 0; i < sizeof (unm_board_info_t) / sizeof (uint32_t); i++) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (rom_fast_read(adapter, addr, (int *)ptr32) == -1) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (-1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China DPRINTF(1, (CE_WARN, "ROM(%d): %x\n", i, *ptr32));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ptr32++;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr += sizeof (uint32_t);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (boardinfo->magic != UNM_BDINFO_MAGIC) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China DPRINTF(1, (CE_WARN, "%s: ERROR reading board config."
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China " Read %x, expected %x\n", unm_nic_driver_name,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China boardinfo->magic, UNM_BDINFO_MAGIC));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China rv = -1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (boardinfo->header_version != UNM_BDINFO_VERSION) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China DPRINTF(1, (CE_WARN, "%s: Unknown board config version."
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China " Read %x, expected %x\n", unm_nic_driver_name,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China boardinfo->header_version, UNM_BDINFO_VERSION));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China rv = -1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (boardinfo->board_type == UNM_BRDTYPE_P3_4_GB_MM) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China gpioval = UNM_CRB_READ_VAL_ADAPTER(UNM_ROMUSB_GLB_PAD_GPIO_I,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if ((gpioval & 0x8000) == 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China boardinfo->board_type = UNM_BRDTYPE_P3_10G_TRP;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China DPRINTF(0, (CE_WARN, "Discovered board type:0x%x ",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China boardinfo->board_type));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch ((unm_brdtype_t)boardinfo->board_type) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P2_SB35_4G:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.board_type = UNM_NIC_GBE;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P2_SB31_10G:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P2_SB31_10G_IMEZ:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P2_SB31_10G_HMEZ:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P2_SB31_10G_CX4:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P3_HMEZ:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P3_XG_LOM:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P3_10G_CX4:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P3_10G_CX4_LP:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P3_IMEZ:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P3_10G_SFP_PLUS:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P3_10G_XFP:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P3_10000_BASE_T:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.board_type = UNM_NIC_XGBE;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P3_REF_QG:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P3_4_GB:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P3_4_GB_MM:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.board_type = UNM_NIC_GBE;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P1_BD:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P1_SB:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P1_SMAX:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P1_SOCK:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.board_type = UNM_NIC_GBE;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_BRDTYPE_P3_10G_TRP:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->portnum < 2)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.board_type = UNM_NIC_XGBE;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China else
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->ahw.board_type = UNM_NIC_GBE;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China default:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China DPRINTF(1, (CE_WARN, "%s: Unknown(%x)\n", unm_nic_driver_name,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China boardinfo->board_type));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (rv);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/* NIU access sections */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_macaddr_set(struct unm_adapter_s *adapter, __uint8_t *addr)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int ret = 0, i, retry_count = 10;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unsigned char mac_addr[MAX_ADDR_LEN];
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /* For P3, we should not set MAC in HW any more */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
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 /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Flaky Mac address registers on qgig require several writes.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (i = 0; i < retry_count; ++i) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (unm_niu_macaddr_set(adapter, addr) != 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (-1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void) unm_niu_macaddr_get(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (unsigned char *)mac_addr);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (memcmp(mac_addr, addr, 6) == 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s: Flaky MAC addr registers\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_NIC_XGBE:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ret = unm_niu_xg_macaddr_set(adapter, addr);
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 cmn_err(CE_WARN, "\r\nUnknown board type encountered"
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China " while setting the MAC address.\n");
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (-1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (ret);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China#define MTU_FUDGE_FACTOR 100
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_set_mtu(struct unm_adapter_s *adapter, int new_mtu)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China long port = adapter->physical_port;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int ret = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u32 port_mode = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->ahw.revision_id >= NX_P3_A2)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (nx_fw_cmd_set_mtu(adapter, new_mtu));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China new_mtu += MTU_FUDGE_FACTOR; /* so that MAC accepts frames > MTU */
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 unm_nic_write_w0(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIU_GB_MAX_FRAME_SIZE(adapter->physical_port),
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China new_mtu);
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 case UNM_NIC_XGBE:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter, UNM_PORT_MODE_ADDR,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China &port_mode, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (port_mode == UNM_PORT_MODE_802_3_AP) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_write_w0(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIU_AP_MAX_FRAME_SIZE(port), new_mtu);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->physical_port == 0) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_write_w0(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIU_XGE_MAX_FRAME_SIZE,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China new_mtu);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_write_w0(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIU_XG1_MAX_FRAME_SIZE,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China new_mtu);
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 cmn_err(CE_WARN, "%s: Unknown brdtype\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (ret);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_set_promisc_mode(struct unm_adapter_s *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int ret;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->promisc)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
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 ret = unm_niu_set_promiscuous_mode(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIU_PROMISCOUS_MODE);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_NIC_XGBE:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ret = unm_niu_xg_set_promiscuous_mode(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIU_PROMISCOUS_MODE);
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 cmn_err(CE_WARN, "%s: Unknown brdtype\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ret = -1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaif (!ret)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->promisc = 1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (ret);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_unset_promisc_mode(struct unm_adapter_s *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int ret = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * P3 does not unset promiscous mode. Why?
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->ahw.revision_id >= NX_P3_A2) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (!adapter->promisc)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
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 ret = unm_niu_set_promiscuous_mode(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIU_NON_PROMISCOUS_MODE);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_NIC_XGBE:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ret = unm_niu_xg_set_promiscuous_mode(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIU_NON_PROMISCOUS_MODE);
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 cmn_err(CE_WARN, "%s: Unknown brdtype\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ret = -1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (!ret)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->promisc = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (ret);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinalong
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_phy_read(unm_adapter *adapter, long reg,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China __uint32_t *readval)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China long ret = 0;
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 ret = unm_niu_gbe_phy_read(adapter, reg, readval);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_NIC_XGBE:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China DPRINTF(1, (CE_WARN,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China "%s: Function %s is not implemented for XG\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name, __FUNCTION__));
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(1, (CE_WARN, "%s: Unknown board type\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (ret);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinalong
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_nic_init_port(struct unm_adapter_s *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China long portnum = adapter->physical_port;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China long ret = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China long reg = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_niu_gbe_ifmode_t mode_dont_care = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u32 port_mode = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_set_link_parameters(adapter);
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 ret = unm_niu_enable_gbe_port(adapter, mode_dont_care);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_NIC_XGBE:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter, UNM_PORT_MODE_ADDR,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China &port_mode, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (port_mode == UNM_PORT_MODE_802_3_AP) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ret = unm_niu_enable_gbe_port(adapter, mode_dont_care);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_crb_writelit_adapter(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIU_XGE_CONFIG_0 + (0x10000 * portnum), 0x5);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_CRB_READ_CHECK_ADAPTER(UNM_NIU_XGE_CONFIG_1 +
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (0x10000 * portnum), &reg, adapter);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (adapter->ahw.revision_id < NX_P3_A2)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China reg = (reg & ~0x2000UL);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_crb_writelit_adapter(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIU_XGE_CONFIG_1 + (0x10000 * portnum), reg);
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(1, (CE_WARN, "%s: Unknown board type\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (ret);
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_stop_port(struct unm_adapter_s *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
93833965647072e8fb234b6f0cd4060544c6dc4ajing xiong ERI-SUN (void) mac_unregister(adapter->mach);
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 (void) unm_niu_disable_gbe_port(adapter);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case UNM_NIC_XGBE:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void) unm_niu_disable_xg_port(adapter);
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(1, (CE_WARN, "%s: Unknown board type\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name));
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_crb_write_adapter(unsigned long off, void *data,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China struct unm_adapter_s *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void) adapter->unm_nic_hw_write_wx(adapter, off, data, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_crb_read_adapter(unsigned long off, void *data,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China struct unm_adapter_s *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (adapter->unm_nic_hw_read_wx(adapter, off, data, 4));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaint
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinaunm_crb_read_val_adapter(unsigned long off, struct unm_adapter_s *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int data;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter, off, &data, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (data);
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_set_link_parameters(struct unm_adapter_s *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_niu_phy_status_t status;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China uint16_t defval = (uint16_t)-1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_niu_control_t mode;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u32 port_mode = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_read_w0(adapter, UNM_NIU_MODE, (uint32_t *)&mode);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (mode.enable_ge) { // Gb 10/100/1000 Mbps mode
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->unm_nic_hw_read_wx(adapter, UNM_PORT_MODE_ADDR,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China &port_mode, 4);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (port_mode == UNM_PORT_MODE_802_3_AP) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->link_speed = MBPS_1000;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->link_duplex = LINK_DUPLEX_FULL;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (unm_nic_phy_read(adapter,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_NIU_GB_MII_MGMT_ADDR_PHY_STATUS,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (unm_crbword_t *)&status) == 0) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (status.link) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch (status.speed) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 0: adapter->link_speed = MBPS_10;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 1: adapter->link_speed = MBPS_100;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 2: adapter->link_speed = MBPS_1000;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China default:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->link_speed = defval;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China switch (status.duplex) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 0: adapter->link_duplex = LINK_DUPLEX_HALF;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China case 1: adapter->link_duplex = LINK_DUPLEX_FULL;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China default:
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->link_duplex = defval;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China break;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->link_speed = defval;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->link_duplex = defval;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } else {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->link_speed = defval;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->link_duplex = defval;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
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_flash_print(struct unm_adapter_s *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int valid = 1;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_board_info_t *board_info = &(adapter->ahw.boardcfg);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (board_info->magic != UNM_BDINFO_MAGIC) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s UNM Unknown board config, Read 0x%x "
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China "expected as 0x%x\n", unm_nic_driver_name,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China board_info->magic, UNM_BDINFO_MAGIC);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China valid = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (board_info->header_version != UNM_BDINFO_VERSION) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s UNM Unknown board config version."
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China " Read %x, expected %x\n", unm_nic_driver_name,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China board_info->header_version, UNM_BDINFO_VERSION);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China valid = 0;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (valid) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_user_info_t user_info;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int i;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int addr = USER_START;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int *ptr32;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ptr32 = (int *)&user_info;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China for (i = 0; i < sizeof (unm_user_info_t) / sizeof (uint32_t);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China i++) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (rom_fast_read(adapter, addr, ptr32) == -1) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China "%s: ERROR reading %s board userarea.\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name, unm_nic_driver_name);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China ptr32++;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China addr += sizeof (uint32_t);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (verbmsg != 0) {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China char *brd_name;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China GET_BRD_NAME_BY_TYPE(board_info->board_type, brd_name);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_NOTE, "%s %s Board S/N %s Chip id 0x%x\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_driver_name, brd_name, user_info.serial_num,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China board_info->chip_id);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China }
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinastatic int
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinanx_nic_send_cmd_descs(unm_adapter *adapter, cmdDescType0_t *cmd_desc_arr,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int nr_elements)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China struct unm_cmd_buffer *pbuf;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unsigned int i = 0, producer;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China /*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * We need to check if space is available.
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_SPIN_LOCK(&adapter->tx_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China producer = adapter->cmdProducer;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China do {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China pbuf = &adapter->cmd_buf_arr[producer];
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China pbuf->head = pbuf->tail = NULL;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China pbuf->msg = NULL;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void) memcpy(&adapter->ahw.cmdDescHead[producer],
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China &cmd_desc_arr[i], sizeof (cmdDescType0_t));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_desc_dma_sync(adapter->ahw.cmd_desc_dma_handle, producer,
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China 1, adapter->MaxTxDescCount, sizeof (cmdDescType0_t),
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China DDI_DMA_SYNC_FORDEV);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China producer = get_next_index(producer, adapter->MaxTxDescCount);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China i++;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China } while (i != nr_elements);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->cmdProducer = adapter->ahw.cmdProducer = producer;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->freecmds -= i;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China unm_nic_update_cmd_producer(adapter, producer);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China UNM_SPIN_UNLOCK(&adapter->tx_lock);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (0);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinatypedef struct {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u64 qhdr, req_hdr, words[6];
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China} nx_nic_req_t;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinatypedef struct {
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u8 op, tag, mac_addr[6];
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China} nx_mac_req_t;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinastatic void
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinanx_p3_sre_macaddr_change(unm_adapter *adapter, u8 *addr, u8 op)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China nx_nic_req_t req;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China nx_mac_req_t mac_req;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China int rv;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void) memset(&req, 0, sizeof (nx_nic_req_t));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China req.qhdr |= (NX_NIC_REQUEST << 23);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China req.req_hdr |= NX_MAC_EVENT;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China req.req_hdr |= ((u64)adapter->portnum << 16);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China mac_req.op = op;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void) memcpy(&mac_req.mac_addr, addr, 6);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China req.words[0] = HOST_TO_LE_64(*(u64 *)(uintptr_t)&mac_req);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China rv = nx_nic_send_cmd_descs(adapter, (cmdDescType0_t *)&req, 1);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (rv != 0)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "%s%d: Could not send mac update\n",
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China adapter->name, adapter->instance);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinastatic int
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinanx_p3_nic_set_promisc(unm_adapter *adapter, u32 mode)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China nx_nic_req_t req;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China (void) memset(&req, 0, sizeof (nx_nic_req_t));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China req.qhdr |= (NX_HOST_REQUEST << 23);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China req.req_hdr |= NX_NIC_H2C_OPCODE_PROXY_SET_VPORT_MISS_MODE;
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China req.req_hdr |= ((u64)adapter->portnum << 16);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China req.words[0] = HOST_TO_LE_64(mode);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China return (nx_nic_send_cmd_descs(adapter, (cmdDescType0_t *)&req, 1));
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China/*
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China * Currently only invoked at interface initialization time
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China */
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinavoid
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing Chinanx_p3_nic_set_multi(unm_adapter *adapter)
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China{
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China u8 bcast_addr[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China if (nx_p3_nic_set_promisc(adapter, VPORT_MISS_MODE_ACCEPT_ALL))
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN, "Could not set promisc mode\n");
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China nx_p3_sre_macaddr_change(adapter, adapter->mac_addr, NETXEN_MAC_ADD);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China nx_p3_sre_macaddr_change(adapter, bcast_addr, NETXEN_MAC_ADD);
9a5557fdd04be37785607871e8d4189e39490129lucy wang - Sun Microsystems - Beijing China}