Mercurial > illumos > illumos-gate
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 |
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 } |