annotate usr/src/uts/common/io/atge/atge_main.c @ 13768:ed21ea5d20cf

212 Atheros AR8132 / L1c Gigabit Ethernet Adapter Reviewed by: Garrett D'Amore <garrett@damore.org> Reviewed by: Milan Jurik <milan.jurik@xylab.cz> Approved by: Dan McDonald <danmcd@nexenta.com>
author Gary Mills <gary_mills@fastmail.fm>
date Fri, 10 Aug 2012 10:52:49 -0400
parents d1a36c3701ab
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2 * CDDL HEADER START
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
3 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
4 * The contents of this file are subject to the terms of the
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
5 * Common Development and Distribution License (the "License").
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
6 * You may not use this file except in compliance with the License.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
7 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
9 * or http://www.opensolaris.org/os/licensing.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
10 * See the License for the specific language governing permissions
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
11 * and limitations under the License.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
12 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
13 * When distributing Covered Code, include this CDDL HEADER in each
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
15 * If applicable, add the following below this CDDL HEADER, with the
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
16 * fields enclosed by brackets "[]" replaced with your own identifying
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
17 * information: Portions Copyright [yyyy] [name of copyright owner]
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
18 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
19 * CDDL HEADER END
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
20 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
21
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
22 /*
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
23 * Copyright (c) 2012 Gary Mills
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
24 *
12398
d1a36c3701ab 6918729 atge race in mac_detach
Garrett D'Amore <gdamore@opensolaris.org>
parents: 11878
diff changeset
25 * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
26 */
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
27 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
28 * Copyright (c) 2009, Pyun YongHyeon <yongari@FreeBSD.org>
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
29 * All rights reserved.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
30 *
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
31 * Redistribution and use in source and binary forms, with or without
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
32 * modification, are permitted provided that the following conditions
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
33 * are met:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
34 * 1. Redistributions of source code must retain the above copyright
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
35 * notice unmodified, this list of conditions, and the following
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
36 * disclaimer.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
37 * 2. Redistributions in binary form must reproduce the above copyright
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
38 * notice, this list of conditions and the following disclaimer in the
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
39 * documentation and/or other materials provided with the distribution.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
40 *
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
41 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
51 * SUCH DAMAGE.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
52 */
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
53
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
54 #include <sys/types.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
55 #include <sys/stream.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
56 #include <sys/strsun.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
57 #include <sys/stat.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
58 #include <sys/modctl.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
59 #include <sys/kstat.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
60 #include <sys/ethernet.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
61 #include <sys/devops.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
62 #include <sys/debug.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
63 #include <sys/conf.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
64 #include <sys/mii.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
65 #include <sys/miiregs.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
66 #include <sys/mac.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
67 #include <sys/mac_provider.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
68 #include <sys/mac_ether.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
69 #include <sys/sysmacros.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
70 #include <sys/dditypes.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
71 #include <sys/ddi.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
72 #include <sys/sunddi.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
73 #include <sys/byteorder.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
74 #include <sys/note.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
75 #include <sys/vlan.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
76 #include <sys/strsubr.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
77 #include <sys/crc32.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
78 #include <sys/sdt.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
79 #include <sys/pci.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
80 #include <sys/pci_cap.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
81
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
82 #include "atge.h"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
83 #include "atge_cmn_reg.h"
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
84 #include "atge_l1c_reg.h"
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
85 #include "atge_l1e_reg.h"
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
86 #include "atge_l1_reg.h"
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
87
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
88
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
89 /*
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
90 * Atheros/Attansic Ethernet chips are of four types - L1, L2, L1E and L1C.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
91 * This driver is for L1E/L1/L1C but can be extended to support other chips.
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
92 * L1E comes in 1Gigabit and Fast Ethernet flavors. L1 comes in 1Gigabit
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
93 * flavors only. L1C comes in both flavours.
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
94 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
95 * Atheros/Attansic Ethernet controllers have descriptor based TX and RX
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
96 * with an exception of L1E. L1E's RX side is not descriptor based ring.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
97 * The L1E's RX uses pages (not to be confused with MMU pages) for
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
98 * receiving pkts. The header has four fields :
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
99 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
100 * uint32_t seqno; Sequence number of the frame.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
101 * uint32_t length; Length of the frame.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
102 * uint32_t flags; Flags
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
103 * uint32_t vtag; We don't use hardware VTAG.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
104 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
105 * We use only one queue for RX (each queue can have two pages) and each
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
106 * page is L1E_RX_PAGE_SZ large in bytes. That's the reason we don't
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
107 * use zero-copy RX because we are limited to two pages and each page
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
108 * accomodates large number of pkts.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
109 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
110 * The TX side on all three chips is descriptor based ring; and all the
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
111 * more reason to have one driver for these chips.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
112 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
113 * We use two locks - atge_intr_lock and atge_tx_lock. Both the locks
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
114 * should be held if the operation has impact on the driver instance.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
115 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
116 * All the three chips have hash-based multicast filter.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
117 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
118 * We use CMB (Coalescing Message Block) for RX but not for TX as there
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
119 * are some issues with TX. RX CMB is used to get the last descriptor
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
120 * posted by the chip. Each CMB is for a RX page (one queue can have two
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
121 * pages) and are uint32_t (4 bytes) long.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
122 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
123 * The descriptor table should have 32-bit physical address limit due to
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
124 * the limitation of having same high address for TX/RX/SMB/CMB. The
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
125 * TX/RX buffers can be 64-bit.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
126 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
127 * Every DMA memory in atge is represented by atge_dma_t be it TX/RX Buffers
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
128 * or TX/RX descriptor table or SMB/CMB. To keep the code simple, we have
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
129 * kept sgl as 1 so that we get contingous pages from root complex.
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
130 *
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
131 * L1 chip (0x1048) uses descriptor based TX and RX ring. Most of registers are
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
132 * common with L1E chip (0x1026).
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
133 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
134
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
135 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
136 * Function Prototypes for debugging.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
137 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
138 void atge_error(dev_info_t *, char *, ...);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
139 void atge_debug_func(char *, ...);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
140
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
141 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
142 * Function Prototypes for driver operations.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
143 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
144 static int atge_resume(dev_info_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
145 static int atge_add_intr(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
146 static int atge_alloc_dma(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
147 static void atge_remove_intr(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
148 static void atge_free_dma(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
149 static void atge_device_reset(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
150 static void atge_device_init(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
151 static void atge_device_start(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
152 static void atge_disable_intrs(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
153 atge_dma_t *atge_alloc_a_dma_blk(atge_t *, ddi_dma_attr_t *, int, int);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
154 void atge_free_a_dma_blk(atge_dma_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
155 static void atge_rxfilter(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
156 static void atge_device_reset_l1_l1e(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
157 void atge_program_ether(atge_t *atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
158 void atge_device_restart(atge_t *);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
159 void atge_device_stop(atge_t *);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
160 static int atge_send_a_packet(atge_t *, mblk_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
161 static uint32_t atge_ether_crc(const uint8_t *, int);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
162
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
163
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
164 /*
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
165 * L1E/L2E specific functions.
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
166 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
167 void atge_l1e_device_reset(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
168 void atge_l1e_stop_mac(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
169 int atge_l1e_alloc_dma(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
170 void atge_l1e_free_dma(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
171 void atge_l1e_init_tx_ring(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
172 void atge_l1e_init_rx_pages(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
173 void atge_l1e_program_dma(atge_t *);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
174 void atge_l1e_send_packet(atge_ring_t *);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
175 mblk_t *atge_l1e_receive(atge_t *);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
176 uint_t atge_l1e_interrupt(caddr_t, caddr_t);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
177 void atge_l1e_gather_stats(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
178 void atge_l1e_clear_stats(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
179
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
180 /*
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
181 * L1 specific functions.
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
182 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
183 int atge_l1_alloc_dma(atge_t *);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
184 void atge_l1_free_dma(atge_t *);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
185 void atge_l1_init_tx_ring(atge_t *);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
186 void atge_l1_init_rx_ring(atge_t *);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
187 void atge_l1_init_rr_ring(atge_t *);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
188 void atge_l1_init_cmb(atge_t *);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
189 void atge_l1_init_smb(atge_t *);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
190 void atge_l1_program_dma(atge_t *);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
191 void atge_l1_stop_tx_mac(atge_t *);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
192 void atge_l1_stop_rx_mac(atge_t *);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
193 uint_t atge_l1_interrupt(caddr_t, caddr_t);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
194 void atge_l1_send_packet(atge_ring_t *);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
195
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
196 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
197 * L1C specific functions.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
198 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
199 int atge_l1c_alloc_dma(atge_t *);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
200 void atge_l1c_free_dma(atge_t *);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
201 void atge_l1c_init_tx_ring(atge_t *);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
202 void atge_l1c_init_rx_ring(atge_t *);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
203 void atge_l1c_init_rr_ring(atge_t *);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
204 void atge_l1c_init_cmb(atge_t *);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
205 void atge_l1c_init_smb(atge_t *);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
206 void atge_l1c_program_dma(atge_t *);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
207 void atge_l1c_stop_tx_mac(atge_t *);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
208 void atge_l1c_stop_rx_mac(atge_t *);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
209 uint_t atge_l1c_interrupt(caddr_t, caddr_t);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
210 void atge_l1c_send_packet(atge_ring_t *);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
211 void atge_l1c_gather_stats(atge_t *);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
212 void atge_l1c_clear_stats(atge_t *);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
213
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
214 /*
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
215 * Function prototyps for MII operations.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
216 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
217 uint16_t atge_mii_read(void *, uint8_t, uint8_t);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
218 void atge_mii_write(void *, uint8_t, uint8_t, uint16_t);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
219 uint16_t atge_l1c_mii_read(void *, uint8_t, uint8_t);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
220 void atge_l1c_mii_write(void *, uint8_t, uint8_t, uint16_t);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
221 void atge_l1e_mii_reset(void *);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
222 void atge_l1_mii_reset(void *);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
223 void atge_l1c_mii_reset(void *);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
224 static void atge_mii_notify(void *, link_state_t);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
225 void atge_tx_reclaim(atge_t *atgep, int cons);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
226
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
227 /*
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
228 * L1E/L2E chip.
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
229 */
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
230 static mii_ops_t atge_l1e_mii_ops = {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
231 MII_OPS_VERSION,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
232 atge_mii_read,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
233 atge_mii_write,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
234 atge_mii_notify,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
235 atge_l1e_mii_reset
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
236 };
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
237
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
238 /*
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
239 * L1 chip.
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
240 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
241 static mii_ops_t atge_l1_mii_ops = {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
242 MII_OPS_VERSION,
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
243 atge_mii_read,
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
244 atge_mii_write,
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
245 atge_mii_notify,
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
246 atge_l1_mii_reset
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
247 };
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
248
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
249 /*
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
250 * L1C chip.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
251 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
252 static mii_ops_t atge_l1c_mii_ops = {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
253 MII_OPS_VERSION,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
254 atge_l1c_mii_read,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
255 atge_l1c_mii_write,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
256 atge_mii_notify,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
257 NULL
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
258 };
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
259
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
260 /*
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
261 * Function Prototypes for MAC callbacks.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
262 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
263 static int atge_m_stat(void *, uint_t, uint64_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
264 static int atge_m_start(void *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
265 static void atge_m_stop(void *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
266 static int atge_m_getprop(void *, const char *, mac_prop_id_t, uint_t,
11878
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
267 void *);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
268 static int atge_m_setprop(void *, const char *, mac_prop_id_t, uint_t,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
269 const void *);
11878
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
270 static void atge_m_propinfo(void *, const char *, mac_prop_id_t,
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
271 mac_prop_info_handle_t);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
272 static int atge_m_unicst(void *, const uint8_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
273 static int atge_m_multicst(void *, boolean_t, const uint8_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
274 static int atge_m_promisc(void *, boolean_t);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
275 static mblk_t *atge_m_tx(void *, mblk_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
276
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
277 static mac_callbacks_t atge_m_callbacks = {
11878
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
278 MC_SETPROP | MC_GETPROP | MC_PROPINFO,
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
279 atge_m_stat,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
280 atge_m_start,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
281 atge_m_stop,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
282 atge_m_promisc,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
283 atge_m_multicst,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
284 atge_m_unicst,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
285 atge_m_tx,
11878
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
286 NULL, /* mc_reserved */
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
287 NULL, /* mc_ioctl */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
288 NULL, /* mc_getcapab */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
289 NULL, /* mc_open */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
290 NULL, /* mc_close */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
291 atge_m_setprop,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
292 atge_m_getprop,
11878
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
293 atge_m_propinfo
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
294 };
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
295
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
296 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
297 * DMA Data access requirements.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
298 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
299 static struct ddi_device_acc_attr atge_dev_attr = {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
300 DDI_DEVICE_ATTR_V0,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
301 DDI_STRUCTURE_LE_ACC,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
302 DDI_STRICTORDER_ACC
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
303 };
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
304
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
305 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
306 * Buffers should be native endianness.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
307 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
308 static struct ddi_device_acc_attr atge_buf_attr = {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
309 DDI_DEVICE_ATTR_V0,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
310 DDI_NEVERSWAP_ACC, /* native endianness */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
311 DDI_STRICTORDER_ACC
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
312 };
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
313
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
314 /*
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
315 * DMA device attributes. Buffer can be 64-bit.
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
316 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
317 static ddi_dma_attr_t atge_dma_attr_buf = {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
318 DMA_ATTR_V0, /* dma_attr_version */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
319 0, /* dma_attr_addr_lo */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
320 0x00ffffffffffull, /* dma_attr_addr_hi */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
321 0x000000003fffull, /* dma_attr_count_max */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
322 8, /* dma_attr_align */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
323 0x00003ffc, /* dma_attr_burstsizes */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
324 1, /* dma_attr_minxfer */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
325 0x0000000027ffull, /* dma_attr_maxxfer */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
326 0x0000ffffffffull, /* dma_attr_seg */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
327 1, /* dma_attr_sgllen */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
328 1, /* dma_attr_granular */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
329 0 /* dma_attr_flags */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
330 };
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
331
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
332 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
333 * Table of supported devices.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
334 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
335 #define ATGE_VENDOR_ID 0x1969
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
336 #define ATGE_L1_STR "Attansic L1"
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
337 #define ATGE_L1CG_STR "Atheros AR8131 Gigabit Ethernet"
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
338 #define ATGE_L1CF_STR "Atheros AR8132 Fast Ethernet"
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
339 #define ATGE_L1E_STR "Atheros AR8121/8113/8114"
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
340 #define ATGE_AR8151V1_STR "Atheros AR8151 v1.0 Gigabit Ethernet"
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
341 #define ATGE_AR8151V2_STR "Atheros AR8151 v2.0 Gigabit Ethernet"
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
342 #define ATGE_AR8152V1_STR "Atheros AR8152 v1.1 Fast Ethernet"
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
343 #define ATGE_AR8152V2_STR "Atheros AR8152 v2.0 Fast Ethernet"
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
344
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
345 static atge_cards_t atge_cards[] = {
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
346 {ATGE_VENDOR_ID, ATGE_CHIP_AR8151V2_DEV_ID, ATGE_AR8151V2_STR,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
347 ATGE_CHIP_L1C},
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
348 {ATGE_VENDOR_ID, ATGE_CHIP_AR8151V1_DEV_ID, ATGE_AR8151V1_STR,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
349 ATGE_CHIP_L1C},
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
350 {ATGE_VENDOR_ID, ATGE_CHIP_AR8152V2_DEV_ID, ATGE_AR8152V2_STR,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
351 ATGE_CHIP_L1C},
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
352 {ATGE_VENDOR_ID, ATGE_CHIP_AR8152V1_DEV_ID, ATGE_AR8152V1_STR,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
353 ATGE_CHIP_L1C},
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
354 {ATGE_VENDOR_ID, ATGE_CHIP_L1CG_DEV_ID, ATGE_L1CG_STR, ATGE_CHIP_L1C},
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
355 {ATGE_VENDOR_ID, ATGE_CHIP_L1CF_DEV_ID, ATGE_L1CF_STR, ATGE_CHIP_L1C},
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
356 {ATGE_VENDOR_ID, ATGE_CHIP_L1E_DEV_ID, ATGE_L1E_STR, ATGE_CHIP_L1E},
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
357 {ATGE_VENDOR_ID, ATGE_CHIP_L1_DEV_ID, ATGE_L1_STR, ATGE_CHIP_L1},
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
358 };
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
359
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
360 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
361 * Global Debugging flag. Developer level debugging is done only in DEBUG mode.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
362 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
363 int atge_debug = 1;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
364
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
365 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
366 * Debugging and error reporting.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
367 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
368 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
369 atge_debug_func(char *fmt, ...)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
370 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
371 va_list ap;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
372 char buf[256];
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
373
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
374 va_start(ap, fmt);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
375 (void) vsnprintf(buf, sizeof (buf), fmt, ap);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
376 va_end(ap);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
377
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
378 DTRACE_PROBE1(atge__debug, char *, buf);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
379 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
380
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
381 static
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
382 void
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
383 atge_message(dev_info_t *dip, int level, char *fmt, va_list ap)
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
384 {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
385 char buf[256];
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
386 char *p = "!%s%d: %s";
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
387 char *q = "!atge: %s";
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
388
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
389 (void) vsnprintf(buf, sizeof (buf), fmt, ap);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
390
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
391 if (level != CE_NOTE) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
392 p++;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
393 q++;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
394 }
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
395
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
396 if (dip) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
397 cmn_err(level, p,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
398 ddi_driver_name(dip), ddi_get_instance(dip), buf);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
399 } else {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
400 cmn_err(level, q, buf);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
401 }
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
402 }
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
403
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
404 void
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
405 atge_notice(dev_info_t *dip, char *fmt, ...)
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
406 {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
407 va_list ap;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
408
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
409 va_start(ap, fmt);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
410 (void) atge_message(dip, CE_NOTE, fmt, ap);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
411 va_end(ap);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
412 }
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
413
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
414 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
415 atge_error(dev_info_t *dip, char *fmt, ...)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
416 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
417 va_list ap;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
418
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
419 va_start(ap, fmt);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
420 (void) atge_message(dip, CE_WARN, fmt, ap);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
421 va_end(ap);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
422 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
423
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
424 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
425 atge_mac_config(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
426 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
427 uint32_t reg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
428 int speed;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
429 link_duplex_t ld;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
430
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
431 /* Re-enable TX/RX MACs */
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
432 reg = INL(atgep, ATGE_MAC_CFG);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
433 reg &= ~(ATGE_CFG_FULL_DUPLEX | ATGE_CFG_TX_FC | ATGE_CFG_RX_FC |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
434 ATGE_CFG_SPEED_MASK);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
435
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
436 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
437 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
438 switch (ATGE_DID(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
439 case ATGE_CHIP_AR8151V2_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
440 case ATGE_CHIP_AR8151V1_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
441 case ATGE_CHIP_AR8152V2_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
442 reg |= ATGE_CFG_HASH_ALG_CRC32 | ATGE_CFG_SPEED_MODE_SW;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
443 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
444 }
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
445 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
446 }
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
447
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
448 speed = mii_get_speed(atgep->atge_mii);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
449 switch (speed) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
450 case 10:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
451 case 100:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
452 reg |= ATGE_CFG_SPEED_10_100;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
453 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
454 case 1000:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
455 reg |= ATGE_CFG_SPEED_1000;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
456 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
457 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
458
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
459 ld = mii_get_duplex(atgep->atge_mii);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
460 if (ld == LINK_DUPLEX_FULL)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
461 reg |= ATGE_CFG_FULL_DUPLEX;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
462
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
463 /* Re-enable TX/RX MACs */
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
464 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
465 case ATGE_CHIP_L1E:
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
466 reg |= ATGE_CFG_TX_ENB | ATGE_CFG_RX_ENB | ATGE_CFG_RX_FC;
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
467 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
468 case ATGE_CHIP_L1:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
469 case ATGE_CHIP_L1C:
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
470 reg |= ATGE_CFG_TX_ENB | ATGE_CFG_RX_ENB;
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
471 break;
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
472 }
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
473
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
474 OUTL(atgep, ATGE_MAC_CFG, reg);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
475
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
476 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
477 case ATGE_CHIP_L1E:
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
478 reg = ATGE_USECS(ATGE_IM_RX_TIMER_DEFAULT) << IM_TIMER_RX_SHIFT;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
479 reg |= ATGE_USECS(ATGE_IM_TX_TIMER_DEFAULT) <<
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
480 IM_TIMER_TX_SHIFT;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
481 OUTL(atgep, ATGE_IM_TIMER, reg);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
482 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
483 case ATGE_CHIP_L1:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
484 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
485 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
486 /* Configure interrupt moderation timer. */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
487 reg = ATGE_USECS(atgep->atge_int_rx_mod) << IM_TIMER_RX_SHIFT;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
488 reg |= ATGE_USECS(atgep->atge_int_tx_mod) << IM_TIMER_TX_SHIFT;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
489 OUTL(atgep, ATGE_IM_TIMER, reg);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
490 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
491 * We don't want to automatic interrupt clear as task queue
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
492 * for the interrupt should know interrupt status.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
493 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
494 reg = 0;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
495 if (ATGE_USECS(atgep->atge_int_rx_mod) != 0)
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
496 reg |= MASTER_IM_RX_TIMER_ENB;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
497 if (ATGE_USECS(atgep->atge_int_tx_mod) != 0)
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
498 reg |= MASTER_IM_TX_TIMER_ENB;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
499 OUTL(atgep, ATGE_MASTER_CFG, reg);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
500 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
501 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
502
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
503 ATGE_DB(("%s: %s() mac_cfg is : %x",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
504 atgep->atge_name, __func__, INL(atgep, ATGE_MAC_CFG)));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
505 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
506
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
507 static void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
508 atge_mii_notify(void *arg, link_state_t link)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
509 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
510 atge_t *atgep = arg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
511
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
512 ATGE_DB(("%s: %s() LINK STATUS CHANGED from %x -> %x",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
513 atgep->atge_name, __func__, atgep->atge_link_state, link));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
514
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
515 mac_link_update(atgep->atge_mh, link);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
516
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
517 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
518 * Reconfigure MAC if link status is UP now.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
519 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
520 mutex_enter(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
521 if (link == LINK_STATE_UP) {
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
522 atgep->atge_link_state = LINK_STATE_UP;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
523 atge_mac_config(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
524 atgep->atge_tx_resched = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
525 } else {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
526 atgep->atge_link_state = LINK_STATE_DOWN;
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
527 atgep->atge_flags |= ATGE_MII_CHECK;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
528 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
529
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
530 mutex_exit(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
531
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
532 if (link == LINK_STATE_UP)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
533 mac_tx_update(atgep->atge_mh);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
534 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
535
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
536 void
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
537 atge_tx_reclaim(atge_t *atgep, int end)
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
538 {
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
539 atge_tx_desc_t *txd;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
540 atge_ring_t *r = atgep->atge_tx_ring;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
541 uchar_t *c;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
542 int start;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
543
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
544 ASSERT(MUTEX_HELD(&atgep->atge_tx_lock));
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
545 ASSERT(r != NULL);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
546
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
547 start = r->r_consumer;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
548
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
549 if (start == end)
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
550 return;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
551
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
552 while (start != end) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
553 r->r_avail_desc++;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
554 if (r->r_avail_desc > ATGE_TX_RING_CNT) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
555
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
556 atge_error(atgep->atge_dip,
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
557 "Reclaim : TX descriptor error");
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
558
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
559 if (r->r_avail_desc > (ATGE_TX_RING_CNT + 5)) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
560 atge_device_stop(atgep);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
561 break;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
562 }
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
563 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
564
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
565 c = (uchar_t *)r->r_desc_ring->addr;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
566 c += (sizeof (atge_tx_desc_t) * start);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
567 txd = (atge_tx_desc_t *)c;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
568
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
569 /*
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
570 * Clearing TX descriptor helps in debugging some strange
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
571 * problems.
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
572 */
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
573 txd->addr = 0;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
574 txd->len = 0;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
575 txd->flags = 0;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
576
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
577 ATGE_INC_SLOT(start, ATGE_TX_RING_CNT);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
578 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
579
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
580 atgep->atge_tx_ring->r_consumer = start;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
581
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
582 DMA_SYNC(r->r_desc_ring, 0, ATGE_TX_RING_SZ, DDI_DMA_SYNC_FORDEV);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
583 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
584
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
585 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
586 * Adds interrupt handler depending upon the type of interrupt supported by
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
587 * the chip.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
588 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
589 static int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
590 atge_add_intr_handler(atge_t *atgep, int intr_type)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
591 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
592 int err;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
593 int count = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
594 int avail = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
595 int i;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
596 int flag;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
597
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
598 if (intr_type != DDI_INTR_TYPE_FIXED) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
599 err = ddi_intr_get_nintrs(atgep->atge_dip, intr_type, &count);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
600 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
601 atge_error(atgep->atge_dip,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
602 "ddi_intr_get_nintrs failed : %d", err);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
603 return (DDI_FAILURE);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
604 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
605
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
606 ATGE_DB(("%s: %s() count : %d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
607 atgep->atge_name, __func__, count));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
608
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
609 err = ddi_intr_get_navail(atgep->atge_dip, intr_type, &avail);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
610 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
611 atge_error(atgep->atge_dip,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
612 "ddi_intr_get_navail failed : %d", err);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
613 return (DDI_FAILURE);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
614 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
615
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
616 if (avail < count) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
617 atge_error(atgep->atge_dip, "count :%d,"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
618 " avail : %d", count, avail);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
619 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
620
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
621 flag = DDI_INTR_ALLOC_STRICT;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
622 } else {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
623 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
624 * DDI_INTR_TYPE_FIXED case.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
625 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
626 count = 1;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
627 avail = 1;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
628 flag = DDI_INTR_ALLOC_NORMAL;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
629 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
630
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
631 atgep->atge_intr_size = avail * sizeof (ddi_intr_handle_t);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
632 atgep->atge_intr_handle = kmem_zalloc(atgep->atge_intr_size, KM_SLEEP);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
633
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
634 ATGE_DB(("%s: %s() avail:%d, count : %d, type : %d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
635 atgep->atge_name, __func__, avail, count,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
636 intr_type));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
637
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
638 err = ddi_intr_alloc(atgep->atge_dip, atgep->atge_intr_handle,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
639 intr_type, 0, avail, &atgep->atge_intr_cnt, flag);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
640
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
641 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
642 atge_error(atgep->atge_dip, "ddi_intr_alloc failed : %d", err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
643 kmem_free(atgep->atge_intr_handle, atgep->atge_intr_size);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
644 return (DDI_FAILURE);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
645 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
646
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
647 ATGE_DB(("%s: atge_add_intr_handler() after alloc count"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
648 " :%d, avail : %d", atgep->atge_name, count, avail));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
649
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
650 err = ddi_intr_get_pri(atgep->atge_intr_handle[0],
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
651 &atgep->atge_intr_pri);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
652 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
653 atge_error(atgep->atge_dip, "ddi_intr_get_pri failed:%d", err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
654 for (i = 0; i < atgep->atge_intr_cnt; i++) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
655 (void) ddi_intr_free(atgep->atge_intr_handle[i]);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
656 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
657 kmem_free(atgep->atge_intr_handle, atgep->atge_intr_size);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
658
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
659 return (DDI_FAILURE);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
660 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
661
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
662 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
663 * Add interrupt handler now.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
664 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
665 for (i = 0; i < atgep->atge_intr_cnt; i++) {
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
666 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
667 case ATGE_CHIP_L1E:
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
668 err = ddi_intr_add_handler(atgep->atge_intr_handle[i],
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
669 atge_l1e_interrupt, atgep, (caddr_t)(uintptr_t)i);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
670 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
671 case ATGE_CHIP_L1:
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
672 err = ddi_intr_add_handler(atgep->atge_intr_handle[i],
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
673 atge_l1_interrupt, atgep, (caddr_t)(uintptr_t)i);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
674 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
675 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
676 err = ddi_intr_add_handler(atgep->atge_intr_handle[i],
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
677 atge_l1c_interrupt, atgep, (caddr_t)(uintptr_t)i);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
678 break;
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
679 }
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
680
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
681 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
682 atge_error(atgep->atge_dip,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
683 "ddi_intr_add_handler failed : %d", err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
684
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
685 (void) ddi_intr_free(atgep->atge_intr_handle[i]);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
686 while (--i >= 0) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
687 (void) ddi_intr_remove_handler(
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
688 atgep->atge_intr_handle[i]);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
689 (void) ddi_intr_free(
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
690 atgep->atge_intr_handle[i]);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
691 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
692
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
693 kmem_free(atgep->atge_intr_handle,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
694 atgep->atge_intr_size);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
695
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
696 return (DDI_FAILURE);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
697 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
698 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
699
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
700 err = ddi_intr_get_cap(atgep->atge_intr_handle[0],
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
701 &atgep->atge_intr_cap);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
702
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
703 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
704 atge_error(atgep->atge_dip,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
705 "ddi_intr_get_cap failed : %d", err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
706 atge_remove_intr(atgep);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
707 return (DDI_FAILURE);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
708 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
709
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
710 if (intr_type == DDI_INTR_TYPE_FIXED)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
711 atgep->atge_flags |= ATGE_FIXED_TYPE;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
712 else if (intr_type == DDI_INTR_TYPE_MSI)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
713 atgep->atge_flags |= ATGE_MSI_TYPE;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
714 else if (intr_type == DDI_INTR_TYPE_MSIX)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
715 atgep->atge_flags |= ATGE_MSIX_TYPE;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
716
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
717 return (DDI_SUCCESS);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
718 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
719
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
720 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
721 atge_remove_intr(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
722 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
723 int i;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
724 int cap = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
725
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
726 if (atgep->atge_intr_handle == NULL)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
727 return;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
728
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
729 if (atgep->atge_intr_cap & DDI_INTR_FLAG_BLOCK) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
730 (void) ddi_intr_block_disable(atgep->atge_intr_handle,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
731 atgep->atge_intr_cnt);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
732
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
733 cap = 1;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
734 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
735
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
736 for (i = 0; i < atgep->atge_intr_cnt; i++) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
737 if (cap == 0)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
738 (void) ddi_intr_disable(atgep->atge_intr_handle[i]);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
739
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
740 (void) ddi_intr_remove_handler(atgep->atge_intr_handle[i]);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
741 (void) ddi_intr_free(atgep->atge_intr_handle[i]);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
742 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
743
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
744 kmem_free(atgep->atge_intr_handle, atgep->atge_intr_size);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
745 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
746
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
747 int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
748 atge_enable_intrs(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
749 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
750 int err;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
751 int i;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
752
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
753 if (atgep->atge_intr_cap & DDI_INTR_FLAG_BLOCK) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
754 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
755 * Do block enable.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
756 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
757 err = ddi_intr_block_enable(atgep->atge_intr_handle,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
758 atgep->atge_intr_cnt);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
759
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
760 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
761 atge_error(atgep->atge_dip,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
762 "Failed to block enable intrs %d", err);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
763 err = DDI_FAILURE;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
764 } else {
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
765 err = DDI_SUCCESS;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
766 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
767 } else {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
768 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
769 * Call ddi_intr_enable() for MSI non-block enable.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
770 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
771 for (i = 0; i < atgep->atge_intr_cnt; i++) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
772 err = ddi_intr_enable(atgep->atge_intr_handle[i]);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
773 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
774 atge_error(atgep->atge_dip,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
775 "Failed to enable intrs on %d with : %d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
776 i, err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
777 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
778 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
779 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
780
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
781 if (err == DDI_SUCCESS)
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
782 err = DDI_SUCCESS;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
783 else
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
784 err = DDI_FAILURE;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
785 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
786
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
787 return (err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
788 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
789
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
790 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
791 * Adds interrupt handler depending on the supported interrupt type by the
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
792 * chip.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
793 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
794 static int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
795 atge_add_intr(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
796 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
797 int err;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
798
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
799 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
800 * Get the supported interrupt types.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
801 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
802 err = ddi_intr_get_supported_types(atgep->atge_dip,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
803 &atgep->atge_intr_types);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
804 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
805 atge_error(atgep->atge_dip,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
806 "ddi_intr_get_supported_types failed : %d", err);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
807 return (DDI_FAILURE);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
808 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
809
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
810 ATGE_DB(("%s: ddi_intr_get_supported_types() returned : %d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
811 atgep->atge_name, atgep->atge_intr_types));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
812
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
813
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
814 if (atgep->atge_intr_types & DDI_INTR_TYPE_MSIX) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
815 err = atge_add_intr_handler(atgep, DDI_INTR_TYPE_MSIX);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
816 if (err == DDI_SUCCESS) {
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
817 ATGE_DB(("%s: Using MSIx for interrupt",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
818 atgep->atge_name));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
819 return (err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
820 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
821 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
822
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
823 if (atgep->atge_intr_types & DDI_INTR_TYPE_MSI) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
824 err = atge_add_intr_handler(atgep, DDI_INTR_TYPE_MSI);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
825 if (err == DDI_SUCCESS) {
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
826 ATGE_DB(("%s: Using MSI for interrupt",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
827 atgep->atge_name));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
828 return (err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
829 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
830 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
831
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
832 err = DDI_FAILURE;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
833 if (atgep->atge_intr_types & DDI_INTR_TYPE_FIXED) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
834 err = atge_add_intr_handler(atgep, DDI_INTR_TYPE_FIXED);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
835 if (err == DDI_SUCCESS) {
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
836 ATGE_DB(("%s: Using FIXED type for interrupt",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
837 atgep->atge_name));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
838 return (err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
839 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
840 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
841
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
842 return (err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
843 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
844
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
845 int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
846 atge_identify_hardware(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
847 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
848 uint16_t vid, did;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
849 int i;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
850
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
851 vid = pci_config_get16(atgep->atge_conf_handle, PCI_CONF_VENID);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
852 did = pci_config_get16(atgep->atge_conf_handle, PCI_CONF_DEVID);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
853
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
854 atgep->atge_model = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
855 for (i = 0; i < (sizeof (atge_cards) / sizeof (atge_cards_t)); i++) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
856 if (atge_cards[i].vendor_id == vid &&
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
857 atge_cards[i].device_id == did) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
858 atgep->atge_model = atge_cards[i].model;
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
859 atgep->atge_vid = vid;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
860 atgep->atge_did = did;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
861 atgep->atge_revid =
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
862 pci_config_get8(atgep->atge_conf_handle,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
863 PCI_CONF_REVID);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
864 atge_notice(atgep->atge_dip, "PCI-ID pci%x,%x,%x: %s",
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
865 vid, did, atgep->atge_revid,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
866 atge_cards[i].cardname);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
867 ATGE_DB(("%s: %s : PCI-ID pci%x,%x and model : %d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
868 atgep->atge_name, __func__, vid, did,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
869 atgep->atge_model));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
870
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
871 return (DDI_SUCCESS);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
872 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
873 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
874
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
875 atge_error(atgep->atge_dip, "atge driver is attaching to unknown"
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
876 " pci%x,%x vendor/device-id card", vid, did);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
877
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
878 /*
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
879 * Assume it's L1C chip.
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
880 */
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
881 atgep->atge_model = ATGE_CHIP_L1C;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
882 atgep->atge_vid = vid;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
883 atgep->atge_did = did;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
884 atgep->atge_revid = pci_config_get8(atgep->atge_conf_handle,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
885 PCI_CONF_REVID);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
886
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
887 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
888 * We will leave the decision to caller.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
889 */
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
890 return (DDI_FAILURE);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
891 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
892
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
893 int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
894 atge_get_macaddr(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
895 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
896 uint32_t reg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
897
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
898 reg = INL(atgep, ATGE_SPI_CTRL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
899 if ((reg & SPI_VPD_ENB) != 0) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
900 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
901 * Get VPD stored in TWSI EEPROM.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
902 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
903 reg &= ~SPI_VPD_ENB;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
904 OUTL(atgep, ATGE_SPI_CTRL, reg);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
905
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
906 ATGE_DB(("%s: %s called Get VPD", atgep->atge_name, __func__));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
907 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
908
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
909 atgep->atge_ether_addr[5] = INB(atgep, ATGE_PAR0 + 0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
910 atgep->atge_ether_addr[4] = INB(atgep, ATGE_PAR0 + 1);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
911 atgep->atge_ether_addr[3] = INB(atgep, ATGE_PAR0 + 2);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
912 atgep->atge_ether_addr[2] = INB(atgep, ATGE_PAR0 + 3);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
913 atgep->atge_ether_addr[1] = INB(atgep, ATGE_PAR1 + 0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
914 atgep->atge_ether_addr[0] = INB(atgep, ATGE_PAR1 + 1);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
915
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
916 ATGE_DB(("%s: %s() Station Address - %x:%x:%x:%x:%x:%x",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
917 atgep->atge_name, __func__,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
918 atgep->atge_ether_addr[0],
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
919 atgep->atge_ether_addr[1],
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
920 atgep->atge_ether_addr[2],
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
921 atgep->atge_ether_addr[3],
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
922 atgep->atge_ether_addr[4],
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
923 atgep->atge_ether_addr[5]));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
924
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
925 bcopy(atgep->atge_ether_addr, atgep->atge_dev_addr, ETHERADDRL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
926
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
927 return (DDI_SUCCESS);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
928 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
929
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
930 /*
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
931 * Reset functionality for L1, L1E, and L1C. It's same.
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
932 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
933 static void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
934 atge_device_reset(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
935 {
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
936 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
937 case ATGE_CHIP_L1E:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
938 case ATGE_CHIP_L1:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
939 case ATGE_CHIP_L1C:
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
940 atge_device_reset_l1_l1e(atgep);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
941 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
942 }
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
943 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
944
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
945 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
946 atge_device_reset_l1_l1e(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
947 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
948 uint32_t reg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
949 int t;
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
950 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
951 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
952 OUTL(atgep, ATGE_MASTER_CFG, MASTER_RESET | 0x40);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
953 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
954 default:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
955 OUTL(atgep, ATGE_MASTER_CFG, MASTER_RESET);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
956 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
957 }
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
958 reg = INL(atgep, ATGE_MASTER_CFG);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
959 for (t = ATGE_RESET_TIMEOUT; t > 0; t--) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
960 drv_usecwait(10);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
961 reg = INL(atgep, ATGE_MASTER_CFG);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
962 if ((reg & MASTER_RESET) == 0)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
963 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
964 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
965
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
966 if (t == 0) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
967 atge_error(atgep->atge_dip, " master reset timeout reg : %x",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
968 reg);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
969 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
970
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
971 for (t = ATGE_RESET_TIMEOUT; t > 0; t--) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
972 if ((reg = INL(atgep, ATGE_IDLE_STATUS)) == 0)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
973 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
974
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
975 drv_usecwait(10);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
976 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
977
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
978 if (t == 0) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
979 atge_error(atgep->atge_dip, "device reset timeout reg : %x",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
980 reg);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
981 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
982
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
983 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
984 case ATGE_CHIP_L1E:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
985 case ATGE_CHIP_L1:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
986 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
987 * Initialize PCIe module. These values came from FreeBSD and
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
988 * we don't know the meaning of it.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
989 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
990 OUTL(atgep, ATGE_LTSSM_ID_CFG, 0x6500);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
991 reg = INL(atgep, 0x1008) | 0x8000;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
992 OUTL(atgep, 0x1008, reg);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
993 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
994 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
995 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
996 }
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
997
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
998 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
999 * Get chip revision.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1000 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1001 atgep->atge_chip_rev = INL(atgep, ATGE_MASTER_CFG) >>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1002 MASTER_CHIP_REV_SHIFT;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1003
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1004 ATGE_DB(("%s: %s reset successfully rev : %x", atgep->atge_name,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1005 __func__, atgep->atge_chip_rev));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1006 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1007
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1008 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1009 * DMA allocation for L1 and L1E is bit different since L1E uses RX pages
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1010 * instead of descriptor based RX model.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1011 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1012 static int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1013 atge_alloc_dma(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1014 {
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1015 int err = DDI_FAILURE;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1016
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1017 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1018 case ATGE_CHIP_L1E:
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1019 err = atge_l1e_alloc_dma(atgep);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1020 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1021 case ATGE_CHIP_L1:
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1022 err = atge_l1_alloc_dma(atgep);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1023 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1024 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1025 err = atge_l1c_alloc_dma(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1026 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1027 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1028
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1029 return (err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1030 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1031
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1032 static void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1033 atge_free_dma(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1034 {
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1035 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1036 case ATGE_CHIP_L1E:
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1037 atge_l1e_free_dma(atgep);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1038 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1039 case ATGE_CHIP_L1:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1040 atge_l1_free_dma(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1041 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1042 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1043 atge_l1c_free_dma(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1044 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1045 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1046 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1047
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1048 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1049 * Attach entry point in the driver.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1050 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1051 static int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1052 atge_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1053 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1054 atge_t *atgep;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1055 mac_register_t *macreg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1056 int instance;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1057 uint16_t cap_ptr;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1058 uint16_t burst;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1059 int err;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1060 mii_ops_t *mii_ops;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1061
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1062 instance = ddi_get_instance(devinfo);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1063
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1064 switch (cmd) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1065 case DDI_RESUME:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1066 return (atge_resume(devinfo));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1067
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1068 case DDI_ATTACH:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1069 ddi_set_driver_private(devinfo, NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1070 break;
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1071 default:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1072 return (DDI_FAILURE);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1073
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1074 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1075
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1076 atgep = kmem_zalloc(sizeof (atge_t), KM_SLEEP);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1077 ddi_set_driver_private(devinfo, atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1078 atgep->atge_dip = devinfo;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1079
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1080 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1081 * Setup name and instance number to be used for debugging and
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1082 * error reporting.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1083 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1084 (void) snprintf(atgep->atge_name, sizeof (atgep->atge_name), "%s%d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1085 "atge", instance);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1086
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1087
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1088 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1089 * Map PCI config space.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1090 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1091 err = pci_config_setup(devinfo, &atgep->atge_conf_handle);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1092 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1093 atge_error(devinfo, "pci_config_setup() failed");
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1094 goto fail1;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1095 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1096
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1097 (void) atge_identify_hardware(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1098
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1099 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1100 * Map Device registers.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1101 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1102 err = ddi_regs_map_setup(devinfo, ATGE_PCI_REG_NUMBER,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1103 &atgep->atge_io_regs, 0, 0, &atge_dev_attr, &atgep->atge_io_handle);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1104 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1105 atge_error(devinfo, "ddi_regs_map_setup() failed");
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1106 goto fail2;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1107 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1108
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1109 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1110 * Add interrupt and its associated handler.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1111 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1112 err = atge_add_intr(atgep);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1113 if (err != DDI_SUCCESS) {
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1114 atge_error(devinfo, "Failed to add interrupt handler");
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1115 goto fail3;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1116 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1117
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1118 mutex_init(&atgep->atge_intr_lock, NULL, MUTEX_DRIVER,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1119 DDI_INTR_PRI(atgep->atge_intr_pri));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1120
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1121 mutex_init(&atgep->atge_tx_lock, NULL, MUTEX_DRIVER,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1122 DDI_INTR_PRI(atgep->atge_intr_pri));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1123
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1124 mutex_init(&atgep->atge_rx_lock, NULL, MUTEX_DRIVER,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1125 DDI_INTR_PRI(atgep->atge_intr_pri));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1126
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1127 mutex_init(&atgep->atge_mii_lock, NULL, MUTEX_DRIVER, NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1128
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1129 /*
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1130 * Used to lock down MBOX register on L1 chip since RX consumer,
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1131 * TX producer and RX return ring consumer are shared.
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1132 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1133 mutex_init(&atgep->atge_mbox_lock, NULL, MUTEX_DRIVER,
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1134 DDI_INTR_PRI(atgep->atge_intr_pri));
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1135
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1136 atgep->atge_link_state = LINK_STATE_DOWN;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1137 atgep->atge_mtu = ETHERMTU;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1138
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1139 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1140 case ATGE_CHIP_L1E:
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1141 if (atgep->atge_revid > 0xF0) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1142 /* L2E Rev. B. AR8114 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1143 atgep->atge_flags |= ATGE_FLAG_FASTETHER;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1144 } else {
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1145 if ((INL(atgep, L1E_PHY_STATUS) &
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1146 PHY_STATUS_100M) != 0) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1147 /* L1E AR8121 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1148 atgep->atge_flags |= ATGE_FLAG_JUMBO;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1149 } else {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1150 /* L2E Rev. A. AR8113 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1151 atgep->atge_flags |= ATGE_FLAG_FASTETHER;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1152 }
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1153 }
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1154 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1155 case ATGE_CHIP_L1:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1156 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1157 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1158 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1159 * One odd thing is AR8132 uses the same PHY hardware(F1
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1160 * gigabit PHY) of AR8131. So atphy(4) of AR8132 reports
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1161 * the PHY supports 1000Mbps but that's not true. The PHY
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1162 * used in AR8132 can't establish gigabit link even if it
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1163 * shows the same PHY model/revision number of AR8131.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1164 *
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1165 * It seems that AR813x/AR815x has silicon bug for SMB. In
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1166 * addition, Atheros said that enabling SMB wouldn't improve
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1167 * performance. However I think it's bad to access lots of
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1168 * registers to extract MAC statistics.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1169 *
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1170 * Don't use Tx CMB. It is known to have silicon bug.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1171 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1172 switch (ATGE_DID(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1173 case ATGE_CHIP_AR8152V2_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1174 case ATGE_CHIP_AR8152V1_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1175 atgep->atge_flags |= ATGE_FLAG_APS |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1176 ATGE_FLAG_FASTETHER |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1177 ATGE_FLAG_ASPM_MON | ATGE_FLAG_JUMBO |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1178 ATGE_FLAG_SMB_BUG | ATGE_FLAG_CMB_BUG;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1179 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1180 case ATGE_CHIP_AR8151V2_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1181 case ATGE_CHIP_AR8151V1_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1182 atgep->atge_flags |= ATGE_FLAG_APS |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1183 ATGE_FLAG_ASPM_MON | ATGE_FLAG_JUMBO |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1184 ATGE_FLAG_SMB_BUG | ATGE_FLAG_CMB_BUG;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1185 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1186 case ATGE_CHIP_L1CF_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1187 atgep->atge_flags |= ATGE_FLAG_FASTETHER;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1188 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1189 case ATGE_CHIP_L1CG_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1190 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1191 }
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1192 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1193 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1194
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1195 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1196 * Get DMA parameters from PCIe device control register.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1197 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1198 err = PCI_CAP_LOCATE(atgep->atge_conf_handle, PCI_CAP_ID_PCI_E,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1199 &cap_ptr);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1200
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1201 if (err == DDI_FAILURE) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1202 atgep->atge_dma_rd_burst = DMA_CFG_RD_BURST_128;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1203 atgep->atge_dma_wr_burst = DMA_CFG_WR_BURST_128;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1204 } else {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1205 atgep->atge_flags |= ATGE_FLAG_PCIE;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1206 burst = pci_config_get16(atgep->atge_conf_handle,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1207 cap_ptr + 0x08);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1208
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1209 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1210 * Max read request size.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1211 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1212 atgep->atge_dma_rd_burst = ((burst >> 12) & 0x07) <<
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1213 DMA_CFG_RD_BURST_SHIFT;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1214
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1215 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1216 * Max Payload Size.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1217 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1218 atgep->atge_dma_wr_burst = ((burst >> 5) & 0x07) <<
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1219 DMA_CFG_WR_BURST_SHIFT;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1220
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1221 ATGE_DB(("%s: %s() MRR : %d, MPS : %d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1222 atgep->atge_name, __func__,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1223 (128 << ((burst >> 12) & 0x07)),
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1224 (128 << ((burst >> 5) & 0x07))));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1225 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1226
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1227 /* Clear data link and flow-control protocol error. */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1228 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1229 case ATGE_CHIP_L1E:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1230 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1231 case ATGE_CHIP_L1:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1232 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1233 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1234 OUTL_AND(atgep, ATGE_PEX_UNC_ERR_SEV,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1235 ~(PEX_UNC_ERR_SEV_UC | PEX_UNC_ERR_SEV_FCP));
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1236 OUTL_AND(atgep, ATGE_LTSSM_ID_CFG, ~LTSSM_ID_WRO_ENB);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1237 OUTL_OR(atgep, ATGE_PCIE_PHYMISC, PCIE_PHYMISC_FORCE_RCV_DET);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1238 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1239 }
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1240
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1241 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1242 * Allocate DMA resources.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1243 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1244 err = atge_alloc_dma(atgep);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1245 if (err != DDI_SUCCESS) {
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1246 atge_error(devinfo, "Failed to allocate DMA resources");
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1247 goto fail4;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1248 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1249
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1250 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1251 * Get station address.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1252 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1253 (void) atge_get_macaddr(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1254
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1255 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1256 * Setup MII.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1257 */
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1258 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1259 case ATGE_CHIP_L1E:
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1260 mii_ops = &atge_l1e_mii_ops;
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1261 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1262 case ATGE_CHIP_L1:
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1263 mii_ops = &atge_l1_mii_ops;
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1264 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1265 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1266 mii_ops = &atge_l1c_mii_ops;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1267 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1268 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1269
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1270 if ((atgep->atge_mii = mii_alloc(atgep, devinfo,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1271 mii_ops)) == NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1272 atge_error(devinfo, "mii_alloc() failed");
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1273 goto fail4;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1274 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1275
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1276 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1277 * Register with MAC layer.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1278 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1279 if ((macreg = mac_alloc(MAC_VERSION)) == NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1280 atge_error(devinfo, "mac_alloc() failed due to version");
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1281 goto fail4;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1282 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1283
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1284 macreg->m_type_ident = MAC_PLUGIN_IDENT_ETHER;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1285 macreg->m_driver = atgep;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1286 macreg->m_dip = devinfo;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1287 macreg->m_instance = instance;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1288 macreg->m_src_addr = atgep->atge_ether_addr;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1289 macreg->m_callbacks = &atge_m_callbacks;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1290 macreg->m_min_sdu = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1291 macreg->m_max_sdu = atgep->atge_mtu;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1292 macreg->m_margin = VLAN_TAGSZ;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1293
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1294 if ((err = mac_register(macreg, &atgep->atge_mh)) != 0) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1295 atge_error(devinfo, "mac_register() failed with :%d", err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1296 mac_free(macreg);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1297 goto fail4;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1298 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1299
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1300 mac_free(macreg);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1301
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1302 ATGE_DB(("%s: %s() driver attached successfully",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1303 atgep->atge_name, __func__));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1304
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1305 atge_device_reset(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1306
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1307 atgep->atge_chip_state = ATGE_CHIP_INITIALIZED;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1308
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1309 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1310 * At last - enable interrupts.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1311 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1312 err = atge_enable_intrs(atgep);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1313 if (err == DDI_FAILURE) {
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1314 goto fail5;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1315 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1316
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1317 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1318 * Reset the PHY before starting.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1319 */
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1320 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1321 case ATGE_CHIP_L1E:
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1322 atge_l1e_mii_reset(atgep);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1323 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1324 case ATGE_CHIP_L1:
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1325 atge_l1_mii_reset(atgep);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1326 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1327 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1328 atge_l1c_mii_reset(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1329 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1330 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1331
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1332 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1333 * Let the PHY run.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1334 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1335 mii_start(atgep->atge_mii);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1336
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1337 return (DDI_SUCCESS);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1338
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1339 fail5:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1340 (void) mac_unregister(atgep->atge_mh);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1341 atge_device_stop(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1342 mii_stop(atgep->atge_mii);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1343 mii_free(atgep->atge_mii);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1344 fail4:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1345 atge_free_dma(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1346 mutex_destroy(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1347 mutex_destroy(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1348 mutex_destroy(&atgep->atge_rx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1349 atge_remove_intr(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1350 fail3:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1351 ddi_regs_map_free(&atgep->atge_io_handle);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1352 fail2:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1353 pci_config_teardown(&atgep->atge_conf_handle);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1354 fail1:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1355 if (atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1356 kmem_free(atgep, sizeof (atge_t));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1357
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1358 return (DDI_FAILURE);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1359 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1360
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1361 static int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1362 atge_detach(dev_info_t *dip, ddi_detach_cmd_t cmd)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1363 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1364 atge_t *atgep;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1365
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1366 atgep = ddi_get_driver_private(dip);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1367 if (atgep == NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1368 atge_error(dip, "No soft state in detach");
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1369 return (DDI_FAILURE);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1370 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1371
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1372 switch (cmd) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1373 case DDI_DETACH:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1374
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1375 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1376 * First unregister with MAC layer before stopping DMA
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1377 */
12398
d1a36c3701ab 6918729 atge race in mac_detach
Garrett D'Amore <gdamore@opensolaris.org>
parents: 11878
diff changeset
1378 if (mac_disable(atgep->atge_mh) != DDI_SUCCESS)
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1379 return (DDI_FAILURE);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1380
12398
d1a36c3701ab 6918729 atge race in mac_detach
Garrett D'Amore <gdamore@opensolaris.org>
parents: 11878
diff changeset
1381 mii_stop(atgep->atge_mii);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1382
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1383 mutex_enter(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1384 mutex_enter(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1385 atge_device_stop(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1386 mutex_exit(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1387 mutex_exit(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1388
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1389 mii_free(atgep->atge_mii);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1390 atge_free_dma(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1391
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1392 ddi_regs_map_free(&atgep->atge_io_handle);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1393 atge_remove_intr(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1394 pci_config_teardown(&atgep->atge_conf_handle);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1395
12398
d1a36c3701ab 6918729 atge race in mac_detach
Garrett D'Amore <gdamore@opensolaris.org>
parents: 11878
diff changeset
1396 (void) mac_unregister(atgep->atge_mh);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1397 mutex_destroy(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1398 mutex_destroy(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1399 mutex_destroy(&atgep->atge_rx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1400 kmem_free(atgep, sizeof (atge_t));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1401 ddi_set_driver_private(dip, NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1402
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1403 return (DDI_SUCCESS);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1404
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1405 case DDI_SUSPEND:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1406 ATGE_DB(("%s: %s() is being suspended",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1407 atgep->atge_name, __func__));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1408
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1409 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1410 * Suspend monitoring MII.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1411 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1412 mii_suspend(atgep->atge_mii);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1413
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1414 mutex_enter(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1415 mutex_enter(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1416 atgep->atge_chip_state |= ATGE_CHIP_SUSPENDED;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1417 atge_device_stop(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1418 mutex_exit(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1419 mutex_exit(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1420
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1421 return (DDI_SUCCESS);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1422
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1423 default:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1424 return (DDI_FAILURE);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1425 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1426 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1427
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1428 int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1429 atge_alloc_buffers(atge_ring_t *r, size_t rcnt, size_t buflen, int f)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1430 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1431 atge_dma_t *dma;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1432 atge_dma_t **tbl;
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1433 int err = DDI_SUCCESS;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1434 int i;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1435
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1436 tbl = kmem_zalloc(rcnt * sizeof (atge_dma_t *), KM_SLEEP);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1437 r->r_buf_tbl = tbl;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1438
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1439 for (i = 0; i < rcnt; i++) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1440 dma = atge_buf_alloc(r->r_atge, buflen, f);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1441 if (dma == NULL) {
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1442 err = DDI_FAILURE;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1443 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1444 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1445
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1446 tbl[i] = dma;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1447 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1448
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1449 return (err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1450 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1451
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1452 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1453 atge_free_buffers(atge_ring_t *r, size_t rcnt)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1454 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1455 atge_dma_t **tbl;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1456 int i;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1457
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1458 if (r == NULL || r->r_buf_tbl == NULL)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1459 return;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1460
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1461 tbl = r->r_buf_tbl;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1462 for (i = 0; i < rcnt; i++) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1463 if (tbl[i] != NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1464 atge_buf_free(tbl[i]);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1465 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1466 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1467
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1468 kmem_free(tbl, rcnt * sizeof (atge_dma_t *));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1469 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1470
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1471 atge_dma_t *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1472 atge_alloc_a_dma_blk(atge_t *atgep, ddi_dma_attr_t *attr, int size, int d)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1473 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1474 int err;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1475 atge_dma_t *dma;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1476
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1477 dma = kmem_zalloc(sizeof (atge_dma_t), KM_SLEEP);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1478
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1479 err = ddi_dma_alloc_handle(atgep->atge_dip, attr,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1480 DDI_DMA_SLEEP, NULL, &dma->hdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1481
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1482 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1483 atge_error(atgep->atge_dip, "%s() : failed"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1484 " in ddi_dma_alloc_handle() : %d", __func__, err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1485 goto fail;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1486 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1487
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1488 err = ddi_dma_mem_alloc(dma->hdl,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1489 size, &atge_buf_attr, DDI_DMA_CONSISTENT, DDI_DMA_SLEEP, NULL,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1490 &dma->addr, &dma->len, &dma->acchdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1491
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1492 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1493 atge_error(atgep->atge_dip, "%s() : failed"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1494 " in ddi_dma_mem_alloc() : %d", __func__, err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1495 ddi_dma_free_handle(&dma->hdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1496 goto fail;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1497 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1498
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1499 err = ddi_dma_addr_bind_handle(dma->hdl, NULL, dma->addr,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1500 dma->len, d | DDI_DMA_CONSISTENT, DDI_DMA_SLEEP,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1501 NULL, &dma->cookie, &dma->count);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1502
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1503 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1504 atge_error(atgep->atge_dip, "%s() : failed"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1505 " in ddi_dma_addr_bind_handle() : %d", __func__, err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1506 ddi_dma_mem_free(&dma->acchdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1507 ddi_dma_free_handle(&dma->hdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1508 goto fail;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1509 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1510
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1511 return (dma);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1512 fail:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1513 kmem_free(dma, sizeof (atge_dma_t));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1514 return (NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1515 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1516
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1517 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1518 atge_free_a_dma_blk(atge_dma_t *dma)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1519 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1520 if (dma != NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1521 (void) ddi_dma_unbind_handle(dma->hdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1522 ddi_dma_mem_free(&dma->acchdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1523 ddi_dma_free_handle(&dma->hdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1524 kmem_free(dma, sizeof (atge_dma_t));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1525 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1526 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1527
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1528 atge_dma_t *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1529 atge_buf_alloc(atge_t *atgep, size_t len, int f)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1530 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1531 atge_dma_t *dma = NULL;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1532 int err;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1533
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1534 dma = kmem_zalloc(sizeof (atge_dma_t), KM_SLEEP);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1535
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1536 err = ddi_dma_alloc_handle(atgep->atge_dip, &atge_dma_attr_buf,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1537 DDI_DMA_SLEEP, NULL, &dma->hdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1538
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1539 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1540 atge_error(atgep->atge_dip, "%s() : failed"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1541 " in %s() : %d", __func__, err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1542 goto fail;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1543 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1544
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1545 err = ddi_dma_mem_alloc(dma->hdl, len, &atge_buf_attr,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1546 DDI_DMA_STREAMING, DDI_DMA_SLEEP, NULL, &dma->addr,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1547 &dma->len, &dma->acchdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1548
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1549 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1550 atge_error(atgep->atge_dip, "%s() : failed"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1551 " in %s() : %d", __func__, err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1552 ddi_dma_free_handle(&dma->hdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1553 goto fail;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1554 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1555
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1556 err = ddi_dma_addr_bind_handle(dma->hdl, NULL, dma->addr, dma->len,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1557 (f | DDI_DMA_CONSISTENT), DDI_DMA_SLEEP, NULL, &dma->cookie,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1558 &dma->count);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1559
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1560 if (err != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1561 atge_error(atgep->atge_dip, "%s() : failed"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1562 " in %s() : %d", __func__, err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1563 ddi_dma_mem_free(&dma->acchdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1564 ddi_dma_free_handle(&dma->hdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1565 goto fail;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1566 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1567
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1568 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1569 * Number of return'ed cookie should be one.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1570 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1571 ASSERT(dma->count == 1);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1572
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1573 return (dma);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1574 fail:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1575 kmem_free(dma, sizeof (atge_dma_t));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1576 return (NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1577 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1578
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1579 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1580 atge_buf_free(atge_dma_t *dma)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1581 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1582 ASSERT(dma != NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1583
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1584 (void) ddi_dma_unbind_handle(dma->hdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1585 ddi_dma_mem_free(&dma->acchdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1586 ddi_dma_free_handle(&dma->hdl);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1587 kmem_free(dma, sizeof (atge_dma_t));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1588 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1589
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1590 static int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1591 atge_resume(dev_info_t *dip)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1592 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1593 atge_t *atgep;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1594
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1595 if ((atgep = ddi_get_driver_private(dip)) == NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1596 return (DDI_FAILURE);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1597 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1598
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1599 mutex_enter(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1600 mutex_enter(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1601
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1602 atgep->atge_chip_state &= ~ATGE_CHIP_SUSPENDED;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1603
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1604 if (atgep->atge_chip_state & ATGE_CHIP_RUNNING) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1605 atge_device_restart(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1606 } else {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1607 atge_device_reset(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1608 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1609
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1610 mutex_exit(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1611 mutex_exit(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1612
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1613 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1614 * Reset the PHY before resuming MII.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1615 */
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1616 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1617 case ATGE_CHIP_L1E:
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1618 atge_l1e_mii_reset(atgep);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1619 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1620 case ATGE_CHIP_L1:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1621 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1622 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
1623 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1624 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1625
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1626 mii_resume(atgep->atge_mii);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1627
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1628 /* kick-off downstream */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1629 mac_tx_update(atgep->atge_mh);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1630
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1631 return (DDI_SUCCESS);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1632 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1633
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1634 static int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1635 atge_quiesce(dev_info_t *dip)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1636 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1637 atge_t *atgep;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1638
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1639 if ((atgep = ddi_get_driver_private(dip)) == NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1640 return (DDI_FAILURE);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1641 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1642
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1643 atge_device_stop(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1644
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1645 return (DDI_SUCCESS);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1646 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1647
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1648 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1649 atge_add_multicst(atge_t *atgep, uint8_t *macaddr)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1650 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1651 uint32_t crc;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1652 int bit;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1653
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1654 ASSERT(MUTEX_HELD(&atgep->atge_intr_lock));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1655 ASSERT(MUTEX_HELD(&atgep->atge_tx_lock));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1656
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1657 ATGE_DB(("%s: %s() %x:%x:%x:%x:%x:%x",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1658 atgep->atge_name, __func__, macaddr[0], macaddr[1], macaddr[2],
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1659 macaddr[3], macaddr[4], macaddr[5]));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1660
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1661 crc = atge_ether_crc(macaddr, ETHERADDRL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1662 bit = (crc >> 26);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1663 atgep->atge_mchash_ref_cnt[bit]++;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1664 atgep->atge_mchash |= (1ULL << (crc >> 26));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1665
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1666 ATGE_DB(("%s: %s() mchash :%llx, bit : %d,"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1667 " atge_mchash_ref_cnt[bit] :%d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1668 atgep->atge_name, __func__, atgep->atge_mchash, bit,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1669 atgep->atge_mchash_ref_cnt[bit]));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1670 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1671
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1672 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1673 atge_remove_multicst(atge_t *atgep, uint8_t *macaddr)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1674 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1675 uint32_t crc;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1676 int bit;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1677
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1678 ASSERT(MUTEX_HELD(&atgep->atge_intr_lock));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1679 ASSERT(MUTEX_HELD(&atgep->atge_tx_lock));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1680
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1681 ATGE_DB(("%s: %s() %x:%x:%x:%x:%x:%x",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1682 atgep->atge_name, __func__, macaddr[0], macaddr[1], macaddr[2],
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1683 macaddr[3], macaddr[4], macaddr[5]));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1684
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1685 crc = atge_ether_crc(macaddr, ETHERADDRL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1686 bit = (crc >> 26);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1687 atgep->atge_mchash_ref_cnt[bit]--;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1688 if (atgep->atge_mchash_ref_cnt[bit] == 0)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1689 atgep->atge_mchash &= ~(1ULL << (crc >> 26));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1690
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1691 ATGE_DB(("%s: %s() mchash :%llx, bit : %d,"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1692 " atge_mchash_ref_cnt[bit] :%d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1693 atgep->atge_name, __func__, atgep->atge_mchash, bit,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1694 atgep->atge_mchash_ref_cnt[bit]));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1695 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1696
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1697 int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1698 atge_m_multicst(void *arg, boolean_t add, const uint8_t *macaddr)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1699 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1700 atge_t *atgep = arg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1701
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1702 mutex_enter(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1703 mutex_enter(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1704
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1705 if (add) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1706 atge_add_multicst(atgep, (uint8_t *)macaddr);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1707 } else {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1708 atge_remove_multicst(atgep, (uint8_t *)macaddr);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1709 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1710
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1711 atge_rxfilter(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1712
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1713 mutex_exit(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1714 mutex_exit(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1715
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1716 return (0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1717 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1718
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1719 int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1720 atge_m_promisc(void *arg, boolean_t on)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1721 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1722 atge_t *atgep = arg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1723
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1724 mutex_enter(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1725 mutex_enter(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1726
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1727 if (on) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1728 atgep->atge_filter_flags |= ATGE_PROMISC;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1729 } else {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1730 atgep->atge_filter_flags &= ~ATGE_PROMISC;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1731 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1732
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1733 if (atgep->atge_chip_state & ATGE_CHIP_RUNNING) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1734 atge_rxfilter(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1735 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1736
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1737 mutex_exit(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1738 mutex_exit(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1739
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1740 return (0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1741 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1742
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1743 int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1744 atge_m_unicst(void *arg, const uint8_t *macaddr)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1745 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1746 atge_t *atgep = arg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1747
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1748 mutex_enter(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1749 mutex_enter(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1750 bcopy(macaddr, atgep->atge_ether_addr, ETHERADDRL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1751 atge_program_ether(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1752 atge_rxfilter(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1753 mutex_exit(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1754 mutex_exit(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1755
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1756 return (0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1757 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1758
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1759 mblk_t *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1760 atge_m_tx(void *arg, mblk_t *mp)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1761 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1762 atge_t *atgep = arg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1763 mblk_t *nmp;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1764
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1765 mutex_enter(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1766
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1767 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1768 * This NIC does not like us to send pkt when link is down.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1769 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1770 if (!(atgep->atge_link_state & LINK_STATE_UP)) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1771 atgep->atge_tx_resched = 1;
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1772
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1773 mutex_exit(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1774 return (mp);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1775 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1776
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1777 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1778 * Don't send a pkt if chip isn't running or in suspended state.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1779 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1780 if ((atgep->atge_chip_state & ATGE_CHIP_RUNNING) == 0 ||
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1781 atgep->atge_chip_state & ATGE_CHIP_SUSPENDED) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1782 atgep->atge_carrier_errors++;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1783 atgep->atge_tx_resched = 1;
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1784
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1785 mutex_exit(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1786 return (mp);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1787 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1788
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1789 while (mp != NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1790 nmp = mp->b_next;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1791 mp->b_next = NULL;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1792
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
1793 if (atge_send_a_packet(atgep, mp) == DDI_FAILURE) {
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1794 mp->b_next = nmp;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1795 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1796 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1797
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1798 mp = nmp;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1799 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1800
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1801 mutex_exit(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1802 return (mp);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1803 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1804
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1805 int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1806 atge_m_start(void *arg)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1807 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1808 atge_t *atgep = arg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1809 int started = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1810
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1811 ASSERT(atgep != NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1812
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1813
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1814 mii_stop(atgep->atge_mii);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1815
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1816 mutex_enter(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1817 mutex_enter(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1818
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1819 if (!(atgep->atge_chip_state & ATGE_CHIP_SUSPENDED)) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1820 atge_device_restart(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1821 started = 1;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1822 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1823
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1824 mutex_exit(&atgep->atge_tx_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1825 mutex_exit(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1826
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1827 mii_start(atgep->atge_mii);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1828
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1829 /* kick-off downstream */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1830 if (started)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1831 mac_tx_update(atgep->atge_mh);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1832
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1833 return (0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1834 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1835
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1836 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1837 atge_m_stop(void *arg)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1838 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1839 atge_t *atgep = arg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1840
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1841 mii_stop(atgep->atge_mii);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1842
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1843 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1844 * Cancel any pending I/O.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1845 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1846 mutex_enter(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1847 atgep->atge_chip_state &= ~ATGE_CHIP_RUNNING;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1848 if (!(atgep->atge_chip_state & ATGE_CHIP_SUSPENDED))
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1849 atge_device_stop(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1850 mutex_exit(&atgep->atge_intr_lock);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1851 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1852
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1853 int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1854 atge_m_stat(void *arg, uint_t stat, uint64_t *val)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1855 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1856 atge_t *atgep = arg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1857
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1858 if (mii_m_getstat(atgep->atge_mii, stat, val) == 0) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1859 return (0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1860 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1861
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1862 switch (stat) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1863 case MAC_STAT_MULTIRCV:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1864 *val = atgep->atge_multircv;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1865 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1866
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1867 case MAC_STAT_BRDCSTRCV:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1868 *val = atgep->atge_brdcstrcv;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1869 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1870
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1871 case MAC_STAT_MULTIXMT:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1872 *val = atgep->atge_multixmt;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1873 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1874
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1875 case MAC_STAT_BRDCSTXMT:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1876 *val = atgep->atge_brdcstxmt;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1877 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1878
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1879 case MAC_STAT_IPACKETS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1880 *val = atgep->atge_ipackets;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1881 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1882
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1883 case MAC_STAT_RBYTES:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1884 *val = atgep->atge_rbytes;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1885 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1886
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1887 case MAC_STAT_OPACKETS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1888 *val = atgep->atge_opackets;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1889 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1890
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1891 case MAC_STAT_OBYTES:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1892 *val = atgep->atge_obytes;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1893 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1894
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1895 case MAC_STAT_NORCVBUF:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1896 *val = atgep->atge_norcvbuf;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1897 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1898
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1899 case MAC_STAT_NOXMTBUF:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1900 *val = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1901 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1902
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1903 case MAC_STAT_COLLISIONS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1904 *val = atgep->atge_collisions;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1905 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1906
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1907 case MAC_STAT_IERRORS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1908 *val = atgep->atge_errrcv;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1909 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1910
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1911 case MAC_STAT_OERRORS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1912 *val = atgep->atge_errxmt;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1913 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1914
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1915 case ETHER_STAT_ALIGN_ERRORS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1916 *val = atgep->atge_align_errors;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1917 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1918
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1919 case ETHER_STAT_FCS_ERRORS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1920 *val = atgep->atge_fcs_errors;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1921 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1922
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1923 case ETHER_STAT_SQE_ERRORS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1924 *val = atgep->atge_sqe_errors;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1925 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1926
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1927 case ETHER_STAT_DEFER_XMTS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1928 *val = atgep->atge_defer_xmts;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1929 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1930
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1931 case ETHER_STAT_FIRST_COLLISIONS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1932 *val = atgep->atge_first_collisions;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1933 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1934
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1935 case ETHER_STAT_MULTI_COLLISIONS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1936 *val = atgep->atge_multi_collisions;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1937 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1938
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1939 case ETHER_STAT_TX_LATE_COLLISIONS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1940 *val = atgep->atge_tx_late_collisions;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1941 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1942
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1943 case ETHER_STAT_EX_COLLISIONS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1944 *val = atgep->atge_ex_collisions;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1945 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1946
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1947 case ETHER_STAT_MACXMT_ERRORS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1948 *val = atgep->atge_macxmt_errors;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1949 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1950
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1951 case ETHER_STAT_CARRIER_ERRORS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1952 *val = atgep->atge_carrier_errors;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1953 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1954
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1955 case ETHER_STAT_TOOLONG_ERRORS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1956 *val = atgep->atge_toolong_errors;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1957 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1958
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1959 case ETHER_STAT_MACRCV_ERRORS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1960 *val = atgep->atge_macrcv_errors;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1961 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1962
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1963 case MAC_STAT_OVERFLOWS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1964 *val = atgep->atge_overflow;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1965 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1966
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1967 case MAC_STAT_UNDERFLOWS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1968 *val = atgep->atge_underflow;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1969 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1970
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1971 case ETHER_STAT_TOOSHORT_ERRORS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1972 *val = atgep->atge_runt;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1973 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1974
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1975 case ETHER_STAT_JABBER_ERRORS:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1976 *val = atgep->atge_jabber;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1977 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1978
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1979 default:
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1980 return (ENOTSUP);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1981 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1982
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1983 return (0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1984 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1985
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1986 int
11878
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
1987 atge_m_getprop(void *arg, const char *name, mac_prop_id_t num, uint_t sz,
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
1988 void *val)
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1989 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1990 atge_t *atgep = arg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1991
11878
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
1992 return (mii_m_getprop(atgep->atge_mii, name, num, sz, val));
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1993 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1994
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1995 int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1996 atge_m_setprop(void *arg, const char *name, mac_prop_id_t num, uint_t sz,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1997 const void *val)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1998 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1999 atge_t *atgep = arg;
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2000 int r;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2001
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2002 r = mii_m_setprop(atgep->atge_mii, name, num, sz, val);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2003
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2004 if (r == 0) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2005 mutex_enter(&atgep->atge_intr_lock);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2006 mutex_enter(&atgep->atge_tx_lock);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2007
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2008 if (atgep->atge_chip_state & ATGE_CHIP_RUNNING) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2009 atge_device_restart(atgep);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2010 }
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2011
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2012 mutex_exit(&atgep->atge_tx_lock);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2013 mutex_exit(&atgep->atge_intr_lock);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2014 }
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2015
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2016 return (r);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2017 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2018
11878
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
2019 static void
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
2020 atge_m_propinfo(void *arg, const char *name, mac_prop_id_t num,
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
2021 mac_prop_info_handle_t prh)
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
2022 {
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
2023 atge_t *atgep = arg;
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
2024
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
2025 mii_m_propinfo(atgep->atge_mii, name, num, prh);
ac93462db6d7 PSARC/2009/364 dlstat and flowstat
Venugopal Iyer <Venu.Iyer@Sun.COM>
parents: 11353
diff changeset
2026 }
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2027
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2028 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2029 atge_program_ether(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2030 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2031 ether_addr_t e;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2032
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2033 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2034 * Reprogram the Station address.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2035 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2036 bcopy(atgep->atge_ether_addr, e, ETHERADDRL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2037 OUTL(atgep, ATGE_PAR0,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2038 ((e[2] << 24) | (e[3] << 16) | (e[4] << 8) | e[5]));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2039 OUTL(atgep, ATGE_PAR1, (e[0] << 8) | e[1]);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2040 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2041
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2042 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2043 * Device specific operations.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2044 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2045 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2046 atge_device_start(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2047 {
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2048 uint32_t rxf_hi, rxf_lo, rrd_hi, rrd_lo;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2049 uint32_t reg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2050 uint32_t fsize;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2051
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2052 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2053 * Reprogram the Station address.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2054 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2055 atge_program_ether(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2056
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2057 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2058 case ATGE_CHIP_L1E:
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2059 atge_l1e_program_dma(atgep);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2060 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2061 case ATGE_CHIP_L1:
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2062 atge_l1_program_dma(atgep);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2063 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2064 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2065 atge_l1c_program_dma(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2066 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2067 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2068
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2069 ATGE_DB(("%s: %s() dma, counters programmed ", atgep->atge_name,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2070 __func__));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2071
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2072 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2073 case ATGE_CHIP_L1E:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2074 case ATGE_CHIP_L1:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2075 OUTW(atgep, ATGE_INTR_CLR_TIMER, 1*1000/2);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2076 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2077 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2078 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2079 * Disable interrupt re-trigger timer. We don't want automatic
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2080 * re-triggering of un-ACKed interrupts.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2081 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2082 OUTL(atgep, ATGE_INTR_RETRIG_TIMER, ATGE_USECS(0));
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2083 /* Configure CMB. */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2084 OUTL(atgep, ATGE_CMB_TX_TIMER, ATGE_USECS(0));
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2085 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2086 * Hardware can be configured to issue SMB interrupt based
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2087 * on programmed interval. Since there is a callout that is
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2088 * invoked for every hz in driver we use that instead of
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2089 * relying on periodic SMB interrupt.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2090 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2091 OUTL(atgep, ATGE_SMB_STAT_TIMER, ATGE_USECS(0));
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2092 /* Clear MAC statistics. */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2093 atge_l1c_clear_stats(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2094 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2095 }
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2096
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2097 /*
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2098 * Set Maximum frame size but don't let MTU be less than ETHER_MTU.
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2099 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2100 if (atgep->atge_mtu < ETHERMTU)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2101 atgep->atge_max_frame_size = ETHERMTU;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2102 else
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2103 atgep->atge_max_frame_size = atgep->atge_mtu;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2104
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2105 atgep->atge_max_frame_size += sizeof (struct ether_header) +
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2106 VLAN_TAGSZ + ETHERFCSL;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2107 OUTL(atgep, ATGE_FRAME_SIZE, atgep->atge_max_frame_size);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2108
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2109 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2110 case ATGE_CHIP_L1E:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2111 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2112 case ATGE_CHIP_L1:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2113 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2114 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2115 /* Disable header split(?) */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2116 OUTL(atgep, ATGE_HDS_CFG, 0);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2117 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2118 }
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2119
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2120 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2121 * Configure IPG/IFG parameters.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2122 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2123 OUTL(atgep, ATGE_IPG_IFG_CFG,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2124 ((IPG_IFG_IPG2_DEFAULT << IPG_IFG_IPG2_SHIFT) & IPG_IFG_IPG2_MASK) |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2125 ((IPG_IFG_IPG1_DEFAULT << IPG_IFG_IPG1_SHIFT) & IPG_IFG_IPG1_MASK) |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2126 ((IPG_IFG_MIFG_DEFAULT << IPG_IFG_MIFG_SHIFT) & IPG_IFG_MIFG_MASK) |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2127 ((IPG_IFG_IPGT_DEFAULT << IPG_IFG_IPGT_SHIFT) & IPG_IFG_IPGT_MASK));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2128
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2129 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2130 * Set parameters for half-duplex media.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2131 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2132 OUTL(atgep, ATGE_HDPX_CFG,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2133 ((HDPX_CFG_LCOL_DEFAULT << HDPX_CFG_LCOL_SHIFT) &
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2134 HDPX_CFG_LCOL_MASK) |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2135 ((HDPX_CFG_RETRY_DEFAULT << HDPX_CFG_RETRY_SHIFT) &
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2136 HDPX_CFG_RETRY_MASK) | HDPX_CFG_EXC_DEF_EN |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2137 ((HDPX_CFG_ABEBT_DEFAULT << HDPX_CFG_ABEBT_SHIFT) &
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2138 HDPX_CFG_ABEBT_MASK) |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2139 ((HDPX_CFG_JAMIPG_DEFAULT << HDPX_CFG_JAMIPG_SHIFT) &
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2140 HDPX_CFG_JAMIPG_MASK));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2141
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2142 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2143 * Configure jumbo frame.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2144 */
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2145 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2146 case ATGE_CHIP_L1E:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2147 if (atgep->atge_flags & ATGE_FLAG_JUMBO) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2148
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2149 if (atgep->atge_mtu < ETHERMTU)
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2150 reg = atgep->atge_max_frame_size;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2151 else if (atgep->atge_mtu < 6 * 1024)
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2152 reg = (atgep->atge_max_frame_size * 2) / 3;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2153 else
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2154 reg = atgep->atge_max_frame_size / 2;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2155
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2156 OUTL(atgep, L1E_TX_JUMBO_THRESH,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2157 ROUNDUP(reg, TX_JUMBO_THRESH_UNIT) >>
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2158 TX_JUMBO_THRESH_UNIT_SHIFT);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2159 }
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2160 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2161 case ATGE_CHIP_L1:
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2162 fsize = ROUNDUP(atgep->atge_max_frame_size, sizeof (uint64_t));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2163 OUTL(atgep, ATGE_RXQ_JUMBO_CFG,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2164 (((fsize / sizeof (uint64_t)) <<
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2165 RXQ_JUMBO_CFG_SZ_THRESH_SHIFT) &
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2166 RXQ_JUMBO_CFG_SZ_THRESH_MASK) |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2167 ((RXQ_JUMBO_CFG_LKAH_DEFAULT <<
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2168 RXQ_JUMBO_CFG_LKAH_SHIFT) & RXQ_JUMBO_CFG_LKAH_MASK) |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2169 ((ATGE_USECS(8) << RXQ_JUMBO_CFG_RRD_TIMER_SHIFT) &
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2170 RXQ_JUMBO_CFG_RRD_TIMER_MASK));
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2171 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2172 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2173 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2174 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2175
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2176 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2177 * Configure flow-control parameters.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2178 */
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2179 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2180 case ATGE_CHIP_L1E:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2181 case ATGE_CHIP_L1:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2182 if ((atgep->atge_flags & ATGE_FLAG_PCIE) != 0) {
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2183 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2184 * Some hardware version require this magic.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2185 */
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2186 OUTL(atgep, ATGE_LTSSM_ID_CFG, 0x6500);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2187 reg = INL(atgep, 0x1008);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2188 OUTL(atgep, 0x1008, reg | 0x8000);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2189 }
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2190 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2191 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2192 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2193 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2194
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2195 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2196 * These are all magic parameters which came from FreeBSD.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2197 */
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2198 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2199 case ATGE_CHIP_L1E:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2200 reg = INL(atgep, L1E_SRAM_RX_FIFO_LEN);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2201 rxf_hi = (reg * 4) / 5;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2202 rxf_lo = reg/ 5;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2203
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2204 OUTL(atgep, ATGE_RXQ_FIFO_PAUSE_THRESH,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2205 ((rxf_lo << RXQ_FIFO_PAUSE_THRESH_LO_SHIFT) &
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2206 RXQ_FIFO_PAUSE_THRESH_LO_MASK) |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2207 ((rxf_hi << RXQ_FIFO_PAUSE_THRESH_HI_SHIFT) &
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2208 RXQ_FIFO_PAUSE_THRESH_HI_MASK));
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2209 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2210 case ATGE_CHIP_L1:
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2211 switch (atgep->atge_chip_rev) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2212 case 0x8001:
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2213 case 0x9001:
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2214 case 0x9002:
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2215 case 0x9003:
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2216 rxf_hi = L1_RX_RING_CNT / 16;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2217 rxf_lo = (L1_RX_RING_CNT * 7) / 8;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2218 rrd_hi = (L1_RR_RING_CNT * 7) / 8;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2219 rrd_lo = L1_RR_RING_CNT / 16;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2220 break;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2221 default:
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2222 reg = INL(atgep, L1_SRAM_RX_FIFO_LEN);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2223 rxf_lo = reg / 16;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2224 if (rxf_lo > 192)
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2225 rxf_lo = 192;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2226 rxf_hi = (reg * 7) / 8;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2227 if (rxf_hi < rxf_lo)
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2228 rxf_hi = rxf_lo + 16;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2229 reg = INL(atgep, L1_SRAM_RRD_LEN);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2230 rrd_lo = reg / 8;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2231 rrd_hi = (reg * 7) / 8;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2232 if (rrd_lo > 2)
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2233 rrd_lo = 2;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2234 if (rrd_hi < rrd_lo)
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2235 rrd_hi = rrd_lo + 3;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2236 break;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2237 }
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2238
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2239 OUTL(atgep, ATGE_RXQ_FIFO_PAUSE_THRESH,
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2240 ((rxf_lo << RXQ_FIFO_PAUSE_THRESH_LO_SHIFT) &
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2241 RXQ_FIFO_PAUSE_THRESH_LO_MASK) |
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2242 ((rxf_hi << RXQ_FIFO_PAUSE_THRESH_HI_SHIFT) &
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2243 RXQ_FIFO_PAUSE_THRESH_HI_MASK));
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2244
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2245 OUTL(atgep, L1_RXQ_RRD_PAUSE_THRESH,
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2246 ((rrd_lo << RXQ_RRD_PAUSE_THRESH_LO_SHIFT) &
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2247 RXQ_RRD_PAUSE_THRESH_LO_MASK) |
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2248 ((rrd_hi << RXQ_RRD_PAUSE_THRESH_HI_SHIFT) &
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2249 RXQ_RRD_PAUSE_THRESH_HI_MASK));
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2250 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2251 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2252 switch (ATGE_DID(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2253 case ATGE_CHIP_AR8151V2_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2254 case ATGE_CHIP_AR8152V1_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2255 OUTL(atgep, ATGE_SERDES_LOCK,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2256 INL(atgep, ATGE_SERDES_LOCK) |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2257 SERDES_MAC_CLK_SLOWDOWN |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2258 SERDES_PHY_CLK_SLOWDOWN);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2259 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2260 case ATGE_CHIP_L1CG_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2261 case ATGE_CHIP_L1CF_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2262 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2263 * Configure flow control parameters.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2264 * XON : 80% of Rx FIFO
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2265 * XOFF : 30% of Rx FIFO
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2266 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2267 reg = INL(atgep, L1C_SRAM_RX_FIFO_LEN);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2268 rxf_hi = (reg * 8) / 10;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2269 rxf_lo = (reg * 3) / 10;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2270
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2271 OUTL(atgep, ATGE_RXQ_FIFO_PAUSE_THRESH,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2272 ((rxf_lo << RXQ_FIFO_PAUSE_THRESH_LO_SHIFT) &
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2273 RXQ_FIFO_PAUSE_THRESH_LO_MASK) |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2274 ((rxf_hi << RXQ_FIFO_PAUSE_THRESH_HI_SHIFT) &
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2275 RXQ_FIFO_PAUSE_THRESH_HI_MASK));
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2276 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2277 }
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2278 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2279 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2280
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2281 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2282 case ATGE_CHIP_L1E:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2283 /* Configure RxQ. */
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2284 reg = RXQ_CFG_ALIGN_32 | RXQ_CFG_CUT_THROUGH_ENB |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2285 RXQ_CFG_IPV6_CSUM_VERIFY | RXQ_CFG_ENB;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2286 OUTL(atgep, ATGE_RXQ_CFG, reg);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2287 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2288 * Configure TxQ.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2289 */
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2290 reg = (128 <<
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2291 (atgep->atge_dma_rd_burst >> DMA_CFG_RD_BURST_SHIFT)) <<
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2292 TXQ_CFG_TX_FIFO_BURST_SHIFT;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2293
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2294 reg |= (TXQ_CFG_TPD_BURST_DEFAULT << TXQ_CFG_TPD_BURST_SHIFT) &
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2295 TXQ_CFG_TPD_BURST_MASK;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2296
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2297 reg |= TXQ_CFG_ENHANCED_MODE | TXQ_CFG_ENB;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2298
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2299 OUTL(atgep, ATGE_TXQ_CFG, reg);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2300 /* Disable RSS. */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2301 OUTL(atgep, L1E_RSS_IDT_TABLE0, 0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2302 OUTL(atgep, L1E_RSS_CPU, 0);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2303 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2304 * Configure DMA parameters.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2305 */
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2306 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2307 * Don't use Tx CMB. It is known to cause RRS update failure
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2308 * under certain circumstances. Typical phenomenon of the
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2309 * issue would be unexpected sequence number encountered in
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2310 * Rx handler. Hence we don't set DMA_CFG_TXCMB_ENB.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2311 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2312 OUTL(atgep, ATGE_DMA_CFG,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2313 DMA_CFG_OUT_ORDER | DMA_CFG_RD_REQ_PRI | DMA_CFG_RCB_64 |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2314 atgep->atge_dma_rd_burst | atgep->atge_dma_wr_burst |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2315 DMA_CFG_RXCMB_ENB |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2316 ((DMA_CFG_RD_DELAY_CNT_DEFAULT <<
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2317 DMA_CFG_RD_DELAY_CNT_SHIFT) & DMA_CFG_RD_DELAY_CNT_MASK) |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2318 ((DMA_CFG_WR_DELAY_CNT_DEFAULT <<
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2319 DMA_CFG_WR_DELAY_CNT_SHIFT) & DMA_CFG_WR_DELAY_CNT_MASK));
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2320 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2321 * Enable CMB/SMB timer.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2322 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2323 OUTL(atgep, L1E_SMB_STAT_TIMER, 100000);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2324 atge_l1e_clear_stats(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2325 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2326 case ATGE_CHIP_L1:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2327 /* Configure RxQ. */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2328 reg =
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2329 ((RXQ_CFG_RD_BURST_DEFAULT << RXQ_CFG_RD_BURST_SHIFT) &
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2330 RXQ_CFG_RD_BURST_MASK) |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2331 ((RXQ_CFG_RRD_BURST_THRESH_DEFAULT <<
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2332 RXQ_CFG_RRD_BURST_THRESH_SHIFT) &
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2333 RXQ_CFG_RRD_BURST_THRESH_MASK) |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2334 ((RXQ_CFG_RD_PREF_MIN_IPG_DEFAULT <<
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2335 RXQ_CFG_RD_PREF_MIN_IPG_SHIFT) &
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2336 RXQ_CFG_RD_PREF_MIN_IPG_MASK) |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2337 RXQ_CFG_CUT_THROUGH_ENB | RXQ_CFG_ENB;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2338 OUTL(atgep, ATGE_RXQ_CFG, reg);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2339 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2340 * Configure TxQ.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2341 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2342 reg =
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2343 (((TXQ_CFG_TPD_BURST_DEFAULT << TXQ_CFG_TPD_BURST_SHIFT) &
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2344 TXQ_CFG_TPD_BURST_MASK) |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2345 ((TXQ_CFG_TX_FIFO_BURST_DEFAULT <<
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2346 TXQ_CFG_TX_FIFO_BURST_SHIFT) &
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2347 TXQ_CFG_TX_FIFO_BURST_MASK) |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2348 ((TXQ_CFG_TPD_FETCH_DEFAULT <<
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2349 TXQ_CFG_TPD_FETCH_THRESH_SHIFT) &
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2350 TXQ_CFG_TPD_FETCH_THRESH_MASK) |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2351 TXQ_CFG_ENB);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2352 OUTL(atgep, ATGE_TXQ_CFG, reg);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2353 /* Jumbo frames */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2354 OUTL(atgep, L1_TX_JUMBO_TPD_TH_IPG,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2355 (((fsize / sizeof (uint64_t) << TX_JUMBO_TPD_TH_SHIFT)) &
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2356 TX_JUMBO_TPD_TH_MASK) |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2357 ((TX_JUMBO_TPD_IPG_DEFAULT << TX_JUMBO_TPD_IPG_SHIFT) &
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2358 TX_JUMBO_TPD_IPG_MASK));
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2359 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2360 * Configure DMA parameters.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2361 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2362 OUTL(atgep, ATGE_DMA_CFG,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2363 DMA_CFG_ENH_ORDER | DMA_CFG_RCB_64 |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2364 atgep->atge_dma_rd_burst | DMA_CFG_RD_ENB |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2365 atgep->atge_dma_wr_burst | DMA_CFG_WR_ENB);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2366
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2367 /* Configure CMB DMA write threshold. */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2368 OUTL(atgep, L1_CMB_WR_THRESH,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2369 ((CMB_WR_THRESH_RRD_DEFAULT << CMB_WR_THRESH_RRD_SHIFT) &
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2370 CMB_WR_THRESH_RRD_MASK) |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2371 ((CMB_WR_THRESH_TPD_DEFAULT << CMB_WR_THRESH_TPD_SHIFT) &
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2372 CMB_WR_THRESH_TPD_MASK));
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2373 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2374 * Enable CMB/SMB timer.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2375 */
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2376 /* Set CMB/SMB timer and enable them. */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2377 OUTL(atgep, L1_CMB_WR_TIMER,
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2378 ((ATGE_USECS(2) << CMB_WR_TIMER_TX_SHIFT) &
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2379 CMB_WR_TIMER_TX_MASK) |
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2380 ((ATGE_USECS(2) << CMB_WR_TIMER_RX_SHIFT) &
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2381 CMB_WR_TIMER_RX_MASK));
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2382
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2383 /* Request SMB updates for every seconds. */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2384 OUTL(atgep, L1_SMB_TIMER, ATGE_USECS(1000 * 1000));
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2385 OUTL(atgep, L1_CSMB_CTRL,
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2386 CSMB_CTRL_SMB_ENB | CSMB_CTRL_CMB_ENB);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2387 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2388 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2389 /* Configure RxQ. */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2390 reg =
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2391 RXQ_CFG_RD_BURST_DEFAULT << L1C_RXQ_CFG_RD_BURST_SHIFT |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2392 RXQ_CFG_IPV6_CSUM_VERIFY | RXQ_CFG_ENB;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2393 if ((atgep->atge_flags & ATGE_FLAG_ASPM_MON) != 0)
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2394 reg |= RXQ_CFG_ASPM_THROUGHPUT_LIMIT_1M;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2395 OUTL(atgep, ATGE_RXQ_CFG, reg);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2396 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2397 * Configure TxQ.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2398 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2399 reg = (128 <<
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2400 (atgep->atge_dma_rd_burst >> DMA_CFG_RD_BURST_SHIFT)) <<
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2401 TXQ_CFG_TX_FIFO_BURST_SHIFT;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2402
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2403 switch (ATGE_DID(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2404 case ATGE_CHIP_AR8152V2_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2405 case ATGE_CHIP_AR8152V1_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2406 reg >>= 1;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2407 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2408 }
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2409
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2410 reg |= (L1C_TXQ_CFG_TPD_BURST_DEFAULT <<
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2411 TXQ_CFG_TPD_BURST_SHIFT) & TXQ_CFG_TPD_BURST_MASK;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2412
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2413 reg |= TXQ_CFG_ENHANCED_MODE | TXQ_CFG_ENB;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2414
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2415 OUTL(atgep, L1C_TXQ_CFG, reg);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2416 /* Disable RSS until I understand L1C/L2C's RSS logic. */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2417 OUTL(atgep, L1C_RSS_IDT_TABLE0, 0xe4e4e4e4);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2418 OUTL(atgep, L1C_RSS_CPU, 0);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2419 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2420 * Configure DMA parameters.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2421 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2422 OUTL(atgep, ATGE_DMA_CFG,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2423 DMA_CFG_SMB_DIS |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2424 DMA_CFG_OUT_ORDER | DMA_CFG_RD_REQ_PRI | DMA_CFG_RCB_64 |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2425 DMA_CFG_RD_DELAY_CNT_DEFAULT << DMA_CFG_RD_DELAY_CNT_SHIFT |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2426 DMA_CFG_WR_DELAY_CNT_DEFAULT << DMA_CFG_WR_DELAY_CNT_SHIFT |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2427
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2428 atgep->atge_dma_rd_burst | DMA_CFG_RD_ENB |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2429 atgep->atge_dma_wr_burst | DMA_CFG_WR_ENB);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2430 /* Configure CMB DMA write threshold not required. */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2431 /* Set CMB/SMB timer and enable them not required. */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2432 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2433 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2434
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2435 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2436 * Disable all WOL bits as WOL can interfere normal Rx
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2437 * operation.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2438 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2439 OUTL(atgep, ATGE_WOL_CFG, 0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2440
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2441 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2442 * Configure Tx/Rx MACs.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2443 * - Auto-padding for short frames.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2444 * - Enable CRC generation.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2445 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2446 * Start with full-duplex/1000Mbps media. Actual reconfiguration
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2447 * of MAC is followed after link establishment.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2448 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2449 reg = (ATGE_CFG_TX_CRC_ENB | ATGE_CFG_TX_AUTO_PAD |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2450 ATGE_CFG_FULL_DUPLEX |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2451 ((ATGE_CFG_PREAMBLE_DEFAULT << ATGE_CFG_PREAMBLE_SHIFT) &
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2452 ATGE_CFG_PREAMBLE_MASK));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2453
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2454 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2455 * AR813x/AR815x always does checksum computation regardless
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2456 * of MAC_CFG_RXCSUM_ENB bit. Also the controller is known to
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2457 * have bug in protocol field in Rx return structure so
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2458 * these controllers can't handle fragmented frames. Disable
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2459 * Rx checksum offloading until there is a newer controller
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2460 * that has sane implementation.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2461 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2462 switch (ATGE_DID(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2463 case ATGE_CHIP_AR8151V2_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2464 case ATGE_CHIP_AR8151V1_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2465 case ATGE_CHIP_AR8152V2_DEV_ID:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2466 reg |= ATGE_CFG_HASH_ALG_CRC32 | ATGE_CFG_SPEED_MODE_SW;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2467 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2468 }
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2469
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2470 if ((atgep->atge_flags & ATGE_FLAG_FASTETHER) != 0) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2471 reg |= ATGE_CFG_SPEED_10_100;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2472 ATGE_DB(("%s: %s() Fast Ethernet", atgep->atge_name, __func__));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2473 } else {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2474 reg |= ATGE_CFG_SPEED_1000;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2475 ATGE_DB(("%s: %s() 1G speed", atgep->atge_name, __func__));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2476 }
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2477 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2478 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2479 reg |= L1C_CFG_SINGLE_PAUSE_ENB;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2480 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2481 }
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2482
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2483 OUTL(atgep, ATGE_MAC_CFG, reg);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2484
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2485 atgep->atge_chip_state |= ATGE_CHIP_RUNNING;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2486
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2487 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2488 * Set up the receive filter.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2489 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2490 atge_rxfilter(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2491
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2492 /*
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2493 * Acknowledge all pending interrupts and clear it.
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2494 */
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2495 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2496 case ATGE_CHIP_L1E:
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2497 OUTL(atgep, ATGE_INTR_MASK, L1E_INTRS);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2498 OUTL(atgep, ATGE_INTR_STATUS, 0xFFFFFFFF);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2499 OUTL(atgep, ATGE_INTR_STATUS, 0);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2500 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2501 case ATGE_CHIP_L1:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2502 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2503 OUTL(atgep, ATGE_INTR_STATUS, 0);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2504 OUTL(atgep, ATGE_INTR_MASK, atgep->atge_intrs);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2505 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2506 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2507
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2508 atge_mac_config(atgep);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2509
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2510 ATGE_DB(("%s: %s() device started", atgep->atge_name, __func__));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2511 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2512
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2513 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2514 * Generic functions.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2515 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2516
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2517 #define CRC32_POLY_BE 0x04c11db7
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2518 uint32_t
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2519 atge_ether_crc(const uint8_t *addr, int len)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2520 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2521 int idx;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2522 int bit;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2523 uint_t data;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2524 uint32_t crc;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2525
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2526 crc = 0xffffffff;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2527 for (idx = 0; idx < len; idx++) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2528 for (data = *addr++, bit = 0; bit < 8; bit++, data >>= 1) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2529 crc = (crc << 1)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2530 ^ ((((crc >> 31) ^ data) & 1) ? CRC32_POLY_BE : 0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2531 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2532 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2533
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2534 return (crc);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2535 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2536
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2537
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2538 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2539 * Programs RX filter. We use a link-list to keep track of all multicast
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2540 * addressess.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2541 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2542 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2543 atge_rxfilter(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2544 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2545 uint32_t rxcfg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2546 uint64_t mchash;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2547
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2548 rxcfg = INL(atgep, ATGE_MAC_CFG);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2549 rxcfg &= ~(ATGE_CFG_ALLMULTI | ATGE_CFG_PROMISC);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2550
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2551 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2552 * Accept broadcast frames.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2553 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2554 rxcfg |= ATGE_CFG_BCAST;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2555
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2556 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2557 * We don't use Hardware VLAN tagging.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2558 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2559 rxcfg &= ~ATGE_CFG_VLAN_TAG_STRIP;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2560
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2561 if (atgep->atge_filter_flags & (ATGE_PROMISC | ATGE_ALL_MULTICST)) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2562 mchash = ~0ULL;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2563
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2564 if (atgep->atge_filter_flags & ATGE_PROMISC)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2565 rxcfg |= ATGE_CFG_PROMISC;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2566
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2567 if (atgep->atge_filter_flags & ATGE_ALL_MULTICST)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2568 rxcfg |= ATGE_CFG_ALLMULTI;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2569 } else {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2570 mchash = atgep->atge_mchash;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2571 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2572
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2573 atge_program_ether(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2574
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2575 OUTL(atgep, ATGE_MAR0, (uint32_t)mchash);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2576 OUTL(atgep, ATGE_MAR1, (uint32_t)(mchash >> 32));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2577 OUTL(atgep, ATGE_MAC_CFG, rxcfg);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2578
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2579 ATGE_DB(("%s: %s() mac_cfg is : %x, mchash : %llx",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2580 atgep->atge_name, __func__, rxcfg, mchash));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2581 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2582
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2583 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2584 atge_device_stop(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2585 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2586 uint32_t reg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2587 int t;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2588
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2589 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2590 * If the chip is being suspended, then don't touch the state. Caller
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2591 * will take care of setting the correct state.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2592 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2593 if (!(atgep->atge_chip_state & ATGE_CHIP_SUSPENDED)) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2594 atgep->atge_chip_state |= ATGE_CHIP_STOPPED;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2595 atgep->atge_chip_state &= ~ATGE_CHIP_RUNNING;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2596 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2597
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2598 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2599 * Collect stats for L1E. L1 chip's stats are collected by interrupt.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2600 */
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2601 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2602 case ATGE_CHIP_L1E:
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2603 atge_l1e_gather_stats(atgep);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2604 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2605 case ATGE_CHIP_L1:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2606 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2607 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2608 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2609
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2610 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2611 * Disable interrupts.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2612 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2613 atge_disable_intrs(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2614
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2615 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2616 case ATGE_CHIP_L1E:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2617 /* Clear CTRL not required. */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2618 /* Stop DMA Engine not required. */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2619 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2620 * Disable queue processing.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2621 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2622 /* Stop TxQ */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2623 reg = INL(atgep, ATGE_TXQ_CFG);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2624 reg = reg & ~TXQ_CFG_ENB;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2625 OUTL(atgep, ATGE_TXQ_CFG, reg);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2626 /* Stop RxQ */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2627 reg = INL(atgep, ATGE_RXQ_CFG);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2628 reg = reg & ~RXQ_CFG_ENB;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2629 OUTL(atgep, ATGE_RXQ_CFG, reg);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2630 /* Stop DMA */
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2631 reg = INL(atgep, ATGE_DMA_CFG);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2632 reg = reg & ~(DMA_CFG_TXCMB_ENB | DMA_CFG_RXCMB_ENB);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2633 OUTL(atgep, ATGE_DMA_CFG, reg);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2634 drv_usecwait(1000);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2635 atge_l1e_stop_mac(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2636 OUTL(atgep, ATGE_INTR_STATUS, 0xFFFFFFFF);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2637 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2638 case ATGE_CHIP_L1:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2639 /* Clear CTRL. */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2640 OUTL(atgep, L1_CSMB_CTRL, 0);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2641 /* Stop DMA Engine */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2642 atge_l1_stop_tx_mac(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2643 atge_l1_stop_rx_mac(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2644 reg = INL(atgep, ATGE_DMA_CFG);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2645 reg &= ~(DMA_CFG_RD_ENB | DMA_CFG_WR_ENB);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2646 OUTL(atgep, ATGE_DMA_CFG, reg);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2647 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2648 * Disable queue processing.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2649 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2650 /* Stop TxQ */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2651 reg = INL(atgep, ATGE_TXQ_CFG);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2652 reg = reg & ~TXQ_CFG_ENB;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2653 OUTL(atgep, ATGE_TXQ_CFG, reg);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2654 /* Stop RxQ */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2655 reg = INL(atgep, ATGE_RXQ_CFG);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2656 reg = reg & ~RXQ_CFG_ENB;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2657 OUTL(atgep, ATGE_RXQ_CFG, reg);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2658 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2659 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2660 /* Clear CTRL not required. */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2661 /* Stop DMA Engine */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2662 atge_l1c_stop_tx_mac(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2663 atge_l1c_stop_rx_mac(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2664 reg = INL(atgep, ATGE_DMA_CFG);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2665 reg &= ~(DMA_CFG_RD_ENB | DMA_CFG_WR_ENB);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2666 OUTL(atgep, ATGE_DMA_CFG, reg);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2667 /*
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2668 * Disable queue processing.
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2669 */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2670 /* Stop TxQ */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2671 reg = INL(atgep, L1C_TXQ_CFG);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2672 reg = reg & ~TXQ_CFG_ENB;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2673 OUTL(atgep, L1C_TXQ_CFG, reg);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2674 /* Stop RxQ */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2675 reg = INL(atgep, ATGE_RXQ_CFG);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2676 reg = reg & ~RXQ_CFG_ENB;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2677 OUTL(atgep, ATGE_RXQ_CFG, reg);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2678 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2679 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2680
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2681 for (t = ATGE_RESET_TIMEOUT; t > 0; t--) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2682 if ((reg = INL(atgep, ATGE_IDLE_STATUS)) == 0)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2683 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2684 drv_usecwait(10);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2685 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2686
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2687 if (t == 0) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2688 atge_error(atgep->atge_dip, "%s() stopping TX/RX MAC timeout",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2689 __func__);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2690 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2691 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2692
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2693 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2694 atge_disable_intrs(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2695 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2696 OUTL(atgep, ATGE_INTR_MASK, 0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2697 OUTL(atgep, ATGE_INTR_STATUS, 0xFFFFFFFF);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2698 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2699
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2700 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2701 atge_device_init(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2702 {
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2703 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2704 case ATGE_CHIP_L1E:
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2705 atgep->atge_intrs = L1E_INTRS;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2706 atgep->atge_int_mod = ATGE_IM_TIMER_DEFAULT;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2707
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2708 atge_l1e_init_tx_ring(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2709 atge_l1e_init_rx_pages(atgep);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2710 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2711 case ATGE_CHIP_L1:
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2712 atgep->atge_intrs = L1_INTRS | INTR_GPHY | INTR_PHY_LINK_DOWN |
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2713 INTR_LINK_CHG;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2714 atgep->atge_int_mod = ATGE_IM_TIMER_DEFAULT;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2715
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2716 atge_l1_init_tx_ring(atgep);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2717 atge_l1_init_rx_ring(atgep);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2718 atge_l1_init_rr_ring(atgep);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2719 atge_l1_init_cmb(atgep);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2720 atge_l1_init_smb(atgep);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2721 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2722 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2723 atgep->atge_intrs = L1C_INTRS | L1C_INTR_GPHY |
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2724 L1C_INTR_PHY_LINK_DOWN;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2725 atgep->atge_int_rx_mod = 400/2;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2726 atgep->atge_int_tx_mod = 2000/1;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2727
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2728 atge_l1c_init_tx_ring(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2729 atge_l1c_init_rx_ring(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2730 atge_l1c_init_rr_ring(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2731 atge_l1c_init_cmb(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2732 atge_l1c_init_smb(atgep);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2733
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2734 /* Enable all clocks. */
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2735 OUTL(atgep, ATGE_CLK_GATING_CFG, 0);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2736 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2737 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2738 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2739
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2740 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2741 atge_device_restart(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2742 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2743 ASSERT(MUTEX_HELD(&atgep->atge_intr_lock));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2744 ASSERT(MUTEX_HELD(&atgep->atge_tx_lock));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2745
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2746 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2747 * Cancel any pending I/O.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2748 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2749 atge_device_stop(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2750
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2751 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2752 * Reset the chip to a known state.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2753 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2754 atge_device_reset(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2755
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2756 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2757 * Initialize the ring and other descriptor like CMB/SMB/Rx return.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2758 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2759 atge_device_init(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2760
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2761 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2762 * Start the chip.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2763 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2764 atge_device_start(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2765
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2766 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2767
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2768 static int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2769 atge_send_a_packet(atge_t *atgep, mblk_t *mp)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2770 {
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2771 uchar_t *c;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2772 uint32_t cflags = 0;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2773 atge_ring_t *r;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2774 size_t pktlen;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2775 uchar_t *buf;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2776 int start;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2777
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2778 ASSERT(MUTEX_HELD(&atgep->atge_tx_lock));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2779 ASSERT(mp != NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2780
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2781 pktlen = msgsize(mp);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2782 if (pktlen > atgep->atge_tx_buf_len) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2783 atgep->atge_macxmt_errors++;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2784
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2785 ATGE_DB(("%s: %s() pktlen (%d) > rx_buf_len (%d)",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2786 atgep->atge_name, __func__,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2787 pktlen, atgep->atge_rx_buf_len));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2788
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2789 freemsg(mp);
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2790 return (DDI_SUCCESS);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2791 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2792
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2793 r = atgep->atge_tx_ring;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2794
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2795 if (r->r_avail_desc <= 1) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2796 atgep->atge_noxmtbuf++;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2797 atgep->atge_tx_resched = 1;
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2798
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2799 ATGE_DB(("%s: %s() No transmit buf",
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2800 atgep->atge_name, __func__));
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2801
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2802 return (DDI_FAILURE);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2803 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2804
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2805 start = r->r_producer;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2806
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2807 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2808 * Get the DMA buffer to hold a packet.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2809 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2810 buf = (uchar_t *)r->r_buf_tbl[start]->addr;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2811
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2812 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2813 * Copy the msg and free mp
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2814 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2815 mcopymsg(mp, buf);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2816
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2817 r->r_avail_desc--;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2818
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2819 c = (uchar_t *)r->r_desc_ring->addr;
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2820 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2821 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2822 {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2823 l1c_tx_desc_t *txd;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2824
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2825 c += (sizeof (l1c_tx_desc_t) * start);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2826 txd = (l1c_tx_desc_t *)c;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2827
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2828 ATGE_PUT64(r->r_desc_ring, &txd->addr,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2829 r->r_buf_tbl[start]->cookie.dmac_laddress);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2830
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2831 ATGE_PUT32(r->r_desc_ring, &txd->len, L1C_TX_BYTES(pktlen));
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2832
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2833 cflags |= L1C_TD_EOP;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2834 ATGE_PUT32(r->r_desc_ring, &txd->flags, cflags);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2835 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2836 }
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2837 default:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2838 {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2839 atge_tx_desc_t *txd;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2840
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2841 c += (sizeof (atge_tx_desc_t) * start);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2842 txd = (atge_tx_desc_t *)c;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2843
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2844 ATGE_PUT64(r->r_desc_ring, &txd->addr,
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2845 r->r_buf_tbl[start]->cookie.dmac_laddress);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2846
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2847 ATGE_PUT32(r->r_desc_ring, &txd->len, ATGE_TX_BYTES(pktlen));
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2848
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2849 cflags |= ATGE_TD_EOP;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2850 ATGE_PUT32(r->r_desc_ring, &txd->flags, cflags);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2851 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2852 }
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2853 }
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2854 /*
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2855 * Sync buffer first.
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2856 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2857 DMA_SYNC(r->r_buf_tbl[start], 0, pktlen, DDI_DMA_SYNC_FORDEV);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2858
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2859 /*
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2860 * Increment TX producer count by one.
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2861 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2862 ATGE_INC_SLOT(r->r_producer, ATGE_TX_RING_CNT);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2863
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2864 /*
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2865 * Sync descriptor table.
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2866 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2867 DMA_SYNC(r->r_desc_ring, 0, ATGE_TX_RING_SZ, DDI_DMA_SYNC_FORDEV);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2868
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2869 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2870 * Program TX descriptor to send a packet.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2871 */
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2872 switch (ATGE_MODEL(atgep)) {
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2873 case ATGE_CHIP_L1E:
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2874 atge_l1e_send_packet(r);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2875 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2876 case ATGE_CHIP_L1:
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2877 atge_l1_send_packet(r);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2878 break;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2879 case ATGE_CHIP_L1C:
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2880 atge_l1c_send_packet(r);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 12398
diff changeset
2881 break;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2882 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2883
11353
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2884 r->r_atge->atge_opackets++;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2885 r->r_atge->atge_obytes += pktlen;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2886
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2887 ATGE_DB(("%s: %s() pktlen : %d, avail_desc : %d, producer :%d, "
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2888 "consumer : %d", atgep->atge_name, __func__, pktlen,
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2889 r->r_avail_desc, r->r_producer, r->r_consumer));
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2890
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
2891 return (DDI_SUCCESS);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2892 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2893
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2894 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2895 * Stream Information.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2896 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2897 DDI_DEFINE_STREAM_OPS(atge_devops, nulldev, nulldev, atge_attach, atge_detach,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2898 nodev, NULL, D_MP, NULL, atge_quiesce);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2899
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2900 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2901 * Module linkage information.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2902 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2903 static struct modldrv atge_modldrv = {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2904 &mod_driverops, /* Type of Module */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2905 "Atheros/Attansic Gb Ethernet", /* Description */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2906 &atge_devops /* drv_dev_ops */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2907 };
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2908
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2909 static struct modlinkage atge_modlinkage = {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2910 MODREV_1, /* ml_rev */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2911 (void *)&atge_modldrv,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2912 NULL
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2913 };
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2914
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2915 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2916 * DDI Entry points.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2917 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2918 int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2919 _init(void)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2920 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2921 int r;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2922 mac_init_ops(&atge_devops, "atge");
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2923 if ((r = mod_install(&atge_modlinkage)) != DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2924 mac_fini_ops(&atge_devops);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2925 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2926
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2927 return (r);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2928 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2929
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2930 int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2931 _fini(void)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2932 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2933 int r;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2934
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2935 if ((r = mod_remove(&atge_modlinkage)) == DDI_SUCCESS) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2936 mac_fini_ops(&atge_devops);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2937 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2938
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2939 return (r);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2940 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2941
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2942 int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2943 _info(struct modinfo *modinfop)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2944 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2945 return (mod_info(&atge_modlinkage, modinfop));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2946 }