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