annotate usr/src/uts/common/io/ntxn/unm_gem.c @ 7956:59ff93e4da95

PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver 6472698 NetXen 1Gb/10Gb nic driver
author lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
date Tue, 28 Oct 2008 10:06:13 +0800
parents
children 5dca9cd6354a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7956
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1 /*
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
2 * CDDL HEADER START
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
3 *
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
4 * The contents of this file are subject to the terms of the
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
5 * Common Development and Distribution License (the "License").
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
6 * You may not use this file except in compliance with the License.
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
7 *
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
9 * or http://www.opensolaris.org/os/licensing.
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
10 * See the License for the specific language governing permissions
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
11 * and limitations under the License.
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
12 *
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
13 * When distributing Covered Code, include this CDDL HEADER in each
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
15 * If applicable, add the following below this CDDL HEADER, with the
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
16 * fields enclosed by brackets "[]" replaced with your own identifying
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
17 * information: Portions Copyright [yyyy] [name of copyright owner]
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
18 *
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
19 * CDDL HEADER END
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
20 */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
21 /*
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
22 * Copyright 2008 NetXen, Inc. All rights reserved.
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
23 * Use is subject to license terms.
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
24 */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
25 /*
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
26 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
27 * Use is subject to license terms.
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
28 */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
29 #include <sys/types.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
30 #include <sys/conf.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
31 #include <sys/debug.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
32 #include <sys/stropts.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
33 #include <sys/stream.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
34 #include <sys/strlog.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
35 #include <sys/kmem.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
36 #include <sys/stat.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
37 #include <sys/kstat.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
38 #include <sys/vtrace.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
39 #include <sys/dlpi.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
40 #include <sys/strsun.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
41 #include <sys/ethernet.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
42 #include <sys/modctl.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
43 #include <sys/errno.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
44 #include <sys/dditypes.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
45 #include <sys/ddi.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
46 #include <sys/sunddi.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
47 #include <sys/sysmacros.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
48 #include <sys/pci.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
49 #include <sys/ddi_intr.h>
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
50
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
51 #include "unm_nic.h"
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
52 #include "unm_nic_hw.h"
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
53 #include "unm_brdcfg.h"
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
54 #include "nic_cmn.h"
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
55 #include "nic_phan_reg.h"
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
56 #include "unm_nic_ioctl.h"
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
57 #include "nx_hw_pci_regs.h"
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
58
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
59 char ident[] = "Netxen nic driver v" UNM_NIC_VERSIONID;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
60 char unm_nic_driver_name[] = "ntxn";
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
61 int verbmsg = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
62
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
63 static char txbcopythreshold_propname[] = "tx_bcopy_threshold";
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
64 static char rxbcopythreshold_propname[] = "rx_bcopy_threshold";
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
65 static char rxringsize_propname[] = "rx_ring_size";
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
66 static char jumborxringsize_propname[] = "jumbo_rx_ring_size";
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
67 static char txringsize_propname[] = "tx_ring_size";
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
68 static char defaultmtu_propname[] = "default_mtu";
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
69 static char dmesg_propname[] = "verbose_driver";
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
70
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
71 #define STRUCT_COPY(a, b) bcopy(&(b), &(a), sizeof (a))
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
72
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
73 extern int unm_register_mac(unm_adapter *adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
74 extern void unm_fini_kstats(unm_adapter* adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
75 extern void unm_nic_remove(unm_adapter *adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
76 extern int unm_nic_suspend(unm_adapter *);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
77 extern uint_t unm_intr(caddr_t, caddr_t);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
78
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
79 /* Data access requirements. */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
80 static struct ddi_device_acc_attr unm_dev_attr = {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
81 DDI_DEVICE_ATTR_V0,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
82 DDI_STRUCTURE_LE_ACC,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
83 DDI_STRICTORDER_ACC
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
84 };
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
85
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
86 static struct ddi_device_acc_attr unm_buf_attr = {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
87 DDI_DEVICE_ATTR_V0,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
88 DDI_NEVERSWAP_ACC,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
89 DDI_STRICTORDER_ACC
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
90 };
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
91
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
92 static ddi_dma_attr_t unm_dma_attr_desc = {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
93 DMA_ATTR_V0, /* dma_attr_version */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
94 0, /* dma_attr_addr_lo */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
95 0xffffffffull, /* dma_attr_addr_hi */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
96 0x000fffffull, /* dma_attr_count_max */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
97 4096, /* dma_attr_align */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
98 0x000fffffull, /* dma_attr_burstsizes */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
99 4, /* dma_attr_minxfer */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
100 0x003fffffull, /* dma_attr_maxxfer */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
101 0xffffffffull, /* dma_attr_seg */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
102 1, /* dma_attr_sgllen */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
103 1, /* dma_attr_granular */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
104 0 /* dma_attr_flags */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
105 };
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
106
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
107 static ddi_dma_attr_t unm_dma_attr_rxbuf = {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
108 DMA_ATTR_V0, /* dma_attr_version */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
109 0, /* dma_attr_addr_lo */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
110 0x7ffffffffULL, /* dma_attr_addr_hi */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
111 0xffffull, /* dma_attr_count_max */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
112 4096, /* dma_attr_align */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
113 0xfff8ull, /* dma_attr_burstsizes */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
114 1, /* dma_attr_minxfer */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
115 0xffffffffull, /* dma_attr_maxxfer */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
116 0xffffull, /* dma_attr_seg */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
117 1, /* dma_attr_sgllen */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
118 1, /* dma_attr_granular */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
119 0 /* dma_attr_flags */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
120 };
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
121
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
122 static ddi_dma_attr_t unm_dma_attr_cmddesc = {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
123 DMA_ATTR_V0, /* dma_attr_version */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
124 0, /* dma_attr_addr_lo */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
125 0x7ffffffffULL, /* dma_attr_addr_hi */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
126 0xffffull, /* dma_attr_count_max */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
127 1, /* dma_attr_align */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
128 0xfff8ull, /* dma_attr_burstsizes */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
129 1, /* dma_attr_minxfer */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
130 0xffff0ull, /* dma_attr_maxxfer */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
131 0xffffull, /* dma_attr_seg */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
132 16, /* dma_attr_sgllen */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
133 1, /* dma_attr_granular */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
134 0 /* dma_attr_flags */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
135 };
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
136
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
137 static struct nx_legacy_intr_set legacy_intr[] = NX_LEGACY_INTR_CONFIG;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
138
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
139 static int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
140 check_hw_init(struct unm_adapter_s *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
141 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
142 u32 val;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
143 int ret = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
144
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
145 adapter->unm_nic_hw_read_wx(adapter, UNM_CAM_RAM(0x1fc), &val, 4);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
146 if (val == 0x55555555) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
147 /* This is the first boot after power up */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
148 adapter->unm_nic_hw_read_wx(adapter, UNM_ROMUSB_GLB_SW_RESET,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
149 &val, 4);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
150 if (val != 0x80000f)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
151 ret = -1;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
152
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
153 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
154 /* Start P2 boot loader */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
155 adapter->unm_nic_pci_write_normalize(adapter,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
156 UNM_CAM_RAM(0x1fc), UNM_BDINFO_MAGIC);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
157 adapter->unm_nic_pci_write_normalize(adapter,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
158 UNM_ROMUSB_GLB_PEGTUNE_DONE, 1);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
159 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
160 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
161 return (ret);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
162 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
163
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
164
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
165 static int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
166 unm_get_flash_block(unm_adapter *adapter, int base, int size, uint32_t *buf)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
167 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
168 int i, addr;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
169 uint32_t *ptr32;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
170
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
171 addr = base;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
172 ptr32 = buf;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
173 for (i = 0; i < size / sizeof (uint32_t); i++) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
174 if (rom_fast_read(adapter, addr, (int *)ptr32) == -1)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
175 return (-1);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
176 ptr32++;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
177 addr += sizeof (uint32_t);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
178 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
179 if ((char *)buf + size > (char *)ptr32) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
180 int local;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
181
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
182 if (rom_fast_read(adapter, addr, &local) == -1)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
183 return (-1);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
184 (void) memcpy(ptr32, &local,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
185 (uintptr_t)((char *)buf + size) - (uintptr_t)(char *)ptr32);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
186 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
187
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
188 return (0);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
189 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
190
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
191
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
192 static int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
193 get_flash_mac_addr(struct unm_adapter_s *adapter, u64 mac[])
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
194 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
195 uint32_t *pmac = (uint32_t *)&mac[0];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
196
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
197 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
198 uint32_t temp, crbaddr;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
199 uint16_t *pmac16 = (uint16_t *)pmac;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
200
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
201 // FOR P3, read from CAM RAM
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
202
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
203 int pci_func = adapter->ahw.pci_func;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
204 pmac16 += (4*pci_func);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
205 crbaddr = CRB_MAC_BLOCK_START + (4 * ((pci_func/2) * 3)) +
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
206 (4 * (pci_func & 1));
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
207
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
208 adapter->unm_nic_hw_read_wx(adapter, crbaddr, &temp, 4);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
209 if (pci_func & 1) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
210 *pmac16++ = (temp >> 16);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
211 adapter->unm_nic_hw_read_wx(adapter, crbaddr+4,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
212 &temp, 4);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
213 *pmac16++ = (temp & 0xffff);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
214 *pmac16++ = (temp >> 16);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
215 *pmac16 = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
216 } else {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
217 *pmac16++ = (temp & 0xffff);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
218 *pmac16++ = (temp >> 16);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
219 adapter->unm_nic_hw_read_wx(adapter, crbaddr+4,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
220 &temp, 4);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
221 *pmac16++ = (temp & 0xffff);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
222 *pmac16 = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
223 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
224 return (0);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
225 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
226
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
227
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
228 if (unm_get_flash_block(adapter, USER_START +
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
229 offsetof(unm_user_info_t, mac_addr), FLASH_NUM_PORTS * sizeof (U64),
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
230 pmac) == -1)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
231 return (-1);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
232
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
233 if (*mac == ~0ULL) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
234 if (unm_get_flash_block(adapter, USER_START_OLD +
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
235 offsetof(unm_old_user_info_t, mac_addr),
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
236 FLASH_NUM_PORTS * sizeof (U64), pmac) == -1)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
237 return (-1);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
238
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
239 if (*mac == ~0ULL)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
240 return (-1);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
241 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
242
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
243 return (0);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
244 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
245
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
246 static int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
247 is_flash_supported(unm_adapter *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
248 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
249 int locs[] = { 0, 0x4, 0x100, 0x4000, 0x4128 };
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
250 int addr, val01, val02, i, j;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
251
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
252 /* if the flash size less than 4Mb, make huge war cry and die */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
253 for (j = 1; j < 4; j++) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
254 addr = j * 0x100000;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
255 for (i = 0; i < (sizeof (locs) / sizeof (locs[0])); i++) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
256 if (rom_fast_read(adapter, locs[i], &val01) == 0 &&
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
257 rom_fast_read(adapter, (addr + locs[i]),
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
258 &val02) == 0) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
259 if (val01 == val02)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
260 return (-1);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
261 } else {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
262 return (-1);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
263 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
264 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
265 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
266
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
267 return (0);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
268 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
269
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
270 static int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
271 unm_initialize_dummy_dma(unm_adapter *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
272 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
273 uint32_t hi, lo, temp;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
274 ddi_dma_cookie_t cookie;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
275
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
276 if (unm_pci_alloc_consistent(adapter, UNM_HOST_DUMMY_DMA_SIZE,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
277 (caddr_t *)&adapter->dummy_dma.addr, &cookie,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
278 &adapter->dummy_dma.dma_handle,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
279 &adapter->dummy_dma.acc_handle) != DDI_SUCCESS) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
280 cmn_err(CE_WARN, "%s%d: Unable to alloc dummy dma buf\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
281 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
282 return (DDI_ENOMEM);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
283 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
284
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
285 adapter->dummy_dma.phys_addr = cookie.dmac_laddress;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
286
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
287 hi = (adapter->dummy_dma.phys_addr >> 32) & 0xffffffff;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
288 lo = adapter->dummy_dma.phys_addr & 0xffffffff;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
289
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
290 UNM_READ_LOCK(&adapter->adapter_lock);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
291 adapter->unm_nic_hw_write_wx(adapter, CRB_HOST_DUMMY_BUF_ADDR_HI,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
292 &hi, 4);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
293 adapter->unm_nic_hw_write_wx(adapter, CRB_HOST_DUMMY_BUF_ADDR_LO,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
294 &lo, 4);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
295 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
296 temp = DUMMY_BUF_INIT;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
297 adapter->unm_nic_hw_write_wx(adapter, CRB_HOST_DUMMY_BUF,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
298 &temp, 4);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
299 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
300 UNM_READ_UNLOCK(&adapter->adapter_lock);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
301
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
302 return (DDI_SUCCESS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
303 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
304
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
305 void
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
306 unm_free_dummy_dma(unm_adapter *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
307 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
308 if (adapter->dummy_dma.addr) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
309 unm_pci_free_consistent(&adapter->dummy_dma.dma_handle,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
310 &adapter->dummy_dma.acc_handle);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
311 adapter->dummy_dma.addr = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
312 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
313 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
314
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
315 static int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
316 unm_pci_cfg_init(unm_adapter *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
317 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
318 hardware_context *hwcontext;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
319 ddi_acc_handle_t pci_cfg_hdl;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
320 int *reg_options;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
321 dev_info_t *dip;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
322 uint_t noptions;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
323 int ret;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
324 uint16_t vendor_id, pci_cmd_word;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
325 uint8_t base_class, sub_class, prog_class;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
326 uint32_t pexsizes;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
327 struct nx_legacy_intr_set *legacy_intrp;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
328
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
329 hwcontext = &adapter->ahw;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
330 pci_cfg_hdl = adapter->pci_cfg_handle;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
331 dip = adapter->dip;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
332
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
333 vendor_id = pci_config_get16(pci_cfg_hdl, PCI_CONF_VENID);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
334
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
335 if (vendor_id != 0x4040) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
336 cmn_err(CE_WARN, "%s%d: vendor id %x not 0x4040\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
337 adapter->name, adapter->instance, vendor_id);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
338 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
339 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
340
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
341 ret = ddi_prop_lookup_int_array(DDI_DEV_T_ANY,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
342 dip, 0, "reg", &reg_options, &noptions);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
343 if (ret != DDI_PROP_SUCCESS) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
344 cmn_err(CE_WARN, "%s%d: Could not determine reg property\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
345 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
346 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
347 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
348
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
349 hwcontext->pci_func = (reg_options[0] >> 8) & 0x7;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
350 ddi_prop_free(reg_options);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
351
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
352 base_class = pci_config_get8(pci_cfg_hdl, PCI_CONF_BASCLASS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
353 sub_class = pci_config_get8(pci_cfg_hdl, PCI_CONF_SUBCLASS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
354 prog_class = pci_config_get8(pci_cfg_hdl, PCI_CONF_PROGCLASS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
355
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
356 /*
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
357 * Need this check so that MEZZ card mgmt interface ntxn0 could fail
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
358 * attach & return and proceed to next interfaces ntxn1 and ntxn2
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
359 */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
360 if ((base_class != 0x02) || (sub_class != 0) || (prog_class != 0)) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
361 cmn_err(CE_WARN, "%s%d: Base/sub/prog class problem %d/%d/%d\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
362 adapter->name, adapter->instance, base_class, sub_class,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
363 prog_class);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
364 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
365 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
366
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
367 hwcontext->revision_id = pci_config_get8(pci_cfg_hdl, PCI_CONF_REVID);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
368
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
369 /*
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
370 * Refuse to work with dubious P3 cards.
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
371 */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
372 if ((hwcontext->revision_id >= NX_P3_A0) &&
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
373 (hwcontext->revision_id < NX_P3_B1)) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
374 cmn_err(CE_WARN, "%s%d: NetXen chip revs between 0x%x-0x%x "
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
375 "is unsupported\n", adapter->name, adapter->instance,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
376 NX_P3_A0, NX_P3_B0);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
377 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
378 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
379
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
380 /*
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
381 * Save error reporting settings; clear [19:16] error status bits.
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
382 * Set max read request [14:12] to 0 for 128 bytes. Set max payload
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
383 * size[7:5] to 0 for for 128 bytes.
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
384 */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
385 if (NX_IS_REVISION_P2(hwcontext->revision_id)) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
386 pexsizes = pci_config_get32(pci_cfg_hdl, 0xd8);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
387 pexsizes &= 7;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
388 pexsizes |= 0xF0000;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
389 pci_config_put32(pci_cfg_hdl, 0xd8, pexsizes);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
390 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
391
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
392 pci_cmd_word = pci_config_get16(pci_cfg_hdl, PCI_CONF_COMM);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
393 pci_cmd_word |= (PCI_COMM_INTX_DISABLE | PCI_COMM_SERR_ENABLE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
394 pci_config_put16(pci_cfg_hdl, PCI_CONF_COMM, pci_cmd_word);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
395
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
396 if (hwcontext->revision_id >= NX_P3_B0)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
397 legacy_intrp = &legacy_intr[hwcontext->pci_func];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
398 else
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
399 legacy_intrp = &legacy_intr[0];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
400
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
401 adapter->legacy_intr.int_vec_bit = legacy_intrp->int_vec_bit;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
402 adapter->legacy_intr.tgt_status_reg = legacy_intrp->tgt_status_reg;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
403 adapter->legacy_intr.tgt_mask_reg = legacy_intrp->tgt_mask_reg;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
404 adapter->legacy_intr.pci_int_reg = legacy_intrp->pci_int_reg;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
405
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
406 return (DDI_SUCCESS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
407 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
408
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
409 void
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
410 unm_free_tx_dmahdl(unm_adapter *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
411 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
412 int i;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
413 unm_dmah_node_t *nodep;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
414
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
415 mutex_enter(&adapter->tx_lock);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
416 nodep = &adapter->tx_dma_hdls[0];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
417
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
418 for (i = 0; i < adapter->MaxTxDescCount + EXTRA_HANDLES; i++) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
419 if (nodep->dmahdl != NULL) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
420 ddi_dma_free_handle(&nodep->dmahdl);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
421 nodep->dmahdl = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
422 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
423 nodep->next = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
424 nodep++;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
425 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
426
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
427 adapter->dmahdl_pool = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
428 adapter->freehdls = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
429 mutex_exit(&adapter->tx_lock);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
430 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
431
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
432 static int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
433 unm_alloc_tx_dmahdl(unm_adapter *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
434 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
435 int i;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
436 unm_dmah_node_t *nodep = &adapter->tx_dma_hdls[0];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
437
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
438 mutex_enter(&adapter->tx_lock);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
439 for (i = 0; i < adapter->MaxTxDescCount + EXTRA_HANDLES; i++) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
440 if (ddi_dma_alloc_handle(adapter->dip, &unm_dma_attr_cmddesc,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
441 DDI_DMA_DONTWAIT, NULL, &nodep->dmahdl) != DDI_SUCCESS) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
442 mutex_exit(&adapter->tx_lock);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
443 goto alloc_hdl_fail;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
444 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
445
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
446 if (i > 0)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
447 nodep->next = nodep - 1;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
448 nodep++;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
449 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
450
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
451 adapter->dmahdl_pool = nodep - 1;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
452 adapter->freehdls = i;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
453 mutex_exit(&adapter->tx_lock);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
454
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
455 return (DDI_SUCCESS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
456
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
457 alloc_hdl_fail:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
458 unm_free_tx_dmahdl(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
459 cmn_err(CE_WARN, "%s%d: Failed transmit ring dma handle allocation\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
460 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
461 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
462 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
463
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
464 static void
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
465 unm_free_dma_mem(dma_area_t *dma_p)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
466 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
467 if (dma_p->dma_hdl != NULL) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
468 if (dma_p->ncookies) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
469 (void) ddi_dma_unbind_handle(dma_p->dma_hdl);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
470 dma_p->ncookies = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
471 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
472 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
473 if (dma_p->acc_hdl != NULL) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
474 ddi_dma_mem_free(&dma_p->acc_hdl);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
475 dma_p->acc_hdl = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
476 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
477 if (dma_p->dma_hdl != NULL) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
478 ddi_dma_free_handle(&dma_p->dma_hdl);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
479 dma_p->dma_hdl = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
480 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
481 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
482
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
483 static int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
484 unm_alloc_dma_mem(unm_adapter *adapter, int size, uint_t dma_flag,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
485 ddi_dma_attr_t *dma_attr_p, dma_area_t *dma_p)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
486 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
487 int ret;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
488 caddr_t vaddr;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
489 size_t actual_size;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
490 ddi_dma_cookie_t cookie;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
491
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
492 ret = ddi_dma_alloc_handle(adapter->dip,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
493 dma_attr_p, DDI_DMA_DONTWAIT,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
494 NULL, &dma_p->dma_hdl);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
495 if (ret != DDI_SUCCESS) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
496 cmn_err(CE_WARN, "%s%d: Failed ddi_dma_alloc_handle\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
497 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
498 goto dma_mem_fail;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
499 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
500
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
501 ret = ddi_dma_mem_alloc(dma_p->dma_hdl,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
502 size, &adapter->gc_attr_desc,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
503 dma_flag & (DDI_DMA_STREAMING | DDI_DMA_CONSISTENT),
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
504 DDI_DMA_DONTWAIT, NULL, &vaddr, &actual_size,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
505 &dma_p->acc_hdl);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
506 if (ret != DDI_SUCCESS) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
507 cmn_err(CE_WARN, "%s%d: ddi_dma_mem_alloc() failed\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
508 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
509 goto dma_mem_fail;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
510 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
511
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
512 if (actual_size < size) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
513 cmn_err(CE_WARN, "%s%d: ddi_dma_mem_alloc() allocated small\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
514 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
515 goto dma_mem_fail;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
516 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
517
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
518 ret = ddi_dma_addr_bind_handle(dma_p->dma_hdl,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
519 NULL, vaddr, size, dma_flag, DDI_DMA_DONTWAIT,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
520 NULL, &cookie, &dma_p->ncookies);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
521 if (ret != DDI_DMA_MAPPED || dma_p->ncookies != 1) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
522 cmn_err(CE_WARN, "%s%d: ddi_dma_addr_bind_handle() failed, "
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
523 "%d, %d\n", adapter->name, adapter->instance, ret,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
524 dma_p->ncookies);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
525 goto dma_mem_fail;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
526 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
527
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
528 dma_p->dma_addr = cookie.dmac_laddress;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
529 dma_p->vaddr = vaddr;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
530 (void) memset(vaddr, 0, size);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
531
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
532 return (DDI_SUCCESS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
533
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
534 dma_mem_fail:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
535 unm_free_dma_mem(dma_p);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
536 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
537 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
538
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
539 void
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
540 unm_free_tx_buffers(unm_adapter *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
541 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
542 int i;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
543 dma_area_t *dma_p;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
544 struct unm_cmd_buffer *cmd_buf;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
545 unm_dmah_node_t *nodep;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
546
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
547 cmd_buf = &adapter->cmd_buf_arr[0];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
548
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
549 for (i = 0; i < adapter->MaxTxDescCount; i++) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
550 dma_p = &cmd_buf->dma_area;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
551 unm_free_dma_mem(dma_p);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
552 nodep = cmd_buf->head;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
553 while (nodep != NULL) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
554 (void) ddi_dma_unbind_handle(nodep->dmahdl);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
555 nodep = nodep->next;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
556 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
557 if (cmd_buf->msg != NULL)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
558 freemsg(cmd_buf->msg);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
559 cmd_buf++;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
560 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
561 adapter->freecmds = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
562 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
563
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
564 static int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
565 unm_alloc_tx_buffers(unm_adapter *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
566 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
567 int i, ret, size, allocated = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
568 dma_area_t *dma_p;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
569 struct unm_cmd_buffer *cmd_buf;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
570
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
571 cmd_buf = &adapter->cmd_buf_arr[0];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
572 size = adapter->maxmtu;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
573
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
574 for (i = 0; i < adapter->MaxTxDescCount; i++) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
575 dma_p = &cmd_buf->dma_area;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
576 ret = unm_alloc_dma_mem(adapter, size,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
577 DDI_DMA_WRITE | DDI_DMA_STREAMING,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
578 &unm_dma_attr_rxbuf, dma_p);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
579 if (ret != DDI_SUCCESS)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
580 goto alloc_tx_buffer_fail;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
581
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
582 allocated++;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
583 cmd_buf++;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
584 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
585 adapter->freecmds = adapter->MaxTxDescCount;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
586 return (DDI_SUCCESS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
587
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
588 alloc_tx_buffer_fail:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
589
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
590 cmd_buf = &adapter->cmd_buf_arr[0];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
591 for (i = 0; i < allocated; i++) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
592 dma_p = &cmd_buf->dma_area;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
593 unm_free_dma_mem(dma_p);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
594 cmd_buf++;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
595 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
596 cmn_err(CE_WARN, "%s%d: Failed transmit ring memory allocation\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
597 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
598 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
599 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
600
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
601 /*
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
602 * Called by freemsg() to "free" the resource.
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
603 */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
604 static void
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
605 unm_rx_buffer_recycle(char *arg)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
606 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
607 unm_rx_buffer_t *rx_buffer = (unm_rx_buffer_t *)(uintptr_t)arg;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
608 unm_adapter *adapter = rx_buffer->adapter;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
609 unm_rcv_desc_ctx_t *rcv_desc = rx_buffer->rcv_desc;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
610
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
611 rx_buffer->mp = desballoc(rx_buffer->dma_info.vaddr,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
612 rcv_desc->dma_size, 0, &rx_buffer->rx_recycle);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
613
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
614 if (rx_buffer->mp == NULL)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
615 adapter->stats.desballocfailed++;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
616
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
617 mutex_enter(rcv_desc->recycle_lock);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
618 rx_buffer->next = rcv_desc->recycle_list;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
619 rcv_desc->recycle_list = rx_buffer;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
620 rcv_desc->rx_buf_recycle++;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
621 mutex_exit(rcv_desc->recycle_lock);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
622 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
623
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
624 void
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
625 unm_destroy_rx_ring(unm_rcv_desc_ctx_t *rcv_desc)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
626 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
627 uint32_t i, total_buf;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
628 unm_rx_buffer_t *buf_pool;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
629
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
630 total_buf = rcv_desc->rx_buf_total;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
631 buf_pool = rcv_desc->rx_buf_pool;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
632 for (i = 0; i < total_buf; i++) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
633 if (buf_pool->mp != NULL)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
634 freemsg(buf_pool->mp);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
635 unm_free_dma_mem(&buf_pool->dma_info);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
636 buf_pool++;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
637 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
638
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
639 kmem_free(rcv_desc->rx_buf_pool, sizeof (unm_rx_buffer_t) * total_buf);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
640 rcv_desc->rx_buf_pool = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
641 rcv_desc->pool_list = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
642 rcv_desc->recycle_list = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
643 rcv_desc->rx_buf_free = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
644
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
645 mutex_destroy(rcv_desc->pool_lock);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
646 mutex_destroy(rcv_desc->recycle_lock);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
647 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
648
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
649 static int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
650 unm_create_rx_ring(unm_adapter *adapter, unm_rcv_desc_ctx_t *rcv_desc)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
651 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
652 int i, ret, allocate = 0, sreoff;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
653 uint32_t total_buf;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
654 dma_area_t *dma_info;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
655 unm_rx_buffer_t *rx_buffer;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
656
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
657 sreoff = adapter->ahw.cut_through ? 0 : IP_ALIGNMENT_BYTES;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
658
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
659 /* temporarily set the total rx buffers two times of MaxRxDescCount */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
660 total_buf = rcv_desc->rx_buf_total = rcv_desc->MaxRxDescCount * 2;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
661
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
662 rcv_desc->rx_buf_pool = kmem_zalloc(sizeof (unm_rx_buffer_t) *
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
663 total_buf, KM_SLEEP);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
664 rx_buffer = rcv_desc->rx_buf_pool;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
665 for (i = 0; i < total_buf; i++) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
666 dma_info = &rx_buffer->dma_info;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
667 ret = unm_alloc_dma_mem(adapter, rcv_desc->buf_size,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
668 DDI_DMA_READ | DDI_DMA_STREAMING,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
669 &unm_dma_attr_rxbuf, dma_info);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
670 if (ret != DDI_SUCCESS)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
671 goto alloc_mem_failed;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
672 else {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
673 allocate++;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
674 dma_info->vaddr = (void *) ((char *)dma_info->vaddr +
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
675 sreoff);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
676 dma_info->dma_addr += sreoff;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
677 rx_buffer->rx_recycle.free_func =
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
678 unm_rx_buffer_recycle;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
679 rx_buffer->rx_recycle.free_arg = (caddr_t)rx_buffer;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
680 rx_buffer->next = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
681 rx_buffer->mp = desballoc(dma_info->vaddr,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
682 rcv_desc->dma_size, 0, &rx_buffer->rx_recycle);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
683 if (rx_buffer->mp == NULL)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
684 adapter->stats.desballocfailed++;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
685 rx_buffer->rcv_desc = rcv_desc;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
686 rx_buffer->adapter = adapter;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
687 rx_buffer++;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
688 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
689 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
690
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
691 for (i = 0; i < (total_buf - 1); i++) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
692 rcv_desc->rx_buf_pool[i].next = &rcv_desc->rx_buf_pool[i + 1];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
693 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
694
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
695 rcv_desc->pool_list = rcv_desc->rx_buf_pool;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
696 rcv_desc->recycle_list = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
697 rcv_desc->rx_buf_free = total_buf;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
698
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
699 mutex_init(rcv_desc->pool_lock, NULL,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
700 MUTEX_DRIVER, (DDI_INTR_PRI(adapter->intr_pri)));
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
701 mutex_init(rcv_desc->recycle_lock, NULL,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
702 MUTEX_DRIVER, (DDI_INTR_PRI(adapter->intr_pri)));
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
703
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
704 return (DDI_SUCCESS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
705
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
706 alloc_mem_failed:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
707 rx_buffer = rcv_desc->rx_buf_pool;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
708 for (i = 0; i < allocate; i++, rx_buffer++) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
709 dma_info = &rx_buffer->dma_info;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
710 if (rx_buffer->mp != NULL)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
711 freemsg(rx_buffer->mp);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
712 unm_free_dma_mem(dma_info);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
713 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
714
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
715 kmem_free(rcv_desc->rx_buf_pool, sizeof (unm_rx_buffer_t) * total_buf);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
716 rcv_desc->rx_buf_pool = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
717
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
718 cmn_err(CE_WARN, "%s%d: Failed receive ring resource allocation\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
719 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
720 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
721 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
722
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
723 static void
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
724 unm_check_options(unm_adapter *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
725 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
726 int i, ring, tx_desc, rx_desc, rx_jdesc;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
727 unm_recv_context_t *recv_ctx;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
728 unm_rcv_desc_ctx_t *rcv_desc;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
729 uint8_t revid = adapter->ahw.revision_id;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
730 dev_info_t *dip = adapter->dip;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
731
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
732 verbmsg = ddi_prop_get_int(DDI_DEV_T_ANY, dip, DDI_PROP_DONTPASS,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
733 dmesg_propname, 0);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
734
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
735 adapter->tx_bcopy_threshold = ddi_prop_get_int(DDI_DEV_T_ANY,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
736 dip, DDI_PROP_DONTPASS, txbcopythreshold_propname,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
737 UNM_TX_BCOPY_THRESHOLD);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
738 adapter->rx_bcopy_threshold = ddi_prop_get_int(DDI_DEV_T_ANY,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
739 dip, DDI_PROP_DONTPASS, rxbcopythreshold_propname,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
740 UNM_RX_BCOPY_THRESHOLD);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
741
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
742 tx_desc = ddi_prop_get_int(DDI_DEV_T_ANY, dip, DDI_PROP_DONTPASS,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
743 txringsize_propname, MAX_CMD_DESCRIPTORS_HOST);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
744 if (tx_desc >= 256 && tx_desc <= MAX_CMD_DESCRIPTORS &&
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
745 !(tx_desc & (tx_desc - 1))) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
746 adapter->MaxTxDescCount = tx_desc;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
747 } else {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
748 cmn_err(CE_WARN, "%s%d: TxRingSize defaulting to %d, since "
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
749 ".conf value is not 2 power aligned in range 256 - %d\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
750 adapter->name, adapter->instance, MAX_CMD_DESCRIPTORS_HOST,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
751 MAX_CMD_DESCRIPTORS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
752 adapter->MaxTxDescCount = MAX_CMD_DESCRIPTORS_HOST;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
753 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
754
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
755 rx_desc = ddi_prop_get_int(DDI_DEV_T_ANY, dip, DDI_PROP_DONTPASS,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
756 rxringsize_propname, MAX_RCV_DESCRIPTORS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
757 if (rx_desc >= NX_MIN_DRIVER_RDS_SIZE &&
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
758 rx_desc <= NX_MAX_SUPPORTED_RDS_SIZE &&
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
759 !(rx_desc & (rx_desc - 1))) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
760 adapter->MaxRxDescCount = rx_desc;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
761 } else {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
762 cmn_err(CE_WARN, "%s%d: RxRingSize defaulting to %d, since "
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
763 ".conf value is not 2 power aligned in range %d - %d\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
764 adapter->name, adapter->instance, MAX_RCV_DESCRIPTORS,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
765 NX_MIN_DRIVER_RDS_SIZE, NX_MAX_SUPPORTED_RDS_SIZE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
766 adapter->MaxRxDescCount = MAX_RCV_DESCRIPTORS;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
767 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
768
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
769 rx_jdesc = ddi_prop_get_int(DDI_DEV_T_ANY, dip, DDI_PROP_DONTPASS,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
770 jumborxringsize_propname, MAX_JUMBO_RCV_DESCRIPTORS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
771 if (rx_jdesc >= NX_MIN_DRIVER_RDS_SIZE &&
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
772 rx_jdesc <= NX_MAX_SUPPORTED_JUMBO_RDS_SIZE &&
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
773 !(rx_jdesc & (rx_jdesc - 1))) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
774 adapter->MaxJumboRxDescCount = rx_jdesc;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
775 } else {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
776 cmn_err(CE_WARN, "%s%d: JumboRingSize defaulting to %d, since "
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
777 ".conf value is not 2 power aligned in range %d - %d\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
778 adapter->name, adapter->instance, MAX_JUMBO_RCV_DESCRIPTORS,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
779 NX_MIN_DRIVER_RDS_SIZE, NX_MAX_SUPPORTED_JUMBO_RDS_SIZE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
780 adapter->MaxJumboRxDescCount = MAX_JUMBO_RCV_DESCRIPTORS;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
781 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
782
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
783 adapter->MaxLroRxDescCount = MAX_LRO_RCV_DESCRIPTORS;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
784
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
785 adapter->mtu = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
786 DDI_PROP_DONTPASS, defaultmtu_propname, MTU_SIZE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
787
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
788 if (adapter->mtu < MTU_SIZE) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
789 cmn_err(CE_WARN, "Raising mtu to %d\n", MTU_SIZE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
790 adapter->mtu = MTU_SIZE;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
791 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
792 adapter->maxmtu = NX_IS_REVISION_P2(revid) ? P2_MAX_MTU : P3_MAX_MTU;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
793 if (adapter->mtu > adapter->maxmtu) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
794 cmn_err(CE_WARN, "Lowering mtu to %d\n", adapter->maxmtu);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
795 adapter->mtu = adapter->maxmtu;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
796 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
797
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
798 adapter->maxmtu += NX_MAX_ETHERHDR;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
799
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
800 for (i = 0; i < MAX_RCV_CTX; ++i) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
801 recv_ctx = &adapter->recv_ctx[i];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
802
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
803 for (ring = 0; ring < adapter->max_rds_rings; ring++) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
804 rcv_desc = &recv_ctx->rcv_desc[ring];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
805
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
806 switch (RCV_DESC_TYPE(ring)) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
807 case RCV_DESC_NORMAL:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
808 rcv_desc->MaxRxDescCount =
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
809 adapter->MaxRxDescCount;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
810 if (adapter->ahw.cut_through) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
811 rcv_desc->dma_size =
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
812 NX_CT_DEFAULT_RX_BUF_LEN;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
813 rcv_desc->buf_size = rcv_desc->dma_size;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
814 } else {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
815 rcv_desc->dma_size =
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
816 NX_RX_NORMAL_BUF_MAX_LEN;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
817 rcv_desc->buf_size =
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
818 rcv_desc->dma_size +
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
819 IP_ALIGNMENT_BYTES;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
820 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
821 break;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
822
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
823 case RCV_DESC_JUMBO:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
824 rcv_desc->MaxRxDescCount =
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
825 adapter->MaxJumboRxDescCount;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
826 if (adapter->ahw.cut_through) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
827 rcv_desc->dma_size =
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
828 rcv_desc->buf_size =
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
829 NX_P3_RX_JUMBO_BUF_MAX_LEN;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
830 } else {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
831 if (NX_IS_REVISION_P2(revid))
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
832 rcv_desc->dma_size =
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
833 NX_P2_RX_JUMBO_BUF_MAX_LEN;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
834 else
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
835 rcv_desc->dma_size =
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
836 NX_P3_RX_JUMBO_BUF_MAX_LEN;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
837 rcv_desc->buf_size =
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
838 rcv_desc->dma_size +
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
839 IP_ALIGNMENT_BYTES;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
840 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
841 break;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
842
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
843 case RCV_RING_LRO:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
844 rcv_desc->MaxRxDescCount =
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
845 adapter->MaxLroRxDescCount;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
846 rcv_desc->buf_size = MAX_RX_LRO_BUFFER_LENGTH;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
847 rcv_desc->dma_size = RX_LRO_DMA_MAP_LEN;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
848 break;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
849 default:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
850 break;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
851 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
852 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
853 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
854 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
855
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
856 static void
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
857 vector128M(unm_adapter *aptr)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
858 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
859 aptr->unm_nic_pci_change_crbwindow = &unm_nic_pci_change_crbwindow_128M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
860 aptr->unm_crb_writelit_adapter = &unm_crb_writelit_adapter_128M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
861 aptr->unm_nic_hw_write_wx = &unm_nic_hw_write_wx_128M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
862 aptr->unm_nic_hw_read_wx = &unm_nic_hw_read_wx_128M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
863 aptr->unm_nic_hw_write_ioctl = &unm_nic_hw_write_ioctl_128M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
864 aptr->unm_nic_hw_read_ioctl = &unm_nic_hw_read_ioctl_128M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
865 aptr->unm_nic_pci_mem_write = &unm_nic_pci_mem_write_128M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
866 aptr->unm_nic_pci_mem_read = &unm_nic_pci_mem_read_128M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
867 aptr->unm_nic_pci_write_immediate = &unm_nic_pci_write_immediate_128M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
868 aptr->unm_nic_pci_read_immediate = &unm_nic_pci_read_immediate_128M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
869 aptr->unm_nic_pci_write_normalize = &unm_nic_pci_write_normalize_128M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
870 aptr->unm_nic_pci_read_normalize = &unm_nic_pci_read_normalize_128M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
871 aptr->unm_nic_pci_set_window = &unm_nic_pci_set_window_128M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
872 aptr->unm_nic_clear_statistics = &unm_nic_clear_statistics_128M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
873 aptr->unm_nic_fill_statistics = &unm_nic_fill_statistics_128M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
874 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
875
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
876 static void
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
877 vector2M(unm_adapter *aptr)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
878 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
879 aptr->unm_nic_pci_change_crbwindow = &unm_nic_pci_change_crbwindow_2M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
880 aptr->unm_crb_writelit_adapter = &unm_crb_writelit_adapter_2M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
881 aptr->unm_nic_hw_write_wx = &unm_nic_hw_write_wx_2M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
882 aptr->unm_nic_hw_read_wx = &unm_nic_hw_read_wx_2M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
883 aptr->unm_nic_hw_write_ioctl = &unm_nic_hw_write_wx_2M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
884 aptr->unm_nic_hw_read_ioctl = &unm_nic_hw_read_wx_2M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
885 aptr->unm_nic_pci_mem_write = &unm_nic_pci_mem_write_2M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
886 aptr->unm_nic_pci_mem_read = &unm_nic_pci_mem_read_2M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
887 aptr->unm_nic_pci_write_immediate = &unm_nic_pci_write_immediate_2M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
888 aptr->unm_nic_pci_read_immediate = &unm_nic_pci_read_immediate_2M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
889 aptr->unm_nic_pci_write_normalize = &unm_nic_pci_write_normalize_2M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
890 aptr->unm_nic_pci_read_normalize = &unm_nic_pci_read_normalize_2M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
891 aptr->unm_nic_pci_set_window = &unm_nic_pci_set_window_2M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
892 aptr->unm_nic_clear_statistics = &unm_nic_clear_statistics_2M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
893 aptr->unm_nic_fill_statistics = &unm_nic_fill_statistics_2M;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
894 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
895
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
896 static int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
897 unm_pci_map_setup(unm_adapter *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
898 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
899 int ret;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
900 caddr_t reg_base, db_base;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
901 caddr_t mem_ptr0, mem_ptr1 = NULL, mem_ptr2 = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
902 unsigned long pci_len0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
903 unsigned long first_page_group_start, first_page_group_end;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
904
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
905 off_t regsize, dbsize = UNM_DB_MAPSIZE_BYTES;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
906 dev_info_t *dip = adapter->dip;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
907
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
908 adapter->ahw.qdr_sn_window = adapter->ahw.ddr_mn_window = -1;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
909
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
910 /* map register space */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
911
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
912 ret = ddi_dev_regsize(dip, 1, &regsize);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
913 if (ret != DDI_SUCCESS) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
914 cmn_err(CE_WARN, "%s%d: failed to read reg size for bar0\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
915 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
916 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
917 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
918
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
919 ret = ddi_regs_map_setup(dip, 1, &reg_base, 0,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
920 regsize, &unm_dev_attr, &adapter->regs_handle);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
921 if (ret != DDI_SUCCESS) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
922 cmn_err(CE_WARN, "%s%d: failed to map registers\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
923 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
924 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
925 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
926
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
927 mem_ptr0 = reg_base;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
928
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
929 if (regsize == UNM_PCI_128MB_SIZE) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
930 pci_len0 = FIRST_PAGE_GROUP_SIZE;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
931 mem_ptr1 = mem_ptr0 + SECOND_PAGE_GROUP_START;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
932 mem_ptr2 = mem_ptr0 + THIRD_PAGE_GROUP_START;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
933 first_page_group_start = FIRST_PAGE_GROUP_START;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
934 first_page_group_end = FIRST_PAGE_GROUP_END;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
935 vector128M(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
936 } else if (regsize == UNM_PCI_32MB_SIZE) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
937 pci_len0 = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
938 mem_ptr1 = mem_ptr0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
939 mem_ptr2 = mem_ptr0 +
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
940 (THIRD_PAGE_GROUP_START - SECOND_PAGE_GROUP_START);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
941 first_page_group_start = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
942 first_page_group_end = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
943 vector128M(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
944 } else if (regsize == UNM_PCI_2MB_SIZE) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
945 pci_len0 = UNM_PCI_2MB_SIZE;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
946 first_page_group_start = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
947 first_page_group_end = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
948 adapter->ahw.ddr_mn_window = adapter->ahw.qdr_sn_window = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
949 adapter->ahw.mn_win_crb = 0x100000 + PCIX_MN_WINDOW +
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
950 (adapter->ahw.pci_func * 0x20);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
951 if (adapter->ahw.pci_func < 4)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
952 adapter->ahw.ms_win_crb = 0x100000 + PCIX_SN_WINDOW +
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
953 (adapter->ahw.pci_func * 0x20);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
954 else
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
955 adapter->ahw.ms_win_crb = 0x100000 + PCIX_SN_WINDOW +
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
956 0xA0 + ((adapter->ahw.pci_func - 4) * 0x10);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
957 vector2M(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
958 } else {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
959 cmn_err(CE_WARN, "%s%d: invalid pci regs map size %ld\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
960 adapter->name, adapter->instance, regsize);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
961 ddi_regs_map_free(&adapter->regs_handle);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
962 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
963 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
964
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
965 adapter->ahw.pci_base0 = (unsigned long)mem_ptr0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
966 adapter->ahw.pci_len0 = pci_len0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
967 adapter->ahw.pci_base1 = (unsigned long)mem_ptr1;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
968 adapter->ahw.pci_len1 = SECOND_PAGE_GROUP_SIZE;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
969 adapter->ahw.pci_base2 = (unsigned long)mem_ptr2;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
970 adapter->ahw.pci_len2 = THIRD_PAGE_GROUP_SIZE;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
971 adapter->ahw.crb_base =
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
972 PCI_OFFSET_SECOND_RANGE(adapter, UNM_PCI_CRBSPACE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
973
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
974 adapter->ahw.first_page_group_start = first_page_group_start;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
975 adapter->ahw.first_page_group_end = first_page_group_end;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
976
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
977 /* map doorbell */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
978
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
979 ret = ddi_regs_map_setup(dip, 2, &db_base, 0,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
980 dbsize, &unm_dev_attr, &adapter->db_handle);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
981 if (ret != DDI_SUCCESS) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
982 cmn_err(CE_WARN, "%s%d: failed to map doorbell\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
983 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
984 ddi_regs_map_free(&adapter->regs_handle);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
985 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
986 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
987
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
988 adapter->ahw.db_base = (unsigned long)db_base;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
989 adapter->ahw.db_len = dbsize;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
990
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
991 return (DDI_SUCCESS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
992 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
993
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
994 static int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
995 unm_initialize_intr(unm_adapter *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
996 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
997
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
998 int ret;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
999 int type, count, avail, actual;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1000
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1001 ret = ddi_intr_get_supported_types(adapter->dip, &type);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1002 if (ret != DDI_SUCCESS) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1003 cmn_err(CE_WARN, "%s%d: ddi_intr_get_supported_types() "
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1004 "failed\n", adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1005 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1006 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1007
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1008 type = DDI_INTR_TYPE_MSI;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1009 ret = ddi_intr_get_nintrs(adapter->dip, type, &count);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1010 if ((ret == DDI_SUCCESS) && (count > 0))
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1011 goto found_msi;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1012
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1013 type = DDI_INTR_TYPE_FIXED;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1014 ret = ddi_intr_get_nintrs(adapter->dip, type, &count);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1015 if ((ret != DDI_SUCCESS) || (count == 0)) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1016 cmn_err(CE_WARN,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1017 "ddi_intr_get_nintrs() failure ret=%d\n", ret);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1018 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1019 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1020
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1021 found_msi:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1022 adapter->intr_type = type;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1023 adapter->flags &= ~(UNM_NIC_MSI_ENABLED | UNM_NIC_MSIX_ENABLED);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1024 if (type == DDI_INTR_TYPE_MSI)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1025 adapter->flags |= UNM_NIC_MSI_ENABLED;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1026
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1027 /* Get number of available interrupts */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1028 ret = ddi_intr_get_navail(adapter->dip, type, &avail);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1029 if ((ret != DDI_SUCCESS) || (avail == 0)) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1030 cmn_err(CE_WARN, "ddi_intr_get_navail() failure, ret=%d\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1031 ret);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1032 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1033 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1034
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1035 ret = ddi_intr_alloc(adapter->dip, &adapter->intr_handle,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1036 type, 0, 1, &actual, DDI_INTR_ALLOC_NORMAL);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1037 if ((ret != DDI_SUCCESS) || (actual == 0)) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1038 cmn_err(CE_WARN, "ddi_intr_alloc() failure: %d\n", ret);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1039 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1040 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1041
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1042 ret = ddi_intr_get_pri(adapter->intr_handle, &adapter->intr_pri);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1043 if (ret != DDI_SUCCESS) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1044 cmn_err(CE_WARN, "ddi_intr_get_pri() failure: %d\n", ret);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1045 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1046
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1047 /* Call ddi_intr_add_handler() */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1048 ret = ddi_intr_add_handler(adapter->intr_handle, unm_intr,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1049 (caddr_t)adapter, NULL);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1050 if (ret != DDI_SUCCESS) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1051 cmn_err(CE_WARN, "%s%d: ddi_intr_add_handler() failure\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1052 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1053 (void) ddi_intr_free(adapter->intr_handle);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1054 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1055 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1056
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1057 /* Add softintr if required */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1058
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1059 return (DDI_SUCCESS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1060
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1061 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1062
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1063 void
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1064 unm_destroy_intr(unm_adapter *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1065 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1066 /* disable interrupt */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1067 if (adapter->intr_type == DDI_INTR_TYPE_MSI)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1068 (void) ddi_intr_block_disable(&adapter->intr_handle, 1);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1069 else
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1070 (void) ddi_intr_disable(adapter->intr_handle);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1071
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1072 (void) ddi_intr_remove_handler(adapter->intr_handle);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1073 (void) ddi_intr_free(adapter->intr_handle);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1074
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1075 /* Remove the software intr handler */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1076 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1077
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1078 static void
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1079 netxen_set_port_mode(unm_adapter *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1080 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1081 static int wol_port_mode = UNM_PORT_MODE_AUTO_NEG_1G;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1082 static int port_mode = UNM_PORT_MODE_AUTO_NEG;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1083 int btype = adapter->ahw.boardcfg.board_type, data = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1084
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1085 if (btype == UNM_BRDTYPE_P3_HMEZ || btype == UNM_BRDTYPE_P3_XG_LOM) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1086 data = port_mode; /* set to port_mode normally */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1087 if ((port_mode != UNM_PORT_MODE_802_3_AP) &&
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1088 (port_mode != UNM_PORT_MODE_XG) &&
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1089 (port_mode != UNM_PORT_MODE_AUTO_NEG_1G) &&
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1090 (port_mode != UNM_PORT_MODE_AUTO_NEG_XG))
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1091 data = UNM_PORT_MODE_AUTO_NEG;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1092
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1093 adapter->unm_nic_hw_write_wx(adapter, UNM_PORT_MODE_ADDR,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1094 &data, 4);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1095
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1096 if ((wol_port_mode != UNM_PORT_MODE_802_3_AP) &&
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1097 (wol_port_mode != UNM_PORT_MODE_XG) &&
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1098 (wol_port_mode != UNM_PORT_MODE_AUTO_NEG_1G) &&
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1099 (wol_port_mode != UNM_PORT_MODE_AUTO_NEG_XG))
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1100 wol_port_mode = UNM_PORT_MODE_AUTO_NEG;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1101
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1102 adapter->unm_nic_hw_write_wx(adapter, UNM_WOL_PORT_MODE,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1103 &wol_port_mode, 4);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1104 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1105 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1106
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1107 static void
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1108 netxen_pcie_strap_init(unm_adapter *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1109 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1110 ddi_acc_handle_t pcihdl = adapter->pci_cfg_handle;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1111 u32 chicken, control, c8c9value = 0xF1000;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1112
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1113 adapter->unm_nic_hw_read_wx(adapter, UNM_PCIE_REG(PCIE_CHICKEN3),
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1114 &chicken, 4);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1115
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1116 chicken &= 0xFCFFFFFF; /* clear chicken3 25:24 */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1117 control = pci_config_get32(pcihdl, 0xD0);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1118 if ((control & 0x000F0000) != 0x00020000) /* is it gen1? */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1119 chicken |= 0x01000000;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1120 adapter->unm_nic_hw_write_wx(adapter, UNM_PCIE_REG(PCIE_CHICKEN3),
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1121 &chicken, 4);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1122 control = pci_config_get32(pcihdl, 0xC8);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1123 control = pci_config_get32(pcihdl, 0xC8);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1124 pci_config_put32(pcihdl, 0xC8, c8c9value);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1125 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1126
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1127 static int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1128 netxen_read_mac_addr(unm_adapter *adapter)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1129 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1130 u64 mac_addr[FLASH_NUM_PORTS + 1];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1131 unsigned char *p;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1132 int i;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1133
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1134 if (is_flash_supported(adapter) != 0)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1135 return (-1);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1136
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1137 if (get_flash_mac_addr(adapter, mac_addr) != 0)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1138 return (-1);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1139
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1140 if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1141 p = (unsigned char *)&mac_addr[adapter->ahw.pci_func];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1142 else
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1143 p = (unsigned char *)&mac_addr[adapter->portnum];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1144
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1145 for (i = 0; i < 6; i++)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1146 adapter->mac_addr[i] = p[5 - i];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1147
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1148 if (unm_nic_macaddr_set(adapter, adapter->mac_addr) != 0)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1149 return (-1);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1150
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1151 return (0);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1152 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1153
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1154 static int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1155 unmattach(dev_info_t *dip, ddi_attach_cmd_t cmd)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1156 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1157 unm_adapter *adapter;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1158 unm_recv_context_t *recv_ctx = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1159 unm_rcv_desc_ctx_t *rcv_desc = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1160 int i, first_driver = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1161 int ret, ring, temp;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1162
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1163 switch (cmd) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1164 case DDI_ATTACH:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1165 break;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1166 case DDI_RESUME:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1167 case DDI_PM_RESUME:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1168 default:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1169 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1170 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1171
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1172 adapter = kmem_zalloc(sizeof (unm_adapter), KM_SLEEP);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1173 adapter->dip = dip;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1174 ddi_set_driver_private(dip, adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1175 adapter->instance = ddi_get_instance(dip);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1176
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1177 adapter->name = ddi_driver_name(dip);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1178
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1179 ret = pci_config_setup(dip, &adapter->pci_cfg_handle);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1180 if (ret != DDI_SUCCESS) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1181 cmn_err(CE_WARN, "%s%d: pci_config_setup failed\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1182 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1183 goto attach_setup_err;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1184 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1185
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1186 ret = unm_pci_cfg_init(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1187 if (ret != DDI_SUCCESS)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1188 goto attach_err;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1189
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1190 ret = unm_pci_map_setup(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1191 if (ret != DDI_SUCCESS)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1192 goto attach_err;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1193
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1194 if (unm_initialize_intr(adapter) != DDI_SUCCESS)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1195 goto attach_unmap_regs;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1196
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1197 rw_init(&adapter->adapter_lock, NULL,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1198 RW_DRIVER, DDI_INTR_PRI(adapter->intr_pri));
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1199 mutex_init(&adapter->tx_lock, NULL,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1200 MUTEX_DRIVER, (DDI_INTR_PRI(adapter->intr_pri)));
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1201 mutex_init(&adapter->lock, NULL,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1202 MUTEX_DRIVER, (DDI_INTR_PRI(adapter->intr_pri)));
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1203
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1204 adapter->portnum = (int8_t)adapter->ahw.pci_func;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1205
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1206 /*
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1207 * Set the CRB window to invalid. If any register in window 0 is
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1208 * accessed it should set window to 0 and then reset it to 1.
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1209 */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1210 adapter->curr_window = 255;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1211
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1212 adapter->fw_major = adapter->unm_nic_pci_read_normalize(adapter,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1213 UNM_FW_VERSION_MAJOR);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1214
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1215 if (adapter->fw_major < 4)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1216 adapter->max_rds_rings = 3;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1217 else
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1218 adapter->max_rds_rings = 2;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1219
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1220 STRUCT_COPY(adapter->gc_dma_attr_desc, unm_dma_attr_desc);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1221 STRUCT_COPY(adapter->gc_attr_desc, unm_buf_attr);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1222
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1223 ret = unm_nic_get_board_info(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1224 if (ret != DDI_SUCCESS) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1225 cmn_err(CE_WARN, "%s%d: error reading board config\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1226 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1227 goto attach_destroy_intr;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1228 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1229
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1230 /* Mezz cards have PCI function 0, 2, 3 enabled */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1231 switch (adapter->ahw.boardcfg.board_type) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1232 case UNM_BRDTYPE_P2_SB31_10G_IMEZ:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1233 case UNM_BRDTYPE_P2_SB31_10G_HMEZ:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1234 if (adapter->ahw.pci_func >= 2) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1235 adapter->portnum = adapter->ahw.pci_func - 2;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1236 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1237 default:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1238 break;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1239 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1240
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1241 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1242 temp = UNM_CRB_READ_VAL_ADAPTER(UNM_MIU_MN_CONTROL, adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1243 adapter->ahw.cut_through = NX_IS_SYSTEM_CUT_THROUGH(temp);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1244 if (adapter->ahw.pci_func == 0)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1245 first_driver = 1;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1246 } else {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1247 if (adapter->portnum == 0)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1248 first_driver = 1;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1249 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1250
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1251 unm_check_options(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1252
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1253 if (first_driver) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1254 int first_boot = adapter->unm_nic_pci_read_normalize(adapter,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1255 UNM_CAM_RAM(0x1fc));
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1256
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1257 if (check_hw_init(adapter) != 0) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1258 cmn_err(CE_WARN, "%s%d: Error in HW init sequence\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1259 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1260 goto attach_destroy_intr;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1261 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1262
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1263 if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1264 netxen_set_port_mode(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1265
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1266 if (first_boot != 0x55555555) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1267 temp = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1268 adapter->unm_nic_hw_write_wx(adapter, CRB_CMDPEG_STATE,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1269 &temp, 4);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1270 if (pinit_from_rom(adapter, 0) != 0)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1271 goto attach_destroy_intr;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1272
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1273 drv_usecwait(500);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1274
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1275 ret = load_from_flash(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1276 if (ret != DDI_SUCCESS)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1277 goto attach_destroy_intr;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1278 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1279
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1280 if (ret = unm_initialize_dummy_dma(adapter))
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1281 goto attach_destroy_intr;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1282
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1283 /*
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1284 * Tell the hardware our version number.
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1285 */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1286 i = (_UNM_NIC_MAJOR << 16) |
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1287 ((_UNM_NIC_MINOR << 8)) | (_UNM_NIC_SUBVERSION);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1288 adapter->unm_nic_hw_write_wx(adapter, CRB_DRIVER_VERSION,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1289 &i, 4);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1290
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1291 /* Unlock the HW, prompting the boot sequence */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1292 if ((first_boot == 0x55555555) &&
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1293 (NX_IS_REVISION_P2(adapter->ahw.revision_id)))
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1294 adapter->unm_nic_pci_write_normalize(adapter,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1295 UNM_ROMUSB_GLB_PEGTUNE_DONE, 1);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1296
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1297 /* Handshake with the card before we register the devices. */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1298 if (phantom_init(adapter, 0) != DDI_SUCCESS)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1299 goto attach_destroy_intr;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1300 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1301
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1302 if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1303 netxen_pcie_strap_init(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1304
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1305 /*
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1306 * See if the firmware gave us a virtual-physical port mapping.
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1307 */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1308 adapter->physical_port = adapter->portnum;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1309 i = adapter->unm_nic_pci_read_normalize(adapter,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1310 CRB_V2P(adapter->portnum));
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1311 if (i != 0x55555555)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1312 adapter->physical_port = (uint16_t)i;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1313
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1314 adapter->cmd_buf_arr = (struct unm_cmd_buffer *)kmem_zalloc(
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1315 sizeof (struct unm_cmd_buffer) * adapter->MaxTxDescCount,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1316 KM_SLEEP);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1317
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1318 for (i = 0; i < MAX_RCV_CTX; ++i) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1319 recv_ctx = &adapter->recv_ctx[i];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1320
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1321 for (ring = 0; ring < adapter->max_rds_rings; ring++) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1322 rcv_desc = &recv_ctx->rcv_desc[ring];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1323 ret = unm_create_rx_ring(adapter, rcv_desc);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1324 if (ret != DDI_SUCCESS)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1325 goto attach_free_cmdbufs;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1326 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1327 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1328
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1329 ret = unm_alloc_tx_dmahdl(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1330 if (ret != DDI_SUCCESS)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1331 goto attach_free_cmdbufs;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1332
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1333 ret = unm_alloc_tx_buffers(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1334 if (ret != DDI_SUCCESS)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1335 goto attach_free_tx_dmahdl;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1336
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1337 adapter->ahw.linkup = 0;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1338
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1339 if (receive_peg_ready(adapter)) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1340 ret = -EIO;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1341 goto attach_free_tx_buffers;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1342 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1343
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1344 if (netxen_read_mac_addr(adapter))
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1345 cmn_err(CE_WARN, "%s%d: Failed to read MAC addr\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1346 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1347
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1348 unm_nic_flash_print(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1349
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1350 if (verbmsg != 0) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1351 switch (adapter->ahw.board_type) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1352 case UNM_NIC_GBE:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1353 cmn_err(CE_NOTE, "%s: QUAD GbE port %d initialized\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1354 unm_nic_driver_name, adapter->portnum);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1355 break;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1356
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1357 case UNM_NIC_XGBE:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1358 cmn_err(CE_NOTE, "%s: XGbE port %d initialized\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1359 unm_nic_driver_name, adapter->portnum);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1360 break;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1361 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1362 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1363
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1364 ret = unm_register_mac(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1365 if (ret != DDI_SUCCESS) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1366 cmn_err(CE_NOTE, "%s%d: Mac registration error\n",
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1367 adapter->name, adapter->instance);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1368 goto attach_free_tx_buffers;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1369 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1370
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1371 return (DDI_SUCCESS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1372
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1373 attach_free_tx_buffers:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1374 unm_free_tx_buffers(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1375 attach_free_tx_dmahdl:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1376 unm_free_tx_dmahdl(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1377 attach_free_cmdbufs:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1378 kmem_free(adapter->cmd_buf_arr, sizeof (struct unm_cmd_buffer) *
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1379 adapter->MaxTxDescCount);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1380 for (i = 0; i < MAX_RCV_CTX; ++i) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1381 recv_ctx = &adapter->recv_ctx[i];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1382
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1383 for (ring = 0; ring < adapter->max_rds_rings; ring++) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1384 rcv_desc = &recv_ctx->rcv_desc[ring];
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1385 if (rcv_desc->rx_buf_pool != NULL)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1386 unm_destroy_rx_ring(rcv_desc);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1387 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1388 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1389
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1390 if (adapter->portnum == 0)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1391 unm_free_dummy_dma(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1392 attach_destroy_intr:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1393 unm_destroy_intr(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1394 attach_unmap_regs:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1395 ddi_regs_map_free(&(adapter->regs_handle));
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1396 ddi_regs_map_free(&(adapter->db_handle));
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1397 attach_err:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1398 pci_config_teardown(&adapter->pci_cfg_handle);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1399 attach_setup_err:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1400 kmem_free(adapter, sizeof (unm_adapter));
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1401 return (ret);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1402 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1403
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1404 static int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1405 unmdetach(dev_info_t *dip, ddi_detach_cmd_t cmd)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1406 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1407 unm_adapter *adapter = (unm_adapter *)ddi_get_driver_private(dip);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1408
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1409 if (adapter == NULL)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1410 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1411
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1412 switch (cmd) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1413 case DDI_DETACH:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1414
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1415 unm_fini_kstats(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1416 adapter->kstats[0] = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1417
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1418 if (adapter->pci_cfg_handle != NULL)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1419 pci_config_teardown(&adapter->pci_cfg_handle);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1420
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1421 unm_nd_cleanup(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1422 unm_nic_remove(adapter);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1423 return (DDI_SUCCESS);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1424
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1425 case DDI_SUSPEND:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1426 return (unm_nic_suspend(adapter));
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1427
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1428 default:
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1429 break;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1430 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1431
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1432 return (DDI_FAILURE);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1433 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1434
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1435 #ifdef SOLARIS11
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1436 DDI_DEFINE_STREAM_OPS(unm_ops, nulldev, nulldev, unmattach, unmdetach,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1437 nodev, NULL, D_MP, NULL, NULL);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1438 #else
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1439 DDI_DEFINE_STREAM_OPS(unm_ops, nulldev, nulldev, unmattach, unmdetach,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1440 nodev, NULL, D_MP, NULL);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1441 #endif
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1442
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1443 static struct modldrv modldrv = {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1444 &mod_driverops, /* Type of module. This one is a driver */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1445 ident,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1446 &unm_ops, /* driver ops */
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1447 };
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1448
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1449 static struct modlinkage modlinkage = {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1450 MODREV_1,
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1451 (&modldrv),
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1452 NULL
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1453 };
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1454
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1455
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1456 int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1457 _init(void)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1458 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1459 int ret;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1460
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1461 unm_ops.devo_cb_ops->cb_str = NULL;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1462 mac_init_ops(&unm_ops, "ntxn");
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1463
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1464 ret = mod_install(&modlinkage);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1465 if (ret != DDI_SUCCESS) {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1466 mac_fini_ops(&unm_ops);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1467 cmn_err(CE_WARN, "ntxn: mod_install failed\n");
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1468 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1469
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1470 return (ret);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1471 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1472
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1473
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1474 int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1475 _fini(void)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1476 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1477 int ret;
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1478
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1479 ret = mod_remove(&modlinkage);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1480 if (ret == DDI_SUCCESS)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1481 mac_fini_ops(&unm_ops);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1482 return (ret);
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1483 }
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1484
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1485 int
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1486 _info(struct modinfo *modinfop)
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1487 {
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1488 return (mod_info(&modlinkage, modinfop));
59ff93e4da95 PSARC 2008/045 NetXen 10 Gigabit Ethernet Driver
lucy wang - Sun Microsystems - Beijing China <xiuyan.wang@Sun.COM>
parents:
diff changeset
1489 }