annotate usr/src/uts/common/io/atge/atge_l1e.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 db56a54bf91c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
1 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
2 * CDDL HEADER START
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
3 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
4 * The contents of this file are subject to the terms of the
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
5 * Common Development and Distribution License (the "License").
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
6 * You may not use this file except in compliance with the License.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
7 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
9 * or http://www.opensolaris.org/os/licensing.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
10 * See the License for the specific language governing permissions
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
11 * and limitations under the License.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
12 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
13 * When distributing Covered Code, include this CDDL HEADER in each
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
15 * If applicable, add the following below this CDDL HEADER, with the
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
16 * fields enclosed by brackets "[]" replaced with your own identifying
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
17 * information: Portions Copyright [yyyy] [name of copyright owner]
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
18 *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
19 * CDDL HEADER END
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
20 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
21
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
22 /*
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 11353
diff changeset
23 * Copyright (c) 2012 Gary Mills
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 11353
diff changeset
24 *
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
25 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
26 * Use is subject to license terms.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
27 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
28
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
29 #include <sys/types.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
30 #include <sys/stream.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
31 #include <sys/strsun.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
32 #include <sys/stat.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
33 #include <sys/modctl.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
34 #include <sys/ethernet.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
35 #include <sys/debug.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
36 #include <sys/conf.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
37 #include <sys/mii.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
38 #include <sys/miiregs.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
39 #include <sys/sysmacros.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
40 #include <sys/dditypes.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
41 #include <sys/ddi.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
42 #include <sys/sunddi.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
43 #include <sys/byteorder.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
44 #include <sys/note.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
45 #include <sys/vlan.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
46 #include <sys/stream.h>
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
47
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
48 #include "atge.h"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
49 #include "atge_l1e_reg.h"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
50 #include "atge_cmn_reg.h"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
51
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
52 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
53 * L1E specfic functions.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
54 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
55 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
56 void atge_l1e_stop_rx_mac(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
57 void atge_l1e_stop_tx_mac(atge_t *);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
58
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
59 static ddi_dma_attr_t atge_l1e_dma_attr_tx_desc = {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
60 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
61 0, /* dma_attr_addr_lo */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
62 0x0000ffffffffull, /* dma_attr_addr_hi */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
63 0x0000ffffffffull, /* dma_attr_count_max */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
64 L1E_TX_RING_ALIGN, /* dma_attr_align */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
65 0x0000fffc, /* dma_attr_burstsizes */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
66 1, /* dma_attr_minxfer */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
67 0x0000ffffffffull, /* dma_attr_maxxfer */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
68 0x0000ffffffffull, /* dma_attr_seg */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
69 1, /* dma_attr_sgllen */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
70 1, /* dma_attr_granular */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
71 0 /* dma_attr_flags */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
72 };
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
73
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
74 static ddi_dma_attr_t atge_l1e_dma_attr_rx_desc = {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
75 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
76 0, /* dma_attr_addr_lo */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
77 0x0000ffffffffull, /* dma_attr_addr_hi */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
78 0x0000ffffffffull, /* dma_attr_count_max */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
79 L1E_RX_PAGE_ALIGN, /* dma_attr_align */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
80 0x0000fffc, /* dma_attr_burstsizes */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
81 1, /* dma_attr_minxfer */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
82 0x0000ffffffffull, /* dma_attr_maxxfer */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
83 0x0000ffffffffull, /* dma_attr_seg */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
84 1, /* dma_attr_sgllen */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
85 1, /* dma_attr_granular */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
86 0 /* dma_attr_flags */
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 static ddi_dma_attr_t atge_l1e_dma_attr_cmb = {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
90 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
91 0, /* dma_attr_addr_lo */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
92 0x0000ffffffffull, /* dma_attr_addr_hi */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
93 0x0000ffffffffull, /* dma_attr_count_max */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
94 L1E_CMB_ALIGN, /* dma_attr_align */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
95 0x0000fffc, /* dma_attr_burstsizes */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
96 1, /* dma_attr_minxfer */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
97 0x0000ffffffffull, /* dma_attr_maxxfer */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
98 0x0000ffffffffull, /* dma_attr_seg */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
99 1, /* dma_attr_sgllen */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
100 1, /* dma_attr_granular */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
101 0 /* dma_attr_flags */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
102 };
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
103
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
104 void atge_l1e_rx_next_pkt(atge_t *, uint32_t);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
105
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
106 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
107 atge_rx_desc_free(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
108 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
109 atge_l1e_data_t *l1e;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
110 atge_dma_t *dma;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
111 int pages;
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 l1e = (atge_l1e_data_t *)atgep->atge_private_data;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
114 if (l1e == NULL)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
115 return;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
116
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
117 if (l1e->atge_l1e_rx_page == NULL)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
118 return;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
119
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
120 for (pages = 0; pages < L1E_RX_PAGES; pages++) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
121 dma = l1e->atge_l1e_rx_page[pages];
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
122 if (dma != NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
123 (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
124 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
125 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
126 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
127 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
128 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
129
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
130 kmem_free(l1e->atge_l1e_rx_page, L1E_RX_PAGES * sizeof (atge_dma_t *));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
131 l1e->atge_l1e_rx_page = NULL;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
132 }
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 int
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
135 atge_l1e_alloc_dma(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
136 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
137 atge_dma_t *dma;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
138 atge_l1e_data_t *l1e;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
139 int err;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
140 int pages;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
141 int guard_size;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
142
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
143 l1e = kmem_zalloc(sizeof (atge_l1e_data_t), KM_SLEEP);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
144 atgep->atge_private_data = l1e;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
145
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
146 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
147 * Allocate TX ring descriptor.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
148 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
149 atgep->atge_tx_buf_len = atgep->atge_mtu +
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
150 sizeof (struct ether_header) + VLAN_TAGSZ + ETHERFCSL;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
151 atgep->atge_tx_ring = kmem_alloc(sizeof (atge_ring_t), KM_SLEEP);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
152 atgep->atge_tx_ring->r_atge = atgep;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
153 atgep->atge_tx_ring->r_desc_ring = NULL;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
154 dma = atge_alloc_a_dma_blk(atgep, &atge_l1e_dma_attr_tx_desc,
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
155 ATGE_TX_RING_SZ, DDI_DMA_RDWR);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
156 if (dma == NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
157 ATGE_DB(("%s :%s failed",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
158 atgep->atge_name, __func__));
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 return (DDI_FAILURE);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
160 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
161 atgep->atge_tx_ring->r_desc_ring = dma;
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 * Allocate DMA buffers for TX ring.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
165 */
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
166 err = atge_alloc_buffers(atgep->atge_tx_ring, ATGE_TX_RING_CNT,
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
167 atgep->atge_tx_buf_len, DDI_DMA_WRITE);
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
168 if (err != DDI_SUCCESS) {
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
169 ATGE_DB(("%s :%s() TX buffers failed",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
170 atgep->atge_name, __func__));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
171 return (err);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
172 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
173
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
174 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
175 * Allocate RX pages.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
176 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
177 atgep->atge_rx_buf_len = atgep->atge_mtu +
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
178 sizeof (struct ether_header) + VLAN_TAGSZ + ETHERFCSL;
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 if (atgep->atge_flags & ATGE_FLAG_JUMBO)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
181 guard_size = L1E_JUMBO_FRAMELEN;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
182 else
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
183 guard_size = L1E_MAX_FRAMELEN;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
184
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
185 l1e->atge_l1e_pagesize = ROUNDUP(guard_size + L1E_RX_PAGE_SZ,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
186 L1E_RX_PAGE_ALIGN);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
187 l1e->atge_l1e_rx_page =
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
188 kmem_zalloc(L1E_RX_PAGES * 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
189
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
190 ATGE_DB(("%s: %s() atge_l1e_pagesize : %d, L1E_RX_PAGE_SZ : %d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
191 atgep->atge_name, __func__, l1e->atge_l1e_pagesize,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
192 L1E_RX_PAGE_SZ));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
193
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
194 err = DDI_SUCCESS;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
195 for (pages = 0; pages < L1E_RX_PAGES; pages++) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
196 dma = atge_alloc_a_dma_blk(atgep, &atge_l1e_dma_attr_rx_desc,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
197 l1e->atge_l1e_pagesize, DDI_DMA_READ);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
198
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
199 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
200 err = DDI_FAILURE;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
201 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
202 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
203
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
204 l1e->atge_l1e_rx_page[pages] = dma;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
205 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
206
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
207 if (err == DDI_FAILURE) {
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
208 ATGE_DB(("%s :%s RX pages failed",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
209 atgep->atge_name, __func__));
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
210 return (DDI_FAILURE);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
211 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
212
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
213 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
214 * Allocate CMB used for fetching interrupt status data.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
215 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
216 ATGE_DB(("%s: %s() L1E_RX_CMB_SZ : %x", atgep->atge_name,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
217 __func__, L1E_RX_CMB_SZ));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
218
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
219 err = DDI_SUCCESS;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
220 dma = atge_alloc_a_dma_blk(atgep, &atge_l1e_dma_attr_cmb,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
221 L1E_RX_CMB_SZ * L1E_RX_PAGES, DDI_DMA_RDWR);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
222 if (dma == NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
223 ATGE_DB(("%s :%s() RX CMB failed",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
224 atgep->atge_name, __func__));
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 return (DDI_FAILURE);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
226 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
227 l1e->atge_l1e_rx_cmb = dma;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
228
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
229 if (err == DDI_FAILURE) {
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
230 ATGE_DB(("%s :%s() RX CMB failed",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
231 atgep->atge_name, __func__));
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
232 return (DDI_FAILURE);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
233 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
234
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
235 atgep->atge_hw_stats = kmem_zalloc(sizeof (atge_l1e_smb_t), KM_SLEEP);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
236
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
237 return (DDI_SUCCESS);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
238 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
239
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
240 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
241 atge_l1e_free_dma(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
242 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
243 atge_l1e_data_t *l1e;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
244
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
245 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
246 * Free TX ring.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
247 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
248 if (atgep->atge_tx_ring != 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
249 atge_free_buffers(atgep->atge_tx_ring, ATGE_TX_RING_CNT);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
250
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
251 if (atgep->atge_tx_ring->r_desc_ring != NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
252 atge_free_a_dma_blk(atgep->atge_tx_ring->r_desc_ring);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
253 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
254
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
255 kmem_free(atgep->atge_tx_ring, sizeof (atge_ring_t));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
256 atgep->atge_tx_ring = NULL;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
257 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
258
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
259 l1e = atgep->atge_private_data;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
260 if (l1e == NULL)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
261 return;
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 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
264 * Free RX CMB.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
265 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
266 if (l1e->atge_l1e_rx_cmb != NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
267 atge_free_a_dma_blk(l1e->atge_l1e_rx_cmb);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
268 l1e->atge_l1e_rx_cmb = NULL;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
269 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
270
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
271 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
272 * Free RX buffers and RX ring.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
273 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
274 atge_rx_desc_free(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
275
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 * Free the memory allocated for gathering hw stats.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
278 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
279 if (atgep->atge_hw_stats != NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
280 kmem_free(atgep->atge_hw_stats, sizeof (atge_l1e_smb_t));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
281 atgep->atge_hw_stats = NULL;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
282 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
283 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
284
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
285 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
286 atge_l1e_init_rx_pages(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
287 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
288 atge_l1e_data_t *l1e;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
289 atge_dma_t *dma;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
290 int pages;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
291
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
292 ASSERT(atgep != NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
293 l1e = atgep->atge_private_data;
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 ASSERT(l1e != NULL);
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 l1e->atge_l1e_proc_max = L1E_RX_PAGE_SZ / ETHERMIN;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
298 l1e->atge_l1e_rx_curp = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
299 l1e->atge_l1e_rx_seqno = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
300
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
301 for (pages = 0; pages < L1E_RX_PAGES; pages++) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
302 l1e->atge_l1e_rx_page_cons = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
303 l1e->atge_l1e_rx_page_prods[pages] = 0;
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 dma = l1e->atge_l1e_rx_page[pages];
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
307 ASSERT(dma != NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
308 bzero(dma->addr, l1e->atge_l1e_pagesize);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
309 DMA_SYNC(dma, 0, l1e->atge_l1e_pagesize, DDI_DMA_SYNC_FORDEV);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
310 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
311
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
312 dma = l1e->atge_l1e_rx_cmb;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
313 ASSERT(dma != NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
314 bzero(dma->addr, L1E_RX_CMB_SZ * L1E_RX_PAGES);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
315 DMA_SYNC(dma, 0, L1E_RX_CMB_SZ * L1E_RX_PAGES, DDI_DMA_SYNC_FORDEV);
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
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
318 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
319 atge_l1e_init_tx_ring(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
320 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
321 ASSERT(atgep != NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
322 ASSERT(atgep->atge_tx_ring != NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
323 ASSERT(atgep->atge_tx_ring->r_desc_ring != NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
324
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
325 atgep->atge_tx_ring->r_producer = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
326 atgep->atge_tx_ring->r_consumer = 0;
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
327 atgep->atge_tx_ring->r_avail_desc = ATGE_TX_RING_CNT;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
328
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
329 bzero(atgep->atge_tx_ring->r_desc_ring->addr, ATGE_TX_RING_SZ);
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
330
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
331 DMA_SYNC(atgep->atge_tx_ring->r_desc_ring, 0, ATGE_TX_RING_SZ,
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
332 DDI_DMA_SYNC_FORDEV);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
333 }
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 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
336 atge_l1e_program_dma(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
337 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
338 atge_l1e_data_t *l1e;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
339 uint64_t paddr;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
340 uint32_t reg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
341
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
342 l1e = (atge_l1e_data_t *)atgep->atge_private_data;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
343
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 * Clear WOL status and disable all WOL feature as WOL
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
346 * would interfere Rx operation under normal environments.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
347 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
348 (void) INL(atgep, ATGE_WOL_CFG);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
349 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
350
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
351 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
352 * Set Tx descriptor/RXF0/CMB base addresses. They share
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
353 * the same high address part of DMAable region.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
354 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
355 paddr = atgep->atge_tx_ring->r_desc_ring->cookie.dmac_laddress;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
356 OUTL(atgep, ATGE_DESC_ADDR_HI, ATGE_ADDR_HI(paddr));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
357 OUTL(atgep, ATGE_DESC_TPD_ADDR_LO, ATGE_ADDR_LO(paddr));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
358 OUTL(atgep, ATGE_DESC_TPD_CNT,
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
359 (ATGE_TX_RING_CNT << DESC_TPD_CNT_SHIFT) & DESC_TPD_CNT_MASK);
10393
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 /* Set Rx page base address, note we use single queue. */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
362 paddr = l1e->atge_l1e_rx_page[0]->cookie.dmac_laddress;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
363 OUTL(atgep, L1E_RXF0_PAGE0_ADDR_LO, ATGE_ADDR_LO(paddr));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
364 paddr = l1e->atge_l1e_rx_page[1]->cookie.dmac_laddress;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
365 OUTL(atgep, L1E_RXF0_PAGE1_ADDR_LO, ATGE_ADDR_LO(paddr));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
366
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
367 /* Set Tx/Rx CMB addresses. */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
368 paddr = l1e->atge_l1e_rx_cmb->cookie.dmac_laddress;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
369 OUTL(atgep, L1E_RXF0_CMB0_ADDR_LO, ATGE_ADDR_LO(paddr));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
370 paddr = l1e->atge_l1e_rx_cmb->cookie.dmac_laddress + sizeof (uint32_t);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
371 OUTL(atgep, L1E_RXF0_CMB1_ADDR_LO, ATGE_ADDR_LO(paddr));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
372
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
373 /* Mark RXF0 valid. */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
374 OUTB(atgep, L1E_RXF0_PAGE0, RXF_VALID); /* 0 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
375 OUTB(atgep, L1E_RXF0_PAGE1, RXF_VALID); /* 1 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
376 OUTB(atgep, L1E_RXF0_PAGE0 + 2, 0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
377 OUTB(atgep, L1E_RXF0_PAGE0 + 3, 0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
378 OUTB(atgep, L1E_RXF0_PAGE0 + 4, 0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
379 OUTB(atgep, L1E_RXF0_PAGE0 + 5, 0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
380 OUTB(atgep, L1E_RXF0_PAGE0 + 6, 0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
381 OUTB(atgep, L1E_RXF0_PAGE0 + 6, 0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
382
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
383 /* Set Rx page size, excluding guard frame size. */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
384 OUTL(atgep, L1E_RXF_PAGE_SIZE, L1E_RX_PAGE_SZ);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
385
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
386 /* Tell hardware that we're ready to load DMA blocks. */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
387 OUTL(atgep, ATGE_DMA_BLOCK, DMA_BLOCK_LOAD);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
388
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
389 /* Set Rx/Tx interrupt trigger threshold. */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
390 OUTL(atgep, L1E_INT_TRIG_THRESH, (1 << INT_TRIG_RX_THRESH_SHIFT) |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
391 (4 << INT_TRIG_TX_THRESH_SHIFT));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
392
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
393 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
394 * Set interrupt trigger timer, its purpose and relation
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
395 * with interrupt moderation mechanism is not clear yet.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
396 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
397 OUTL(atgep, L1E_INT_TRIG_TIMER,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
398 ((ATGE_USECS(10) << INT_TRIG_RX_TIMER_SHIFT) |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
399 (ATGE_USECS(1000) << INT_TRIG_TX_TIMER_SHIFT)));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
400
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
401 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
402 reg |= ATGE_USECS(ATGE_IM_TX_TIMER_DEFAULT) << IM_TIMER_TX_SHIFT;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
403 OUTL(atgep, ATGE_IM_TIMER, reg);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
404
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
405 reg = INL(atgep, ATGE_MASTER_CFG);
13768
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 11353
diff changeset
406 reg &= ~(L1E_MASTER_CHIP_REV_MASK | L1E_MASTER_CHIP_ID_MASK);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 11353
diff changeset
407 reg &= ~(L1E_MASTER_IM_RX_TIMER_ENB | L1E_MASTER_IM_TX_TIMER_ENB);
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 11353
diff changeset
408 reg |= L1E_MASTER_IM_RX_TIMER_ENB;
ed21ea5d20cf 212 Atheros AR8132 / L1c Gigabit Ethernet Adapter
Gary Mills <gary_mills@fastmail.fm>
parents: 11353
diff changeset
409 reg |= L1E_MASTER_IM_TX_TIMER_ENB;
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
410 OUTL(atgep, ATGE_MASTER_CFG, reg);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
411
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
412 OUTW(atgep, RX_COALSC_PKT_1e, 0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
413 OUTW(atgep, RX_COALSC_TO_1e, 0);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
414 OUTW(atgep, TX_COALSC_PKT_1e, 1);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
415 OUTW(atgep, TX_COALSC_TO_1e, 4000/2); /* 4mS */
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
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
418 mblk_t *
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
419 atge_l1e_receive(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
420 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
421 atge_l1e_data_t *l1e;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
422 atge_dma_t *dma_rx_page;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
423 atge_dma_t *dma_rx_cmb;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
424 uint32_t *ptr;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
425 uint32_t cons, current_page;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
426 uchar_t *pageaddr, *bufp;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
427 rx_rs_t *rs;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
428 int prog;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
429 uint32_t seqno, len, flags;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
430 mblk_t *mp = NULL, *rx_head, *rx_tail;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
431 static uint32_t gen = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
432
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
433 l1e = atgep->atge_private_data;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
434
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
435 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
436 ASSERT(l1e != NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
437
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
438 rx_tail = NULL;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
439 rx_head = NULL;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
440
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
441 current_page = l1e->atge_l1e_rx_curp;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
442
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
443 /* Sync CMB first */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
444 dma_rx_cmb = l1e->atge_l1e_rx_cmb;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
445 DMA_SYNC(dma_rx_cmb, 0, L1E_RX_CMB_SZ * L1E_RX_PAGES,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
446 DDI_DMA_SYNC_FORKERNEL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
447
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
448 dma_rx_page = l1e->atge_l1e_rx_page[current_page];
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
449
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
450 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
451 * Get the producer offset from CMB.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
452 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
453 ptr = (void *)dma_rx_cmb->addr;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
454
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
455 l1e->atge_l1e_rx_page_prods[current_page] =
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
456 ATGE_GET32(dma_rx_cmb, ptr + current_page);
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 /* Sync current RX Page as well */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
459 DMA_SYNC(dma_rx_page, l1e->atge_l1e_rx_page_cons,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
460 l1e->atge_l1e_rx_page_prods[current_page], DDI_DMA_SYNC_FORKERNEL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
461
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
462 ATGE_DB(("%s: %s() prod : %d, cons : %d, curr page : %d, gen : (%d)"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
463 " cmb[0,1] : %d, %d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
464 atgep->atge_name, __func__,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
465 l1e->atge_l1e_rx_page_prods[current_page],
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
466 l1e->atge_l1e_rx_page_cons, l1e->atge_l1e_rx_curp, gen,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
467 ATGE_GET32(dma_rx_cmb, ptr), ATGE_GET32(dma_rx_cmb, ptr + 1)));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
468
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
469 for (prog = 0; prog <= l1e->atge_l1e_proc_max; prog++) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
470 cons = l1e->atge_l1e_rx_page_cons;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
471 if (cons >= l1e->atge_l1e_rx_page_prods[l1e->atge_l1e_rx_curp])
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
472 break;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
473
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
474 dma_rx_page = l1e->atge_l1e_rx_page[l1e->atge_l1e_rx_curp];
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
475 pageaddr = (uchar_t *)dma_rx_page->addr;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
476 pageaddr = pageaddr + cons;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
477 rs = (rx_rs_t *)pageaddr;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
478
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
479 seqno = ATGE_GET32(dma_rx_page, &(rs->seqno));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
480 seqno = L1E_RX_SEQNO(seqno);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
481
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
482 len = ATGE_GET32(dma_rx_page, &(rs->length));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
483 len = L1E_RX_BYTES(len);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
484
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
485 flags = ATGE_GET32(dma_rx_page, &(rs->flags));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
486
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
487 if (seqno != l1e->atge_l1e_rx_seqno) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
488 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
489 * We have not seen this happening but we
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
490 * must restart the chip if that happens.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
491 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
492 ATGE_DB(("%s: %s() MISS-MATCH in seqno :%d,"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
493 " atge_l1e_rx_seqno : %d, length : %d, flags : %x",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
494 atgep->atge_name, __func__, seqno,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
495 l1e->atge_l1e_rx_seqno, len, flags));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
496
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
497 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
498 atge_device_restart(atgep);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
499 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
500
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 * Return all the pkts received before restarting
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
503 * the chip.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
504 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
505 return (rx_head);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
506 } else {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
507 l1e->atge_l1e_rx_seqno++;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
508 }
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 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
511 * We will pass the pkt to upper layer provided it's clear
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
512 * from any error.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
513 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
514 if ((flags & L1E_RD_ERROR) != 0) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
515 if ((flags & (L1E_RD_CRC | L1E_RD_CODE |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
516 L1E_RD_DRIBBLE | L1E_RD_RUNT | L1E_RD_OFLOW |
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
517 L1E_RD_TRUNC)) != 0) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
518 ATGE_DB(("%s: %s() ERRORED PKT : %x",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
519 atgep->atge_name, __func__, flags));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
520 atge_l1e_rx_next_pkt(atgep, len);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
521 atgep->atge_errrcv++;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
522 continue;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
523 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
524 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
525
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
526 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
527 * So we have received a frame/pkt.
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 if (len == 0 || len > atgep->atge_rx_buf_len) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
530 ATGE_DB(("%s: %s() PKT len > error : %d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
531 atgep->atge_name, __func__, len));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
532 atge_l1e_rx_next_pkt(atgep, len);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
533 continue;
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
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
536 mp = allocb(len + VLAN_TAGSZ, BPRI_MED);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
537 if (mp != NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
538 mp->b_rptr += VLAN_TAGSZ;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
539 bufp = mp->b_rptr;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
540 mp->b_wptr = bufp + len;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
541 mp->b_next = NULL;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
542
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
543 bcopy(pageaddr + sizeof (rx_rs_t), bufp, len);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
544
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
545 if (rx_tail == NULL)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
546 rx_head = rx_tail = mp;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
547 else {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
548 rx_tail->b_next = mp;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
549 rx_tail = mp;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
550 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
551
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
552 atgep->atge_ipackets++;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
553 atgep->atge_rbytes += len;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
554 } else {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
555 ATGE_DB(("%s: %s() PKT mp == NULL len : %d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
556 atgep->atge_name, __func__, len));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
557
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
558 if (len > atgep->atge_rx_buf_len) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
559 atgep->atge_toolong_errors++;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
560 } else if (mp == NULL) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
561 atgep->atge_norcvbuf++;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
562 }
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
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
565 atge_l1e_rx_next_pkt(atgep, len);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
566
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
567 ATGE_DB(("%s: %s() seqno :%d, atge_l1e_rx_seqno :"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
568 " %d, length : %d,"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
569 " flags : %x, cons : %d, prod : %d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
570 atgep->atge_name, __func__, seqno,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
571 l1e->atge_l1e_rx_seqno, len, flags,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
572 l1e->atge_l1e_rx_page_cons,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
573 l1e->atge_l1e_rx_page_prods[l1e->atge_l1e_rx_curp]));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
574 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
575
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
576 ATGE_DB(("%s: %s() receive completed (gen : %d) : cons : %d,"
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
577 " prod :%d, L1E_RX_PAGE_SZ : %d (prog:%d)",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
578 atgep->atge_name, __func__, gen,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
579 l1e->atge_l1e_rx_page_cons,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
580 l1e->atge_l1e_rx_page_prods[l1e->atge_l1e_rx_curp],
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
581 L1E_RX_PAGE_SZ, prog));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
582
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
583 gen++;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
584 return (rx_head);
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
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
587 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
588 atge_l1e_rx_next_pkt(atge_t *atgep, uint32_t len)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
589 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
590 atge_l1e_data_t *l1e = atgep->atge_private_data;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
591 atge_dma_t *dma_rx_page;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
592 atge_dma_t *dma_rx_cmb;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
593 int curr = l1e->atge_l1e_rx_curp;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
594 uint32_t *p;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
595
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
596 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
597 * Update consumer position.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
598 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
599 l1e->atge_l1e_rx_page_cons +=
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
600 ROUNDUP(len + sizeof (rx_rs_t), L1E_RX_PAGE_ALIGN);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
601
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
602 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
603 * If we need to flip to the other page. Note that we use only two
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
604 * pages.
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 if (l1e->atge_l1e_rx_page_cons >= L1E_RX_PAGE_SZ) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
607 ATGE_DB(("%s: %s() cons : %d, prod :%d, L1E_RX_PAGE_SZ : %d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
608 atgep->atge_name, __func__, l1e->atge_l1e_rx_page_cons,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
609 l1e->atge_l1e_rx_page_prods[curr], L1E_RX_PAGE_SZ));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
610
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
611 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
612 * Clear the producer.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
613 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
614 dma_rx_cmb = l1e->atge_l1e_rx_cmb;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
615 p = (void *)dma_rx_cmb->addr;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
616 p = p + curr;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
617 *p = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
618 DMA_SYNC(dma_rx_cmb, curr * L1E_RX_CMB_SZ,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
619 L1E_RX_CMB_SZ, DDI_DMA_SYNC_FORDEV);
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 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
622 * Notify the NIC that the current RX page is available again.
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 OUTB(atgep, L1E_RXF0_PAGE0 + curr, RXF_VALID);
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 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
627 * End of Rx page reached, let hardware reuse this page.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
628 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
629 l1e->atge_l1e_rx_page_cons = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
630 l1e->atge_l1e_rx_page_prods[curr] = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
631
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
632 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
633 * Switch to alternate Rx page.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
634 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
635 curr ^= 1;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
636 l1e->atge_l1e_rx_curp = curr;
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 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
639 * Page flipped, sync CMB and then Rx page.
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 DMA_SYNC(dma_rx_cmb, 0, L1E_RX_PAGES * L1E_RX_CMB_SZ,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
642 DDI_DMA_SYNC_FORKERNEL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
643 p = (void *)dma_rx_cmb->addr;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
644 l1e->atge_l1e_rx_page_prods[curr] =
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
645 ATGE_GET32(dma_rx_cmb, p + curr);
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 dma_rx_page = l1e->atge_l1e_rx_page[curr];
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
648 DMA_SYNC(dma_rx_page, 0, l1e->atge_l1e_rx_page_prods[curr],
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
649 DDI_DMA_SYNC_FORKERNEL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
650
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
651 ATGE_DB(("%s: %s() PAGE FLIPPED -> %d, producer[0,1]: %d, %d",
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
652 atgep->atge_name, __func__, curr,
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
653 ATGE_GET32(dma_rx_cmb, p), ATGE_GET32(dma_rx_cmb, p + 1)));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
654 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
655 }
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 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
658 atge_l1e_send_packet(atge_ring_t *r)
10393
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
659 {
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 * Ask chip to send the packet now.
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 OUTL(r->r_atge, ATGE_MBOX, r->r_producer);
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
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
666 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
667 atge_l1e_clear_stats(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
668 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
669 atge_l1e_smb_t smb;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
670 uint32_t *reg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
671 int i;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
672
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
673 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
674 * Clear RX stats first.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
675 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
676 i = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
677 reg = &smb.rx_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
678 while (reg++ <= &smb.rx_pkts_filtered) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
679 (void) INL(atgep, L1E_RX_MIB_BASE + i);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
680 i += sizeof (uint32_t);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
681 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
682
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
683 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
684 * Clear TX stats.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
685 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
686 i = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
687 reg = &smb.tx_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
688 while (reg++ <= &smb.tx_mcast_bytes) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
689 (void) INL(atgep, L1E_TX_MIB_BASE + i);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
690 i += sizeof (uint32_t);
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
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
694 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
695 atge_l1e_gather_stats(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
696 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
697 atge_l1e_smb_t *stat;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
698 atge_l1e_smb_t *smb;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
699 atge_l1e_smb_t local_smb;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
700 uint32_t *reg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
701 int i;
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 ASSERT(atgep != NULL);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
704
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
705 stat = (atge_l1e_smb_t *)atgep->atge_hw_stats;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
706
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
707 bzero(&local_smb, sizeof (atge_l1e_smb_t));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
708 smb = &local_smb;
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 /* Read Rx statistics. */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
711 i = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
712 reg = &smb->rx_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
713 while (reg++ <= &smb->rx_pkts_filtered) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
714 *reg = INL(atgep, L1E_RX_MIB_BASE + i);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
715 i += sizeof (uint32_t);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
716 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
717
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
718 /* Read Tx statistics. */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
719 i = 0;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
720 reg = &smb->tx_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
721 while (reg++ <= &smb->tx_mcast_bytes) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
722 *reg = INL(atgep, L1E_TX_MIB_BASE + i);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
723 i += sizeof (uint32_t);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
724 }
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 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
727 * SMB is cleared everytime we read; hence we always do '+='.
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
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
730 /* Rx stats. */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
731 stat->rx_frames += smb->rx_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
732 stat->rx_bcast_frames += smb->rx_bcast_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
733 stat->rx_mcast_frames += smb->rx_mcast_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
734 stat->rx_pause_frames += smb->rx_pause_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
735 stat->rx_control_frames += smb->rx_control_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
736 stat->rx_crcerrs += smb->rx_crcerrs;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
737 stat->rx_lenerrs += smb->rx_lenerrs;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
738 stat->rx_bytes += smb->rx_bytes;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
739 stat->rx_runts += smb->rx_runts;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
740 stat->rx_fragments += smb->rx_fragments;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
741 stat->rx_pkts_64 += smb->rx_pkts_64;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
742 stat->rx_pkts_65_127 += smb->rx_pkts_65_127;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
743 stat->rx_pkts_128_255 += smb->rx_pkts_128_255;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
744 stat->rx_pkts_256_511 += smb->rx_pkts_256_511;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
745 stat->rx_pkts_512_1023 += smb->rx_pkts_512_1023;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
746 stat->rx_pkts_1024_1518 += smb->rx_pkts_1024_1518;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
747 stat->rx_pkts_1519_max += smb->rx_pkts_1519_max;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
748 stat->rx_pkts_truncated += smb->rx_pkts_truncated;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
749 stat->rx_fifo_oflows += smb->rx_fifo_oflows;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
750 stat->rx_rrs_errs += smb->rx_rrs_errs;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
751 stat->rx_alignerrs += smb->rx_alignerrs;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
752 stat->rx_bcast_bytes += smb->rx_bcast_bytes;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
753 stat->rx_mcast_bytes += smb->rx_mcast_bytes;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
754 stat->rx_pkts_filtered += smb->rx_pkts_filtered;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
755
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
756 /* Tx stats. */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
757 stat->tx_frames += smb->tx_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
758 stat->tx_bcast_frames += smb->tx_bcast_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
759 stat->tx_mcast_frames += smb->tx_mcast_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
760 stat->tx_pause_frames += smb->tx_pause_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
761 stat->tx_excess_defer += smb->tx_excess_defer;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
762 stat->tx_control_frames += smb->tx_control_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
763 stat->tx_deferred += smb->tx_deferred;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
764 stat->tx_bytes += smb->tx_bytes;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
765 stat->tx_pkts_64 += smb->tx_pkts_64;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
766 stat->tx_pkts_65_127 += smb->tx_pkts_65_127;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
767 stat->tx_pkts_128_255 += smb->tx_pkts_128_255;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
768 stat->tx_pkts_256_511 += smb->tx_pkts_256_511;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
769 stat->tx_pkts_512_1023 += smb->tx_pkts_512_1023;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
770 stat->tx_pkts_1024_1518 += smb->tx_pkts_1024_1518;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
771 stat->tx_pkts_1519_max += smb->tx_pkts_1519_max;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
772 stat->tx_single_colls += smb->tx_single_colls;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
773 stat->tx_multi_colls += smb->tx_multi_colls;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
774 stat->tx_late_colls += smb->tx_late_colls;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
775 stat->tx_excess_colls += smb->tx_excess_colls;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
776 stat->tx_abort += smb->tx_abort;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
777 stat->tx_underrun += smb->tx_underrun;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
778 stat->tx_desc_underrun += smb->tx_desc_underrun;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
779 stat->tx_lenerrs += smb->tx_lenerrs;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
780 stat->tx_pkts_truncated += smb->tx_pkts_truncated;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
781 stat->tx_bcast_bytes += smb->tx_bcast_bytes;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
782 stat->tx_mcast_bytes += smb->tx_mcast_bytes;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
783
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
784 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
785 * Update global counters in atge_t.
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 atgep->atge_brdcstrcv += smb->rx_bcast_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
788 atgep->atge_multircv += smb->rx_mcast_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
789 atgep->atge_multixmt += smb->tx_mcast_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
790 atgep->atge_brdcstxmt += smb->tx_bcast_frames;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
791
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
792 atgep->atge_align_errors += smb->rx_alignerrs;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
793 atgep->atge_fcs_errors += smb->rx_crcerrs;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
794 atgep->atge_sqe_errors += smb->rx_rrs_errs;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
795 atgep->atge_defer_xmts += smb->tx_deferred;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
796 atgep->atge_first_collisions += smb->tx_single_colls;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
797 atgep->atge_multi_collisions += smb->tx_multi_colls * 2;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
798 atgep->atge_tx_late_collisions += smb->tx_late_colls;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
799 atgep->atge_ex_collisions += smb->tx_excess_colls;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
800 atgep->atge_macxmt_errors += smb->tx_abort;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
801 atgep->atge_toolong_errors += smb->rx_lenerrs;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
802 atgep->atge_overflow += smb->rx_fifo_oflows;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
803 atgep->atge_underflow += (smb->tx_underrun + smb->tx_desc_underrun);
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
804 atgep->atge_runt += smb->rx_runts;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
805
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
806
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
807 atgep->atge_collisions += smb->tx_single_colls +
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
808 smb->tx_multi_colls * 2 + smb->tx_late_colls +
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
809 smb->tx_abort * HDPX_CFG_RETRY_DEFAULT;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
810
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
811 /*
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
812 * tx_pkts_truncated counter looks suspicious. It constantly
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
813 * increments with no sign of Tx errors. Hence we don't factor it.
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
814 */
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
815 atgep->atge_macxmt_errors += smb->tx_abort + smb->tx_late_colls +
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
816 smb->tx_underrun;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
817
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
818 atgep->atge_macrcv_errors += smb->rx_crcerrs + smb->rx_lenerrs +
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
819 smb->rx_runts + smb->rx_pkts_truncated +
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
820 smb->rx_fifo_oflows + smb->rx_rrs_errs +
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
821 smb->rx_alignerrs;
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
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
824 void
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
825 atge_l1e_stop_mac(atge_t *atgep)
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
826 {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
827 uint32_t reg;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
828
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
829 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
830 ATGE_DB(("%s: %s() reg : %x", atgep->atge_name, __func__, reg));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
831
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
832 if ((reg & (ATGE_CFG_TX_ENB | ATGE_CFG_RX_ENB)) != 0) {
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
833 reg &= ~ATGE_CFG_TX_ENB | ATGE_CFG_RX_ENB;
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
834 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
835 ATGE_DB(("%s: %s() mac stopped", atgep->atge_name, __func__));
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
836 }
f08ea7a5507b PSARC/2009/405 Atheros/Attansic Ethernet Gigbit Ethernet Driver
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents:
diff changeset
837 }
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
838
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
839 /*
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
840 * The interrupt handler for L1E/L2E
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
841 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
842 /*ARGSUSED*/
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
843 uint_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
844 atge_l1e_interrupt(caddr_t arg1, caddr_t arg2)
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
845 {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
846 atge_t *atgep = (void *)arg1;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
847 mblk_t *rx_head = 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
848 uint32_t 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
849 int resched = 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
850
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
851 ASSERT(atgep != 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
852
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
853 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
854
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
855 if (atgep->atge_chip_state & ATGE_CHIP_SUSPENDED) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
856 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
857 return (DDI_INTR_UNCLAIMED);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
858 }
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
859
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
860 status = INL(atgep, ATGE_INTR_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
861 if (status == 0 || (status & atgep->atge_intrs) == 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
862 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
863
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
864 if (atgep->atge_flags & ATGE_FIXED_TYPE)
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
865 return (DDI_INTR_UNCLAIMED);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
866
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
867 return (DDI_INTR_CLAIMED);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
868 }
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
869
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
870 ATGE_DB(("%s: %s() entry status : %x",
db56a54bf91c 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 atgep->atge_name, __func__, 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
872
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
873
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
874 /*
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
875 * Disable interrupts.
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
876 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
877 OUTL(atgep, ATGE_INTR_STATUS, status | INTR_DIS_INT);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
878 FLUSH(atgep, ATGE_INTR_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
879
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
880 /*
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
881 * Check if chip is running, only then do the work.
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
882 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
883 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
884 if (status & INTR_SMB) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
885 atge_l1e_gather_stats(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
886 }
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
887
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
888 /*
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
889 * Check for errors.
db56a54bf91c 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 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
891 if (status & L1E_INTR_ERRORS) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
892 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
893 "L1E chip found an error intr status : %x",
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
894 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
895
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
896 if (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
897 (INTR_DMA_RD_TO_RST | INTR_DMA_WR_TO_RST)) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
898 atge_error(atgep->atge_dip, "DMA transfer err");
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
899
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
900 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
901 goto done;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
902 }
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
903
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
904 if (status & INTR_TX_FIFO_UNDERRUN) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
905 atge_error(atgep->atge_dip, "TX FIFO underrun");
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
906 }
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
907 }
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
908
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
909 rx_head = atge_l1e_receive(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
910
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
911 if (status & INTR_TX_PKT) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
912 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
913
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
914 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
915 cons = INW(atgep, L1E_TPD_CONS_IDX);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
916 atge_tx_reclaim(atgep, 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
917 if (atgep->atge_tx_resched) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
918 atgep->atge_tx_resched = 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
919 resched = 1;
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
920 }
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
921
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
922 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
923 }
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
924 }
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
925
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
926 /*
db56a54bf91c 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 * Enable interrupts.
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
928 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
929 OUTL(atgep, ATGE_INTR_STATUS, 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
930
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
931 done:
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
932
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
933 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
934
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
935 if (status & INTR_GPHY) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
936 /*
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
937 * Ack interrupts from PHY
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
938 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
939 (void) atge_mii_read(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
940 atgep->atge_phyaddr, ATGE_ISR_ACK_GPHY);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
941
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
942 mii_check(atgep->atge_mii);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
943 }
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
944
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
945 /*
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
946 * Pass the list of packets received from chip to MAC layer.
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
947 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
948 if (rx_head) {
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
949 mac_rx(atgep->atge_mh, 0, rx_head);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
950 }
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
951
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
952 /*
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
953 * Let MAC start sending pkts if the downstream was asked to pause.
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
954 */
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
955 if (resched)
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
956 mac_tx_update(atgep->atge_mh);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
957
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
958 return (DDI_INTR_CLAIMED);
db56a54bf91c 6580058 Attansic L1 Gigabit ethernet controller (0x1048) support needed (found on ASUS P5B Plus)
Saurabh Misra <Saurabh.Mishra@Sun.COM>
parents: 10393
diff changeset
959 }