11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*******************************************************************************
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
30abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  Intel PRO/1000 Linux driver
40abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  Copyright(c) 1999 - 2006 Intel Corporation.
50abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok
60abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  This program is free software; you can redistribute it and/or modify it
70abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  under the terms and conditions of the GNU General Public License,
80abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  version 2, as published by the Free Software Foundation.
90abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok
100abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  This program is distributed in the hope it will be useful, but WITHOUT
110abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
120abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  more details.
140abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  You should have received a copy of the GNU General Public License along with
160abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  this program; if not, write to the Free Software Foundation, Inc.,
170abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
180abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok
190abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  The full GNU General Public License is included in this distribution in
200abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  the file called "COPYING".
210abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  Contact Information:
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  Linux NICS <linux.nics@intel.com>
243d41e30aa3dde76c81ecbbf0e3a25392fcd90469Auke Kok  e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*******************************************************************************/
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* e1000_hw.h
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Structures, enums, and macros for the MAC
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _E1000_HW_H_
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _E1000_HW_H_
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "e1000_osdep.h"
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
38675ad47375c76a7c3be4ace9554d92cd55518cedEmil Tantilov
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Forward declarations of structures used by the shared code */
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_hw;
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_hw_stats;
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Enumerated types specific to the e1000 hardware */
44b595076a180a56d1bb170e6eceda6eb9d76f4cd3Uwe Kleine-König/* Media Access Controllers */
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
46120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_undefined = 0,
47120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_82542_rev2_0,
48120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_82542_rev2_1,
49120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_82543,
50120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_82544,
51120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_82540,
52120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_82545,
53120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_82545_rev_3,
54120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_82546,
555377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie	e1000_ce4100,
56120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_82546_rev_3,
57120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_82541,
58120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_82541_rev_2,
59120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_82547,
60120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_82547_rev_2,
61120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_num_macs
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_mac_type;
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
65120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_eeprom_uninitialized = 0,
66120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_eeprom_spi,
67120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_eeprom_microwire,
68120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_eeprom_flash,
69120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_eeprom_none,	/* No NVM support */
70120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_num_eeprom_types
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_eeprom_type;
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Media Types */
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
75120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_media_type_copper = 0,
76120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_media_type_fiber = 1,
77120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_media_type_internal_serdes = 2,
78120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_num_media_types
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_media_type;
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
82120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_10_half = 0,
83120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_10_full = 1,
84120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_100_half = 2,
85120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_100_full = 3
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_speed_duplex_type;
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Flow Control Settings */
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
90120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	E1000_FC_NONE = 0,
91120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	E1000_FC_RX_PAUSE = 1,
92120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	E1000_FC_TX_PAUSE = 2,
93120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	E1000_FC_FULL = 3,
94120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	E1000_FC_DEFAULT = 0xFF
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_fc_type;
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
97d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kokstruct e1000_shadow_ram {
98120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 eeprom_word;
99120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool modified;
100d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok};
101d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PCI bus types */
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
104120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_type_unknown = 0,
105120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_type_pci,
106120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_type_pcix,
107120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_type_reserved
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_bus_type;
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PCI bus speeds */
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
112120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_speed_unknown = 0,
113120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_speed_33,
114120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_speed_66,
115120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_speed_100,
116120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_speed_120,
117120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_speed_133,
118120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_speed_reserved
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_bus_speed;
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PCI bus widths */
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
123120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_width_unknown = 0,
124120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_width_32,
125120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_width_64,
126120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_width_reserved
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_bus_width;
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PHY status info structure and supporting enums */
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
131120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_cable_length_50 = 0,
132120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_cable_length_50_80,
133120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_cable_length_80_110,
134120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_cable_length_110_140,
135120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_cable_length_140,
136120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_cable_length_undefined = 0xFF
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_cable_length;
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
140120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_gg_cable_length_60 = 0,
141120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_gg_cable_length_60_115 = 1,
142120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_gg_cable_length_115_150 = 2,
143120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_gg_cable_length_150 = 4
1446418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher} e1000_gg_cable_length;
1456418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher
1466418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirshertypedef enum {
147120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_10 = 10,
148120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_20 = 20,
149120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_30 = 30,
150120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_40 = 40,
151120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_50 = 50,
152120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_60 = 60,
153120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_70 = 70,
154120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_80 = 80,
155120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_90 = 90,
156120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_100 = 100,
157120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_110 = 110,
158120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_115 = 115,
159120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_120 = 120,
160120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_130 = 130,
161120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_140 = 140,
162120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_150 = 150,
163120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_160 = 160,
164120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_170 = 170,
165120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_igp_cable_length_180 = 180
1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_igp_cable_length;
1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
169120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_10bt_ext_dist_enable_normal = 0,
170120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_10bt_ext_dist_enable_lower,
171120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_10bt_ext_dist_enable_undefined = 0xFF
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_10bt_ext_dist_enable;
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
175120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_rev_polarity_normal = 0,
176120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_rev_polarity_reversed,
177120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_rev_polarity_undefined = 0xFF
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_rev_polarity;
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
181120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_downshift_normal = 0,
182120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_downshift_activated,
183120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_downshift_undefined = 0xFF
1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_downshift;
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
187120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_smart_speed_default = 0,
188120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_smart_speed_on,
189120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_smart_speed_off
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_smart_speed;
1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
193120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_polarity_reversal_enabled = 0,
194120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_polarity_reversal_disabled,
195120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_polarity_reversal_undefined = 0xFF
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_polarity_reversal;
1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
199120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_auto_x_mode_manual_mdi = 0,
200120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_auto_x_mode_manual_mdix,
201120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_auto_x_mode_auto1,
202120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_auto_x_mode_auto2,
203120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_auto_x_mode_undefined = 0xFF
2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_auto_x_mode;
2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
207120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_1000t_rx_status_not_ok = 0,
208120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_1000t_rx_status_ok,
209120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_1000t_rx_status_undefined = 0xFF
2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_1000t_rx_status;
2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
2135377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie	e1000_phy_m88 = 0,
2145377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie	e1000_phy_igp,
2155377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie	e1000_phy_8211,
2165377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie	e1000_phy_8201,
2175377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie	e1000_phy_undefined = 0xFF
2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_phy_type;
2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
221120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_ms_hw_default = 0,
222120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_ms_force_master,
223120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_ms_force_slave,
224120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_ms_auto
2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_ms_type;
2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
228120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_ffe_config_enabled = 0,
229120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_ffe_config_active,
230120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_ffe_config_blocked
2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_ffe_config;
2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
234120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_dsp_config_disabled = 0,
235120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_dsp_config_enabled,
236120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_dsp_config_activated,
237120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_dsp_config_undefined = 0xFF
2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} e1000_dsp_config;
2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_phy_info {
241120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_cable_length cable_length;
242120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_10bt_ext_dist_enable extended_10bt_distance;
243120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_rev_polarity cable_polarity;
244120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_downshift downshift;
245120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_polarity_reversal polarity_correction;
246120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_auto_x_mode mdix_mode;
247120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_1000t_rx_status local_rx;
248120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_1000t_rx_status remote_rx;
2491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_phy_stats {
252120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 idle_errors;
253120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 receive_errors;
2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_eeprom_info {
257120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_eeprom_type type;
258120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 word_size;
259120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 opcode_bits;
260120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 address_bits;
261120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 delay_usec;
262120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 page_size;
2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2652d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* Flex ASF Information */
2662d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_HOST_IF_MAX_SIZE  2048
2672d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
2682d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakalatypedef enum {
269120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_byte_align = 0,
270120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_word_align = 1,
271120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_dword_align = 2
2722d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala} e1000_align_type;
2732d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Error Codes */
2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_SUCCESS      0
2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_ERR_EEPROM   1
2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_ERR_PHY      2
2781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_ERR_CONFIG   3
2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_ERR_PARAM    4
2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_ERR_MAC_TYPE 5
2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_ERR_PHY_TYPE 6
2822d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_ERR_RESET   9
2832d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_ERR_MASTER_REQUESTS_PENDING 10
2842d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_ERR_HOST_INTERFACE_COMMAND 11
2852d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_BLK_PHY_RESET   12
2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2872a88c17371c3c263c28330093a4cd21bbeceb677Jeff Kirsher#define E1000_BYTE_SWAP_WORD(_value) ((((_value) & 0x00ff) << 8) | \
2882a88c17371c3c263c28330093a4cd21bbeceb677Jeff Kirsher                                     (((_value) & 0xff00) >> 8))
2892a88c17371c3c263c28330093a4cd21bbeceb677Jeff Kirsher
2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Function prototypes */
2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Initialization */
292406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_reset_hw(struct e1000_hw *hw);
293406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_init_hw(struct e1000_hw *hw);
294406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_set_mac_type(struct e1000_hw *hw);
2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid e1000_set_media_type(struct e1000_hw *hw);
2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Link Configuration */
298406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_setup_link(struct e1000_hw *hw);
299406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_phy_setup_autoneg(struct e1000_hw *hw);
3001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid e1000_config_collision_dist(struct e1000_hw *hw);
301406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_check_for_link(struct e1000_hw *hw);
302120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburgs32 e1000_get_speed_and_duplex(struct e1000_hw *hw, u16 * speed, u16 * duplex);
303406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_force_mac_fc(struct e1000_hw *hw);
3041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PHY */
306120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburgs32 e1000_read_phy_reg(struct e1000_hw *hw, u32 reg_addr, u16 * phy_data);
307406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_write_phy_reg(struct e1000_hw *hw, u32 reg_addr, u16 data);
308406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_phy_hw_reset(struct e1000_hw *hw);
309406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_phy_reset(struct e1000_hw *hw);
310406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_phy_get_info(struct e1000_hw *hw, struct e1000_phy_info *phy_info);
311406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_validate_mdi_setting(struct e1000_hw *hw);
31290fb51358a264f2f7e0cabdca6fc229bbc40cd91Auke Kok
3131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* EEPROM Functions */
314406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_init_eeprom_params(struct e1000_hw *hw);
3152d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
3162d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* MNG HOST IF functions */
317406874a7ccee927049b1c182df69457718b938daJoe Perchesu32 e1000_enable_mng_pass_thru(struct e1000_hw *hw);
3182d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
3192d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_MNG_DHCP_TX_PAYLOAD_CMD   64
320120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_HI_MAX_MNG_DATA_LENGTH    0x6F8	/* Host Interface data length */
3212d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
322120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MNG_DHCP_COMMAND_TIMEOUT  10	/* Time in ms to process MNG command */
323120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MNG_DHCP_COOKIE_OFFSET    0x6F0	/* Cookie offset */
324120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MNG_DHCP_COOKIE_LENGTH    0x10	/* Cookie length */
3258fc897b00a7d81ffaa24e18881c2d6b10698ab0bAuke Kok#define E1000_MNG_IAMT_MODE             0x3
326d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_MNG_ICH_IAMT_MODE         0x2
327120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IAMT_SIGNATURE            0x544D4149	/* Intel(R) Active Management Technology signature */
3282d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
329120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MNG_DHCP_COOKIE_STATUS_PARSING_SUPPORT 0x1	/* DHCP parsing enabled */
330120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT    0x2	/* DHCP parsing enabled */
3312d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_VFTA_ENTRY_SHIFT                       0x5
3322d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_VFTA_ENTRY_MASK                        0x7F
3332d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_VFTA_ENTRY_BIT_SHIFT_MASK              0x1F
3342d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
3352d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakalastruct e1000_host_mng_command_header {
336120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 command_id;
337120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 checksum;
338120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 reserved1;
339120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 reserved2;
340120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 command_length;
3412d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala};
3422d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
3432d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakalastruct e1000_host_mng_command_info {
344120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	struct e1000_host_mng_command_header command_header;	/* Command Head/Command Result Head has 4 bytes */
345120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 command_data[E1000_HI_MAX_MNG_DATA_LENGTH];	/* Command data can length 0..0x658 */
3462d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala};
3472d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#ifdef __BIG_ENDIAN
348120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburgstruct e1000_host_mng_dhcp_cookie {
349120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 signature;
350120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 vlan_id;
351120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 reserved0;
352120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 status;
353120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 reserved1;
354120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 checksum;
355120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 reserved3;
356120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 reserved2;
3572d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala};
3582d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#else
359120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburgstruct e1000_host_mng_dhcp_cookie {
360120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 signature;
361120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 status;
362120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 reserved0;
363120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 vlan_id;
364120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 reserved1;
365120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 reserved2;
366120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 reserved3;
367120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 checksum;
3682d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala};
3692d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#endif
3702d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
371c3033b01d763aff572080db09ddcebed115b9cf5Joe Perchesbool e1000_check_mng_mode(struct e1000_hw *hw);
372120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburgs32 e1000_read_eeprom(struct e1000_hw *hw, u16 reg, u16 words, u16 * data);
373406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_validate_eeprom_checksum(struct e1000_hw *hw);
374406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_update_eeprom_checksum(struct e1000_hw *hw);
375120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburgs32 e1000_write_eeprom(struct e1000_hw *hw, u16 reg, u16 words, u16 * data);
376120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburgs32 e1000_read_mac_addr(struct e1000_hw *hw);
3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Filters (multicast, vlan, receive) */
379406874a7ccee927049b1c182df69457718b938daJoe Perchesu32 e1000_hash_mc_addr(struct e1000_hw *hw, u8 * mc_addr);
380406874a7ccee927049b1c182df69457718b938daJoe Perchesvoid e1000_mta_set(struct e1000_hw *hw, u32 hash_value);
381406874a7ccee927049b1c182df69457718b938daJoe Perchesvoid e1000_rar_set(struct e1000_hw *hw, u8 * mc_addr, u32 rar_index);
382406874a7ccee927049b1c182df69457718b938daJoe Perchesvoid e1000_write_vfta(struct e1000_hw *hw, u32 offset, u32 value);
3831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* LED functions */
385406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_setup_led(struct e1000_hw *hw);
386406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_cleanup_led(struct e1000_hw *hw);
387406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_led_on(struct e1000_hw *hw);
388406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_led_off(struct e1000_hw *hw);
389406874a7ccee927049b1c182df69457718b938daJoe Perchess32 e1000_blink_led_start(struct e1000_hw *hw);
3901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Adaptive IFS Functions */
3921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Everything else */
3941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid e1000_reset_adaptive(struct e1000_hw *hw);
3951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid e1000_update_adaptive(struct e1000_hw *hw);
396120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburgvoid e1000_tbi_adjust_stats(struct e1000_hw *hw, struct e1000_hw_stats *stats,
397120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			    u32 frame_len, u8 * mac_addr);
3981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid e1000_get_bus_info(struct e1000_hw *hw);
3991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid e1000_pci_set_mwi(struct e1000_hw *hw);
4001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid e1000_pci_clear_mwi(struct e1000_hw *hw);
401007755eb86c3953bb8615bd016246fc99056580cPeter Orubavoid e1000_pcix_set_mmrbc(struct e1000_hw *hw, int mmrbc);
402007755eb86c3953bb8615bd016246fc99056580cPeter Orubaint e1000_pcix_get_mmrbc(struct e1000_hw *hw);
4031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Port I/O is only supported on 82544 and newer */
404406874a7ccee927049b1c182df69457718b938daJoe Perchesvoid e1000_io_write(struct e1000_hw *hw, unsigned long port, u32 value);
405d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
406d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_READ_REG_IO(a, reg) \
407d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok    e1000_read_reg_io((a), E1000_##reg)
408d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_WRITE_REG_IO(a, reg, val) \
409d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok    e1000_write_reg_io((a), E1000_##reg, val)
4101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PCI Device IDs */
4121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82542               0x1000
4131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82543GC_FIBER       0x1001
4141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82543GC_COPPER      0x1004
4151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82544EI_COPPER      0x1008
4161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82544EI_FIBER       0x1009
4171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82544GC_COPPER      0x100C
4181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82544GC_LOM         0x100D
4191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82540EM             0x100E
4201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82540EM_LOM         0x1015
4211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82540EP_LOM         0x1016
4221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82540EP             0x1017
4231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82540EP_LP          0x101E
4241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82545EM_COPPER      0x100F
4251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82545EM_FIBER       0x1011
4261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82545GM_COPPER      0x1026
4271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82545GM_FIBER       0x1027
4281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82545GM_SERDES      0x1028
4291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82546EB_COPPER      0x1010
4301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82546EB_FIBER       0x1012
4311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82546EB_QUAD_COPPER 0x101D
4321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82541EI             0x1013
4331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82541EI_MOBILE      0x1018
434d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_DEV_ID_82541ER_LOM         0x1014
4351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82541ER             0x1078
4361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82547GI             0x1075
4371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82541GI             0x1076
4381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82541GI_MOBILE      0x1077
4391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82541GI_LF          0x107C
4401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82546GB_COPPER      0x1079
4411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82546GB_FIBER       0x107A
4421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82546GB_SERDES      0x107B
4431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82546GB_PCIE        0x108A
444b7ee49db8b4b21dad3284d5507e7ea2946031f6eJeff Kirsher#define E1000_DEV_ID_82546GB_QUAD_COPPER 0x1099
4451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_DEV_ID_82547EI             0x1019
446d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_DEV_ID_82547EI_MOBILE      0x101A
447b7ee49db8b4b21dad3284d5507e7ea2946031f6eJeff Kirsher#define E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3 0x10B5
4485377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_DEV_ID_INTEL_CE4100_GBE    0x2E6E
4491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NODE_ADDRESS_SIZE 6
4511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* MAC decode size is 128K - This is the size of BAR0 */
4531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAC_DECODE_SIZE (128 * 1024)
4541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_2_0_REV_ID 2
4561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_2_1_REV_ID 3
4571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_REVISION_0       0
4581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_REVISION_1       1
4591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_REVISION_2       2
4602d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_REVISION_3       3
4611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SPEED_10    10
4631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SPEED_100   100
4641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SPEED_1000  1000
4651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HALF_DUPLEX 1
4661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FULL_DUPLEX 2
4671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* The sizes (in bytes) of a ethernet packet */
4691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ENET_HEADER_SIZE             14
470120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MINIMUM_ETHERNET_FRAME_SIZE  64	/* With FCS */
4711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ETHERNET_FCS_SIZE            4
4721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MINIMUM_ETHERNET_PACKET_SIZE \
4731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    (MINIMUM_ETHERNET_FRAME_SIZE - ETHERNET_FCS_SIZE)
4741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CRC_LENGTH                   ETHERNET_FCS_SIZE
4751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_JUMBO_FRAME_SIZE         0x3F00
4761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 802.1q VLAN Packet Sizes */
478120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define VLAN_TAG_SIZE  4	/* 802.3ac tag (not DMAed) */
4791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Ethertype field values */
481120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define ETHERNET_IEEE_VLAN_TYPE 0x8100	/* 802.3ac packet */
482120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define ETHERNET_IP_TYPE        0x0800	/* IP packets */
483120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define ETHERNET_ARP_TYPE       0x0806	/* Address Resolution Protocol (ARP) */
4841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Packet Header defines */
4861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IP_PROTOCOL_TCP    6
4871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IP_PROTOCOL_UDP    0x11
4881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* This defines the bits that are set in the Interrupt Mask
4901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Set/Read Register.  Each bit is documented below:
4911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   o RXDMT0 = Receive Descriptor Minimum Threshold hit (ring 0)
4921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   o RXSEQ  = Receive Sequence Error
4931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
4941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define POLL_IMS_ENABLE_MASK ( \
4951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    E1000_IMS_RXDMT0 |         \
4961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    E1000_IMS_RXSEQ)
4971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* This defines the bits that are set in the Interrupt Mask
4991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Set/Read Register.  Each bit is documented below:
5001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   o RXT0   = Receiver Timer Interrupt (ring 0)
5011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   o TXDW   = Transmit Descriptor Written Back
5021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   o RXDMT0 = Receive Descriptor Minimum Threshold hit (ring 0)
5031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   o RXSEQ  = Receive Sequence Error
5041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   o LSC    = Link Status Change
5051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
5061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IMS_ENABLE_MASK ( \
5071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    E1000_IMS_RXT0   |    \
5081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    E1000_IMS_TXDW   |    \
5091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    E1000_IMS_RXDMT0 |    \
5101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    E1000_IMS_RXSEQ  |    \
5111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    E1000_IMS_LSC)
5121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Number of high/low register pairs in the RAR. The RAR (Receive Address
5141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Registers) holds the directed and multicast addresses that we monitor. We
5151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * reserve one of these spots for our directed address, allowing us room for
5161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * E1000_RAR_ENTRIES - 1 multicast addresses.
5171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
5181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_RAR_ENTRIES 15
51990fb51358a264f2f7e0cabdca6fc229bbc40cd91Auke Kok
5204f5f2317fbb3655edae21de3ada0f1692523eeefJeff Kirsher#define MIN_NUMBER_OF_DESCRIPTORS  8
5214f5f2317fbb3655edae21de3ada0f1692523eeefJeff Kirsher#define MAX_NUMBER_OF_DESCRIPTORS  0xFFF8
5221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Receive Descriptor */
5241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_rx_desc {
525120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	__le64 buffer_addr;	/* Address of the descriptor's data buffer */
526120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	__le16 length;		/* Length of data DMAed into data buffer */
527120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	__le16 csum;		/* Packet checksum */
528120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 status;		/* Descriptor status */
529120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 errors;		/* Descriptor Errors */
530120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	__le16 special;
5311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
5321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5332d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* Receive Descriptor - Extended */
5342d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakalaunion e1000_rx_desc_extended {
535120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	struct {
536120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		__le64 buffer_addr;
537120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		__le64 reserved;
538120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	} read;
539120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	struct {
540120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		struct {
541120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le32 mrq;	/* Multiple Rx Queues */
542120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			union {
543120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg				__le32 rss;	/* RSS Hash */
544120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg				struct {
545120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					__le16 ip_id;	/* IP id */
546120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					__le16 csum;	/* Packet Checksum */
547120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg				} csum_ip;
548120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			} hi_dword;
549120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		} lower;
550120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		struct {
551120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le32 status_error;	/* ext status/error */
552120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le16 length;
553120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le16 vlan;	/* VLAN tag */
554120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		} upper;
555120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	} wb;			/* writeback */
5562d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala};
5572d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
5582d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define MAX_PS_BUFFERS 4
5592d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* Receive Descriptor - Packet Split */
5602d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakalaunion e1000_rx_desc_packet_split {
561120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	struct {
562120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		/* one buffer for protocol header(s), three data buffers */
563120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		__le64 buffer_addr[MAX_PS_BUFFERS];
564120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	} read;
565120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	struct {
566120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		struct {
567120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le32 mrq;	/* Multiple Rx Queues */
568120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			union {
569120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg				__le32 rss;	/* RSS Hash */
570120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg				struct {
571120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					__le16 ip_id;	/* IP id */
572120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					__le16 csum;	/* Packet Checksum */
573120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg				} csum_ip;
574120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			} hi_dword;
575120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		} lower;
576120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		struct {
577120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le32 status_error;	/* ext status/error */
578120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le16 length0;	/* length of buffer 0 */
579120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le16 vlan;	/* VLAN tag */
580120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		} middle;
581120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		struct {
582120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le16 header_status;
583120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le16 length[3];	/* length of buffers 1-3 */
584120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		} upper;
585120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		__le64 reserved;
586120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	} wb;			/* writeback */
5872d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala};
5882d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
589120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg/* Receive Descriptor bit definitions */
590120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_STAT_DD       0x01	/* Descriptor Done */
591120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_STAT_EOP      0x02	/* End of Packet */
592120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_STAT_IXSM     0x04	/* Ignore checksum */
593120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_STAT_VP       0x08	/* IEEE VLAN Packet */
594120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_STAT_UDPCS    0x10	/* UDP xsum calculated */
595120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_STAT_TCPCS    0x20	/* TCP xsum calculated */
596120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_STAT_IPCS     0x40	/* IP xsum calculated */
597120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_STAT_PIF      0x80	/* passed in-exact filter */
598120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_STAT_IPIDV    0x200	/* IP identification valid */
599120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_STAT_UDPV     0x400	/* Valid UDP checksum */
600120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_STAT_ACK      0x8000	/* ACK Packet indication */
601120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_ERR_CE        0x01	/* CRC Error */
602120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_ERR_SE        0x02	/* Symbol Error */
603120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_ERR_SEQ       0x04	/* Sequence Error */
604120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_ERR_CXE       0x10	/* Carrier Extension Error */
605120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_ERR_TCPE      0x20	/* TCP/UDP Checksum Error */
606120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_ERR_IPE       0x40	/* IP Checksum Error */
607120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_ERR_RXE       0x80	/* Rx Data Error */
608120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_SPC_VLAN_MASK 0x0FFF	/* VLAN ID is in lower 12 bits */
609120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_SPC_PRI_MASK  0xE000	/* Priority is in upper 3 bits */
6102d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RXD_SPC_PRI_SHIFT 13
611120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXD_SPC_CFI_MASK  0x1000	/* CFI is bit 12 */
6122d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RXD_SPC_CFI_SHIFT 12
6132d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
6142d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RXDEXT_STATERR_CE    0x01000000
6152d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RXDEXT_STATERR_SE    0x02000000
6162d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RXDEXT_STATERR_SEQ   0x04000000
6172d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RXDEXT_STATERR_CXE   0x10000000
6182d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RXDEXT_STATERR_TCPE  0x20000000
6192d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RXDEXT_STATERR_IPE   0x40000000
6202d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RXDEXT_STATERR_RXE   0x80000000
6212d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
6222d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RXDPS_HDRSTAT_HDRSP        0x00008000
6232d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RXDPS_HDRSTAT_HDRLEN_MASK  0x000003FF
6241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* mask to determine if packets should be dropped due to frame errors */
6261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_RXD_ERR_FRAME_ERR_MASK ( \
6271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    E1000_RXD_ERR_CE  |                \
6281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    E1000_RXD_ERR_SE  |                \
6291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    E1000_RXD_ERR_SEQ |                \
6301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    E1000_RXD_ERR_CXE |                \
6311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    E1000_RXD_ERR_RXE)
6321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6332d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* Same mask, but for extended and packet split descriptors */
6342d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RXDEXT_ERR_FRAME_ERR_MASK ( \
6352d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala    E1000_RXDEXT_STATERR_CE  |            \
6362d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala    E1000_RXDEXT_STATERR_SE  |            \
6372d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala    E1000_RXDEXT_STATERR_SEQ |            \
6382d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala    E1000_RXDEXT_STATERR_CXE |            \
6392d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala    E1000_RXDEXT_STATERR_RXE)
6402d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
6411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Transmit Descriptor */
6421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_tx_desc {
643120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	__le64 buffer_addr;	/* Address of the descriptor's data buffer */
644120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	union {
645120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		__le32 data;
646120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		struct {
647120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le16 length;	/* Data buffer length */
648120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			u8 cso;	/* Checksum offset */
649120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			u8 cmd;	/* Descriptor control */
650120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		} flags;
651120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	} lower;
652120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	union {
653120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		__le32 data;
654120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		struct {
655120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			u8 status;	/* Descriptor status */
656120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			u8 css;	/* Checksum start */
657120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le16 special;
658120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		} fields;
659120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	} upper;
6601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
6611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Transmit Descriptor bit definitions */
663120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_DTYP_D     0x00100000	/* Data Descriptor */
664120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_DTYP_C     0x00000000	/* Context Descriptor */
665120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_POPTS_IXSM 0x01	/* Insert IP checksum */
666120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_POPTS_TXSM 0x02	/* Insert TCP/UDP checksum */
667120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_CMD_EOP    0x01000000	/* End of Packet */
668120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_CMD_IFCS   0x02000000	/* Insert FCS (Ethernet CRC) */
669120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_CMD_IC     0x04000000	/* Insert Checksum */
670120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_CMD_RS     0x08000000	/* Report Status */
671120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_CMD_RPS    0x10000000	/* Report Packet Sent */
672120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_CMD_DEXT   0x20000000	/* Descriptor extension (0 = legacy) */
673120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_CMD_VLE    0x40000000	/* Add VLAN tag */
674120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_CMD_IDE    0x80000000	/* Enable Tidv register */
675120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_STAT_DD    0x00000001	/* Descriptor Done */
676120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_STAT_EC    0x00000002	/* Excess Collisions */
677120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_STAT_LC    0x00000004	/* Late Collisions */
678120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_STAT_TU    0x00000008	/* Transmit underrun */
679120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_CMD_TCP    0x01000000	/* TCP packet */
680120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_CMD_IP     0x02000000	/* IP packet */
681120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_CMD_TSE    0x04000000	/* TCP Seg enable */
682120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXD_STAT_TC    0x00000004	/* Tx Underrun */
6831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Offload Context Descriptor */
6851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_context_desc {
686120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	union {
687120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		__le32 ip_config;
688120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		struct {
689120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			u8 ipcss;	/* IP checksum start */
690120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			u8 ipcso;	/* IP checksum offset */
691120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le16 ipcse;	/* IP checksum end */
692120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		} ip_fields;
693120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	} lower_setup;
694120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	union {
695120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		__le32 tcp_config;
696120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		struct {
697120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			u8 tucss;	/* TCP checksum start */
698120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			u8 tucso;	/* TCP checksum offset */
699120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le16 tucse;	/* TCP checksum end */
700120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		} tcp_fields;
701120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	} upper_setup;
702120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	__le32 cmd_and_length;	/* */
703120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	union {
704120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		__le32 data;
705120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		struct {
706120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			u8 status;	/* Descriptor status */
707120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			u8 hdr_len;	/* Header length */
708120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le16 mss;	/* Maximum segment size */
709120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		} fields;
710120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	} tcp_seg_setup;
7111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Offload data descriptor */
7141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_data_desc {
715120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	__le64 buffer_addr;	/* Address of the descriptor's buffer address */
716120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	union {
717120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		__le32 data;
718120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		struct {
719120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le16 length;	/* Data buffer length */
720120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			u8 typ_len_ext;	/* */
721120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			u8 cmd;	/* */
722120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		} flags;
723120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	} lower;
724120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	union {
725120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		__le32 data;
726120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		struct {
727120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			u8 status;	/* Descriptor status */
728120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			u8 popts;	/* Packet Options */
729120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg			__le16 special;	/* */
730120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg		} fields;
731120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	} upper;
7321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Filters */
735120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_NUM_UNICAST          16	/* Unicast filter entries */
736120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MC_TBL_SIZE          128	/* Multicast Filter Table (4096 bits) */
737120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_VLAN_FILTER_TBL_SIZE 128	/* VLAN Filter Table (4096 bits) */
7381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Receive Address Register */
7401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_rar {
741120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	volatile __le32 low;	/* receive address low */
742120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	volatile __le32 high;	/* receive address high */
7431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Number of entries in the Multicast Table Array (MTA). */
7461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_NUM_MTA_REGISTERS 128
7471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IPv4 Address Table Entry */
7491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_ipv4_at_entry {
750120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	volatile u32 ipv4_addr;	/* IP Address (RW) */
751120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	volatile u32 reserved;
7521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Four wakeup IP addresses are supported */
7551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_WAKEUP_IP_ADDRESS_COUNT_MAX 4
7561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_IP4AT_SIZE                  E1000_WAKEUP_IP_ADDRESS_COUNT_MAX
7571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_IP6AT_SIZE                  1
7581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IPv6 Address Table Entry */
7601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_ipv6_at_entry {
761120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	volatile u8 ipv6_addr[16];
7621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Flexible Filter Length Table Entry */
7651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_fflt_entry {
766120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	volatile u32 length;	/* Flexible Filter Length (RW) */
767120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	volatile u32 reserved;
7681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Flexible Filter Mask Table Entry */
7711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_ffmt_entry {
772120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	volatile u32 mask;	/* Flexible Filter Mask (RW) */
773120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	volatile u32 reserved;
7741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Flexible Filter Value Table Entry */
7771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_ffvt_entry {
778120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	volatile u32 value;	/* Flexible Filter Value (RW) */
779120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	volatile u32 reserved;
7801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Four Flexible Filters are supported */
7831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_FLEXIBLE_FILTER_COUNT_MAX 4
7841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Each Flexible Filter is at most 128 (0x80) bytes in length */
7861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_FLEXIBLE_FILTER_SIZE_MAX  128
7871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_FFLT_SIZE E1000_FLEXIBLE_FILTER_COUNT_MAX
7891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_FFMT_SIZE E1000_FLEXIBLE_FILTER_SIZE_MAX
7901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_FFVT_SIZE E1000_FLEXIBLE_FILTER_SIZE_MAX
7911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
792868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_DISABLE_SERDES_LOOPBACK   0x0400
793868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala
7941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Register Set. (82543, 82544)
7951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
7961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Registers are defined to be 32 bits and  should be accessed as 32 bit values.
7971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * These registers are physically located on the NIC, but are mapped into the
7981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * host memory address space.
7991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
8001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RW - register is both readable and writable
8011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RO - register is read only
8021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * WO - register is write only
8031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * R/clr - register is read only and is cleared when read
8041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * A - register array
8051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
806120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL     0x00000	/* Device Control - RW */
807120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_DUP 0x00004	/* Device Control Duplicate (Shadow) - RW */
808120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS   0x00008	/* Device Status - RO */
809120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD     0x00010	/* EEPROM/Flash Control - RW */
810120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EERD     0x00014	/* EEPROM Read - RW */
811120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT 0x00018	/* Extended Device Control - RW */
812120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FLA      0x0001C	/* Flash Access - RW */
813120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MDIC     0x00020	/* MDI Control - RW */
8145377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie
81513acde8fffc0afbe8341fe08d2c594243f905c1fFlorian Fainelli#define INTEL_CE_GBE_MDIO_RCOMP_BASE    (hw->ce4100_gbe_mdio_base_virt)
8165377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_MDIO_STS  (INTEL_CE_GBE_MDIO_RCOMP_BASE + 0)
8175377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_MDIO_CMD  (INTEL_CE_GBE_MDIO_RCOMP_BASE + 4)
8185377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_MDIO_DRV  (INTEL_CE_GBE_MDIO_RCOMP_BASE + 8)
8195377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_MDC_CMD   (INTEL_CE_GBE_MDIO_RCOMP_BASE + 0xC)
8205377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_RCOMP_CTL (INTEL_CE_GBE_MDIO_RCOMP_BASE + 0x20)
8215377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_RCOMP_STS (INTEL_CE_GBE_MDIO_RCOMP_BASE + 0x24)
8225377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie
823120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_SCTL     0x00024	/* SerDes Control - RW */
824120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FEXTNVM  0x00028	/* Future Extended NVM register */
825120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FCAL     0x00028	/* Flow Control Address Low - RW */
826120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FCAH     0x0002C	/* Flow Control Address High -RW */
827120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FCT      0x00030	/* Flow Control Type - RW */
828120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_VET      0x00038	/* VLAN Ether Type - RW */
829120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR      0x000C0	/* Interrupt Cause Read - R/clr */
830120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ITR      0x000C4	/* Interrupt Throttling Rate - RW */
831120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS      0x000C8	/* Interrupt Cause Set - WO */
832120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS      0x000D0	/* Interrupt Mask Set - RW */
833120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC      0x000D8	/* Interrupt Mask Clear - WO */
834120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IAM      0x000E0	/* Interrupt Acknowledge Auto Mask */
8355377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie
8365377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie/* Auxiliary Control Register. This register is CE4100 specific,
8375377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie * RMII/RGMII function is switched by this register - RW
8385377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie * Following are bits definitions of the Auxiliary Control Register
8395377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie */
8405377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_CTL_AUX  0x000E0
8415377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_CTL_AUX_END_SEL_SHIFT     10
8425377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_CTL_AUX_ENDIANESS_SHIFT   8
8435377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_CTL_AUX_RGMII_RMII_SHIFT  0
8445377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie
8455377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie/* descriptor and packet transfer use CTL_AUX.ENDIANESS */
8465377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_CTL_AUX_DES_PKT   (0x0 << E1000_CTL_AUX_END_SEL_SHIFT)
8475377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie/* descriptor use CTL_AUX.ENDIANESS, packet use default */
8485377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_CTL_AUX_DES       (0x1 << E1000_CTL_AUX_END_SEL_SHIFT)
8495377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie/* descriptor use default, packet use CTL_AUX.ENDIANESS */
8505377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_CTL_AUX_PKT       (0x2 << E1000_CTL_AUX_END_SEL_SHIFT)
8515377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie/* all use CTL_AUX.ENDIANESS */
8525377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_CTL_AUX_ALL       (0x3 << E1000_CTL_AUX_END_SEL_SHIFT)
8535377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie
8545377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_CTL_AUX_RGMII     (0x0 << E1000_CTL_AUX_RGMII_RMII_SHIFT)
8555377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_CTL_AUX_RMII      (0x1 << E1000_CTL_AUX_RGMII_RMII_SHIFT)
8565377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie
8575377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie/* LW little endian, Byte big endian */
8585377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_CTL_AUX_LWLE_BBE  (0x0 << E1000_CTL_AUX_ENDIANESS_SHIFT)
8595377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_CTL_AUX_LWLE_BLE  (0x1 << E1000_CTL_AUX_ENDIANESS_SHIFT)
8605377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_CTL_AUX_LWBE_BBE  (0x2 << E1000_CTL_AUX_ENDIANESS_SHIFT)
8615377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_CTL_AUX_LWBE_BLE  (0x3 << E1000_CTL_AUX_ENDIANESS_SHIFT)
8625377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie
863120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL     0x00100	/* RX Control - RW */
864120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDTR1    0x02820	/* RX Delay Timer (1) - RW */
865120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDBAL1   0x02900	/* RX Descriptor Base Address Low (1) - RW */
866120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDBAH1   0x02904	/* RX Descriptor Base Address High (1) - RW */
867120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDLEN1   0x02908	/* RX Descriptor Length (1) - RW */
868120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDH1     0x02910	/* RX Descriptor Head (1) - RW */
869120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDT1     0x02918	/* RX Descriptor Tail (1) - RW */
870120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FCTTV    0x00170	/* Flow Control Transmit Timer Value - RW */
871120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXCW     0x00178	/* TX Configuration Word - RW */
872120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXCW     0x00180	/* RX Configuration Word - RO */
873120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TCTL     0x00400	/* TX Control - RW */
874120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TCTL_EXT 0x00404	/* Extended TX Control - RW */
875120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TIPG     0x00410	/* TX Inter-packet gap -RW */
876120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TBT      0x00448	/* TX Burst Timer - RW */
877120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_AIT      0x00458	/* Adaptive Interframe Spacing Throttle - RW */
878120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_LEDCTL   0x00E00	/* LED Control - RW */
879120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EXTCNF_CTRL  0x00F00	/* Extended Configuration Control */
880120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EXTCNF_SIZE  0x00F08	/* Extended Configuration Size */
881120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PHY_CTRL     0x00F10	/* PHY Control Register in CSR */
882d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define FEXTNVM_SW_CONFIG  0x0001
883120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PBA      0x01000	/* Packet Buffer Allocation - RW */
884120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PBS      0x01008	/* Packet Buffer Size */
885120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EEMNGCTL 0x01010	/* MNG EEprom Control */
8862d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FLASH_UPDATES 1000
887120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EEARBC   0x01024	/* EEPROM Auto Read Bus Control */
888120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FLASHT   0x01028	/* FLASH Timer Register */
889120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EEWR     0x0102C	/* EEPROM Write Register - RW */
890120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FLSWCTL  0x01030	/* FLASH control register */
891120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FLSWDATA 0x01034	/* FLASH data register */
892120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FLSWCNT  0x01038	/* FLASH Access Counter */
893120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FLOP     0x0103C	/* FLASH Opcode Register */
894120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ERT      0x02008	/* Early Rx Threshold - RW */
895120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FCRTL    0x02160	/* Flow Control Receive Threshold Low - RW */
896120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FCRTH    0x02168	/* Flow Control Receive Threshold High - RW */
897120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PSRCTL   0x02170	/* Packet Split Receive Control - RW */
898b04e36bac5075ceeacf11b639fbf0cb69aa68996Tushar Dave#define E1000_RDFH     0x02410  /* RX Data FIFO Head - RW */
899b04e36bac5075ceeacf11b639fbf0cb69aa68996Tushar Dave#define E1000_RDFT     0x02418  /* RX Data FIFO Tail - RW */
900b04e36bac5075ceeacf11b639fbf0cb69aa68996Tushar Dave#define E1000_RDFHS    0x02420  /* RX Data FIFO Head Saved - RW */
901b04e36bac5075ceeacf11b639fbf0cb69aa68996Tushar Dave#define E1000_RDFTS    0x02428  /* RX Data FIFO Tail Saved - RW */
902b04e36bac5075ceeacf11b639fbf0cb69aa68996Tushar Dave#define E1000_RDFPC    0x02430  /* RX Data FIFO Packet Count - RW */
903120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDBAL    0x02800	/* RX Descriptor Base Address Low - RW */
904120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDBAH    0x02804	/* RX Descriptor Base Address High - RW */
905120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDLEN    0x02808	/* RX Descriptor Length - RW */
906120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDH      0x02810	/* RX Descriptor Head - RW */
907120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDT      0x02818	/* RX Descriptor Tail - RW */
908120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDTR     0x02820	/* RX Delay Timer - RW */
909120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDBAL0   E1000_RDBAL	/* RX Desc Base Address Low (0) - RW */
910120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDBAH0   E1000_RDBAH	/* RX Desc Base Address High (0) - RW */
911120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDLEN0   E1000_RDLEN	/* RX Desc Length (0) - RW */
912120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDH0     E1000_RDH	/* RX Desc Head (0) - RW */
913120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDT0     E1000_RDT	/* RX Desc Tail (0) - RW */
914120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDTR0    E1000_RDTR	/* RX Delay Timer (0) - RW */
915120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXDCTL   0x02828	/* RX Descriptor Control queue 0 - RW */
916120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXDCTL1  0x02928	/* RX Descriptor Control queue 1 - RW */
917120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RADV     0x0282C	/* RX Interrupt Absolute Delay Timer - RW */
918120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RSRPD    0x02C00	/* RX Small Packet Detect - RW */
919120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RAID     0x02C08	/* Receive Ack Interrupt Delay - RW */
920120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXDMAC   0x03000	/* TX DMA Control - RW */
921120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_KABGTXD  0x03004	/* AFE Band Gap Transmit Ref Data */
922120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TDFH     0x03410	/* TX Data FIFO Head - RW */
923120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TDFT     0x03418	/* TX Data FIFO Tail - RW */
924120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TDFHS    0x03420	/* TX Data FIFO Head Saved - RW */
925120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TDFTS    0x03428	/* TX Data FIFO Tail Saved - RW */
926120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TDFPC    0x03430	/* TX Data FIFO Packet Count - RW */
927120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TDBAL    0x03800	/* TX Descriptor Base Address Low - RW */
928120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TDBAH    0x03804	/* TX Descriptor Base Address High - RW */
929120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TDLEN    0x03808	/* TX Descriptor Length - RW */
930120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TDH      0x03810	/* TX Descriptor Head - RW */
931120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TDT      0x03818	/* TX Descripotr Tail - RW */
932120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TIDV     0x03820	/* TX Interrupt Delay Value - RW */
933120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXDCTL   0x03828	/* TX Descriptor Control - RW */
934120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TADV     0x0382C	/* TX Interrupt Absolute Delay Val - RW */
935120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TSPMT    0x03830	/* TCP Segmentation PAD & Min Threshold - RW */
936120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TARC0    0x03840	/* TX Arbitration Count (0) */
937120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TDBAL1   0x03900	/* TX Desc Base Address Low (1) - RW */
938120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TDBAH1   0x03904	/* TX Desc Base Address High (1) - RW */
939120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TDLEN1   0x03908	/* TX Desc Length (1) - RW */
940120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TDH1     0x03910	/* TX Desc Head (1) - RW */
941120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TDT1     0x03918	/* TX Desc Tail (1) - RW */
942120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXDCTL1  0x03928	/* TX Descriptor Control (1) - RW */
943120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TARC1    0x03940	/* TX Arbitration Count (1) */
944120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CRCERRS  0x04000	/* CRC Error Count - R/clr */
945120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ALGNERRC 0x04004	/* Alignment Error Count - R/clr */
946120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_SYMERRS  0x04008	/* Symbol Error Count - R/clr */
947120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXERRC   0x0400C	/* Receive Error Count - R/clr */
948120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MPC      0x04010	/* Missed Packet Count - R/clr */
949120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_SCC      0x04014	/* Single Collision Count - R/clr */
950120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ECOL     0x04018	/* Excessive Collision Count - R/clr */
951120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MCC      0x0401C	/* Multiple Collision Count - R/clr */
952120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_LATECOL  0x04020	/* Late Collision Count - R/clr */
953120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_COLC     0x04028	/* Collision Count - R/clr */
954120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_DC       0x04030	/* Defer Count - R/clr */
955120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TNCRS    0x04034	/* TX-No CRS - R/clr */
956120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_SEC      0x04038	/* Sequence Error Count - R/clr */
957120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CEXTERR  0x0403C	/* Carrier Extension Error Count - R/clr */
958120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RLEC     0x04040	/* Receive Length Error Count - R/clr */
959120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_XONRXC   0x04048	/* XON RX Count - R/clr */
960120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_XONTXC   0x0404C	/* XON TX Count - R/clr */
961120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_XOFFRXC  0x04050	/* XOFF RX Count - R/clr */
962120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_XOFFTXC  0x04054	/* XOFF TX Count - R/clr */
963120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FCRUC    0x04058	/* Flow Control RX Unsupported Count- R/clr */
964120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PRC64    0x0405C	/* Packets RX (64 bytes) - R/clr */
965120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PRC127   0x04060	/* Packets RX (65-127 bytes) - R/clr */
966120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PRC255   0x04064	/* Packets RX (128-255 bytes) - R/clr */
967120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PRC511   0x04068	/* Packets RX (255-511 bytes) - R/clr */
968120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PRC1023  0x0406C	/* Packets RX (512-1023 bytes) - R/clr */
969120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PRC1522  0x04070	/* Packets RX (1024-1522 bytes) - R/clr */
970120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_GPRC     0x04074	/* Good Packets RX Count - R/clr */
971120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_BPRC     0x04078	/* Broadcast Packets RX Count - R/clr */
972120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MPRC     0x0407C	/* Multicast Packets RX Count - R/clr */
973120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_GPTC     0x04080	/* Good Packets TX Count - R/clr */
974120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_GORCL    0x04088	/* Good Octets RX Count Low - R/clr */
975120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_GORCH    0x0408C	/* Good Octets RX Count High - R/clr */
976120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_GOTCL    0x04090	/* Good Octets TX Count Low - R/clr */
977120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_GOTCH    0x04094	/* Good Octets TX Count High - R/clr */
978120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RNBC     0x040A0	/* RX No Buffers Count - R/clr */
979120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RUC      0x040A4	/* RX Undersize Count - R/clr */
980120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RFC      0x040A8	/* RX Fragment Count - R/clr */
981120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ROC      0x040AC	/* RX Oversize Count - R/clr */
982120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RJC      0x040B0	/* RX Jabber Count - R/clr */
983120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MGTPRC   0x040B4	/* Management Packets RX Count - R/clr */
984120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MGTPDC   0x040B8	/* Management Packets Dropped Count - R/clr */
985120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MGTPTC   0x040BC	/* Management Packets TX Count - R/clr */
986120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TORL     0x040C0	/* Total Octets RX Low - R/clr */
987120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TORH     0x040C4	/* Total Octets RX High - R/clr */
988120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TOTL     0x040C8	/* Total Octets TX Low - R/clr */
989120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TOTH     0x040CC	/* Total Octets TX High - R/clr */
990120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TPR      0x040D0	/* Total Packets RX - R/clr */
991120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TPT      0x040D4	/* Total Packets TX - R/clr */
992120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PTC64    0x040D8	/* Packets TX (64 bytes) - R/clr */
993120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PTC127   0x040DC	/* Packets TX (65-127 bytes) - R/clr */
994120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PTC255   0x040E0	/* Packets TX (128-255 bytes) - R/clr */
995120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PTC511   0x040E4	/* Packets TX (256-511 bytes) - R/clr */
996120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PTC1023  0x040E8	/* Packets TX (512-1023 bytes) - R/clr */
997120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PTC1522  0x040EC	/* Packets TX (1024-1522 Bytes) - R/clr */
998120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MPTC     0x040F0	/* Multicast Packets TX Count - R/clr */
999120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_BPTC     0x040F4	/* Broadcast Packets TX Count - R/clr */
1000120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TSCTC    0x040F8	/* TCP Segmentation Context TX - R/clr */
1001120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TSCTFC   0x040FC	/* TCP Segmentation Context TX Fail - R/clr */
1002120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IAC      0x04100	/* Interrupt Assertion Count */
1003120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICRXPTC  0x04104	/* Interrupt Cause Rx Packet Timer Expire Count */
1004120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICRXATC  0x04108	/* Interrupt Cause Rx Absolute Timer Expire Count */
1005120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICTXPTC  0x0410C	/* Interrupt Cause Tx Packet Timer Expire Count */
1006120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICTXATC  0x04110	/* Interrupt Cause Tx Absolute Timer Expire Count */
1007120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICTXQEC  0x04118	/* Interrupt Cause Tx Queue Empty Count */
1008120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICTXQMTC 0x0411C	/* Interrupt Cause Tx Queue Minimum Threshold Count */
1009120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICRXDMTC 0x04120	/* Interrupt Cause Rx Descriptor Minimum Threshold Count */
1010120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICRXOC   0x04124	/* Interrupt Cause Receiver Overrun Count */
1011120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXCSUM   0x05000	/* RX Checksum Control - RW */
1012120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RFCTL    0x05008	/* Receive Filter Control */
1013120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MTA      0x05200	/* Multicast Table Array - RW Array */
1014120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RA       0x05400	/* Receive Address - RW Array */
1015120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_VFTA     0x05600	/* VLAN Filter Table Array - RW Array */
1016120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUC      0x05800	/* Wakeup Control - RW */
1017120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC     0x05808	/* Wakeup Filter Control - RW */
1018120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUS      0x05810	/* Wakeup Status - RO */
1019120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC     0x05820	/* Management Control - RW */
1020120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IPAV     0x05838	/* IP Address Valid - RW */
1021120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IP4AT    0x05840	/* IPv4 Address Table - RW Array */
1022120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IP6AT    0x05880	/* IPv6 Address Table - RW Array */
1023120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUPL     0x05900	/* Wakeup Packet Length - RW */
1024120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUPM     0x05A00	/* Wakeup Packet Memory - RO A */
1025120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FFLT     0x05F00	/* Flexible Filter Length Table - RW Array */
1026120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_HOST_IF  0x08800	/* Host Interface */
1027120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FFMT     0x09000	/* Flexible Filter Mask Table - RW Array */
1028120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FFVT     0x09800	/* Flexible Filter Value Table - RW Array */
1029120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg
1030120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_KUMCTRLSTA 0x00034	/* MAC-PHY interface - RW */
1031120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MDPHYA     0x0003C	/* PHY address - RW */
103225985edcedea6396277003854657b5f3cb31a628Lucas De Marchi#define E1000_MANC2H     0x05860	/* Management Control To Host - RW */
1033120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_SW_FW_SYNC 0x05B5C	/* Software-Firmware Synchronization - RW */
1034120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg
1035120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_GCR       0x05B00	/* PCI-Ex Control */
1036120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_GSCL_1    0x05B10	/* PCI-Ex Statistic Control #1 */
1037120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_GSCL_2    0x05B14	/* PCI-Ex Statistic Control #2 */
1038120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_GSCL_3    0x05B18	/* PCI-Ex Statistic Control #3 */
1039120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_GSCL_4    0x05B1C	/* PCI-Ex Statistic Control #4 */
1040120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FACTPS    0x05B30	/* Function Active and Power State to MNG */
1041120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_SWSM      0x05B50	/* SW Semaphore */
1042120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FWSM      0x05B54	/* FW Semaphore */
1043120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FFLT_DBG  0x05F04	/* Debug Register */
1044120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_HICR      0x08F00	/* Host Interface Control */
1045868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala
1046868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala/* RSS registers */
1047120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CPUVEC    0x02C10	/* CPU Vector Register - RW */
1048120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MRQC      0x05818	/* Multiple Receive Control - RW */
1049120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RETA      0x05C00	/* Redirection Table - RW Array */
1050120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RSSRK     0x05C80	/* RSS Random Key - RW Array */
1051120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RSSIM     0x05864	/* RSS Interrupt Mask */
1052120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RSSIR     0x05868	/* RSS Interrupt Request */
10531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Register Set (82542)
10541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
10551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Some of the 82542 registers are located at different offsets than they are
10561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * in more current versions of the 8254x. Despite the difference in location,
10571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the registers function in the same manner.
10581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
10595377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define E1000_82542_CTL_AUX  E1000_CTL_AUX
10601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_CTRL     E1000_CTRL
10611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_CTRL_DUP E1000_CTRL_DUP
10621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_STATUS   E1000_STATUS
10631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_EECD     E1000_EECD
10641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_EERD     E1000_EERD
10651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_CTRL_EXT E1000_CTRL_EXT
10661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_FLA      E1000_FLA
10671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_MDIC     E1000_MDIC
1068868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_SCTL     E1000_SCTL
1069d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_82542_FEXTNVM  E1000_FEXTNVM
10701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_FCAL     E1000_FCAL
10711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_FCAH     E1000_FCAH
10721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_FCT      E1000_FCT
10731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_VET      E1000_VET
10741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RA       0x00040
10751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_ICR      E1000_ICR
10761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_ITR      E1000_ITR
10771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_ICS      E1000_ICS
10781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_IMS      E1000_IMS
10791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_IMC      E1000_IMC
10801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RCTL     E1000_RCTL
10811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RDTR     0x00108
1082b04e36bac5075ceeacf11b639fbf0cb69aa68996Tushar Dave#define E1000_82542_RDFH     E1000_RDFH
1083b04e36bac5075ceeacf11b639fbf0cb69aa68996Tushar Dave#define E1000_82542_RDFT     E1000_RDFT
1084b04e36bac5075ceeacf11b639fbf0cb69aa68996Tushar Dave#define E1000_82542_RDFHS    E1000_RDFHS
1085b04e36bac5075ceeacf11b639fbf0cb69aa68996Tushar Dave#define E1000_82542_RDFTS    E1000_RDFTS
1086b04e36bac5075ceeacf11b639fbf0cb69aa68996Tushar Dave#define E1000_82542_RDFPC    E1000_RDFPC
10871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RDBAL    0x00110
10881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RDBAH    0x00114
10891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RDLEN    0x00118
10901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RDH      0x00120
10911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RDT      0x00128
1092868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RDTR0    E1000_82542_RDTR
1093868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RDBAL0   E1000_82542_RDBAL
1094868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RDBAH0   E1000_82542_RDBAH
1095868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RDLEN0   E1000_82542_RDLEN
1096868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RDH0     E1000_82542_RDH
1097868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RDT0     E1000_82542_RDT
1098120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_82542_SRRCTL(_n) (0x280C + ((_n) << 8))	/* Split and Replication
1099120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg							 * RX Control - RW */
1100d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_82542_DCA_RXCTRL(_n) (0x02814 + ((_n) << 8))
1101120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_82542_RDBAH3   0x02B04	/* RX Desc Base High Queue 3 - RW */
1102120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_82542_RDBAL3   0x02B00	/* RX Desc Low Queue 3 - RW */
1103120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_82542_RDLEN3   0x02B08	/* RX Desc Length Queue 3 - RW */
1104120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_82542_RDH3     0x02B10	/* RX Desc Head Queue 3 - RW */
1105120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_82542_RDT3     0x02B18	/* RX Desc Tail Queue 3 - RW */
1106120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_82542_RDBAL2   0x02A00	/* RX Desc Base Low Queue 2 - RW */
1107120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_82542_RDBAH2   0x02A04	/* RX Desc Base High Queue 2 - RW */
1108120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_82542_RDLEN2   0x02A08	/* RX Desc Length Queue 2 - RW */
1109120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_82542_RDH2     0x02A10	/* RX Desc Head Queue 2 - RW */
1110120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_82542_RDT2     0x02A18	/* RX Desc Tail Queue 2 - RW */
1111868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RDTR1    0x00130
1112868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RDBAL1   0x00138
1113868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RDBAH1   0x0013C
1114868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RDLEN1   0x00140
1115868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RDH1     0x00148
1116868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RDT1     0x00150
11171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_FCRTH    0x00160
11181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_FCRTL    0x00168
11191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_FCTTV    E1000_FCTTV
11201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TXCW     E1000_TXCW
11211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RXCW     E1000_RXCW
11221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_MTA      0x00200
11231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TCTL     E1000_TCTL
11246418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_82542_TCTL_EXT E1000_TCTL_EXT
11251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TIPG     E1000_TIPG
11261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TDBAL    0x00420
11271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TDBAH    0x00424
11281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TDLEN    0x00428
11291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TDH      0x00430
11301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TDT      0x00438
11311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TIDV     0x00440
11321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TBT      E1000_TBT
11331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_AIT      E1000_AIT
11341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_VFTA     0x00600
11351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_LEDCTL   E1000_LEDCTL
11361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_PBA      E1000_PBA
11372d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_PBS      E1000_PBS
11382d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_EEMNGCTL E1000_EEMNGCTL
11392d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_EEARBC   E1000_EEARBC
11402d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_FLASHT   E1000_FLASHT
11412d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_EEWR     E1000_EEWR
11422d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_FLSWCTL  E1000_FLSWCTL
11432d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_FLSWDATA E1000_FLSWDATA
11442d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_FLSWCNT  E1000_FLSWCNT
11452d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_FLOP     E1000_FLOP
11462d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_EXTCNF_CTRL  E1000_EXTCNF_CTRL
11472d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_EXTCNF_SIZE  E1000_EXTCNF_SIZE
1148d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_82542_PHY_CTRL E1000_PHY_CTRL
11492d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_ERT      E1000_ERT
11501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RXDCTL   E1000_RXDCTL
1151d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_82542_RXDCTL1  E1000_RXDCTL1
11521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RADV     E1000_RADV
11531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RSRPD    E1000_RSRPD
11541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TXDMAC   E1000_TXDMAC
1155d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_82542_KABGTXD  E1000_KABGTXD
11561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TDFHS    E1000_TDFHS
11571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TDFTS    E1000_TDFTS
11581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TDFPC    E1000_TDFPC
11591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TXDCTL   E1000_TXDCTL
11601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TADV     E1000_TADV
11611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TSPMT    E1000_TSPMT
11621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_CRCERRS  E1000_CRCERRS
11631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_ALGNERRC E1000_ALGNERRC
11641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_SYMERRS  E1000_SYMERRS
11651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RXERRC   E1000_RXERRC
11661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_MPC      E1000_MPC
11671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_SCC      E1000_SCC
11681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_ECOL     E1000_ECOL
11691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_MCC      E1000_MCC
11701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_LATECOL  E1000_LATECOL
11711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_COLC     E1000_COLC
11721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_DC       E1000_DC
11731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TNCRS    E1000_TNCRS
11741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_SEC      E1000_SEC
11751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_CEXTERR  E1000_CEXTERR
11761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RLEC     E1000_RLEC
11771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_XONRXC   E1000_XONRXC
11781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_XONTXC   E1000_XONTXC
11791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_XOFFRXC  E1000_XOFFRXC
11801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_XOFFTXC  E1000_XOFFTXC
11811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_FCRUC    E1000_FCRUC
11821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_PRC64    E1000_PRC64
11831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_PRC127   E1000_PRC127
11841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_PRC255   E1000_PRC255
11851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_PRC511   E1000_PRC511
11861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_PRC1023  E1000_PRC1023
11871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_PRC1522  E1000_PRC1522
11881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_GPRC     E1000_GPRC
11891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_BPRC     E1000_BPRC
11901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_MPRC     E1000_MPRC
11911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_GPTC     E1000_GPTC
11921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_GORCL    E1000_GORCL
11931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_GORCH    E1000_GORCH
11941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_GOTCL    E1000_GOTCL
11951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_GOTCH    E1000_GOTCH
11961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RNBC     E1000_RNBC
11971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RUC      E1000_RUC
11981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RFC      E1000_RFC
11991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_ROC      E1000_ROC
12001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RJC      E1000_RJC
12011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_MGTPRC   E1000_MGTPRC
12021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_MGTPDC   E1000_MGTPDC
12031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_MGTPTC   E1000_MGTPTC
12041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TORL     E1000_TORL
12051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TORH     E1000_TORH
12061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TOTL     E1000_TOTL
12071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TOTH     E1000_TOTH
12081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TPR      E1000_TPR
12091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TPT      E1000_TPT
12101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_PTC64    E1000_PTC64
12111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_PTC127   E1000_PTC127
12121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_PTC255   E1000_PTC255
12131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_PTC511   E1000_PTC511
12141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_PTC1023  E1000_PTC1023
12151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_PTC1522  E1000_PTC1522
12161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_MPTC     E1000_MPTC
12171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_BPTC     E1000_BPTC
12181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TSCTC    E1000_TSCTC
12191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TSCTFC   E1000_TSCTFC
12201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_RXCSUM   E1000_RXCSUM
12211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_WUC      E1000_WUC
12221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_WUFC     E1000_WUFC
12231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_WUS      E1000_WUS
12241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_MANC     E1000_MANC
12251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_IPAV     E1000_IPAV
12261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_IP4AT    E1000_IP4AT
12271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_IP6AT    E1000_IP6AT
12281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_WUPL     E1000_WUPL
12291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_WUPM     E1000_WUPM
12301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_FFLT     E1000_FFLT
12311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TDFH     0x08010
12321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_TDFT     0x08018
12331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_FFMT     E1000_FFMT
12341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_FFVT     E1000_FFVT
12351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_82542_HOST_IF  E1000_HOST_IF
12362d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_IAM         E1000_IAM
12372d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_EEMNGCTL    E1000_EEMNGCTL
12382d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_PSRCTL      E1000_PSRCTL
12392d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_RAID        E1000_RAID
12402d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_TARC0       E1000_TARC0
12412d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_TDBAL1      E1000_TDBAL1
12422d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_TDBAH1      E1000_TDBAH1
12432d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_TDLEN1      E1000_TDLEN1
12442d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_TDH1        E1000_TDH1
12452d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_TDT1        E1000_TDT1
12462d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_TXDCTL1     E1000_TXDCTL1
12472d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_TARC1       E1000_TARC1
12482d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_RFCTL       E1000_RFCTL
12492d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_GCR         E1000_GCR
12502d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_GSCL_1      E1000_GSCL_1
12512d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_GSCL_2      E1000_GSCL_2
12522d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_GSCL_3      E1000_GSCL_3
12532d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_GSCL_4      E1000_GSCL_4
12542d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_FACTPS      E1000_FACTPS
12552d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_SWSM        E1000_SWSM
12562d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_FWSM        E1000_FWSM
12572d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_FFLT_DBG    E1000_FFLT_DBG
12582d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_IAC         E1000_IAC
12592d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_ICRXPTC     E1000_ICRXPTC
12602d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_ICRXATC     E1000_ICRXATC
12612d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_ICTXPTC     E1000_ICTXPTC
12622d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_ICTXATC     E1000_ICTXATC
12632d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_ICTXQEC     E1000_ICTXQEC
12642d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_ICTXQMTC    E1000_ICTXQMTC
12652d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_ICRXDMTC    E1000_ICRXDMTC
12662d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_ICRXOC      E1000_ICRXOC
12672d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_82542_HICR        E1000_HICR
12681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1269868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_CPUVEC      E1000_CPUVEC
1270868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_MRQC        E1000_MRQC
1271868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RETA        E1000_RETA
1272868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RSSRK       E1000_RSSRK
1273868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RSSIM       E1000_RSSIM
1274868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_82542_RSSIR       E1000_RSSIR
12756418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_82542_KUMCTRLSTA E1000_KUMCTRLSTA
12766418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_82542_SW_FW_SYNC E1000_SW_FW_SYNC
1277868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala
12781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Statistics counters collected by the MAC */
12791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_hw_stats {
1280120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 crcerrs;
1281120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 algnerrc;
1282120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 symerrs;
1283120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 rxerrc;
1284120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 txerrc;
1285120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 mpc;
1286120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 scc;
1287120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 ecol;
1288120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 mcc;
1289120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 latecol;
1290120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 colc;
1291120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 dc;
1292120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 tncrs;
1293120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 sec;
1294120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 cexterr;
1295120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 rlec;
1296120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 xonrxc;
1297120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 xontxc;
1298120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 xoffrxc;
1299120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 xofftxc;
1300120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 fcruc;
1301120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 prc64;
1302120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 prc127;
1303120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 prc255;
1304120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 prc511;
1305120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 prc1023;
1306120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 prc1522;
1307120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 gprc;
1308120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 bprc;
1309120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 mprc;
1310120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 gptc;
1311120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 gorcl;
1312120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 gorch;
1313120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 gotcl;
1314120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 gotch;
1315120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 rnbc;
1316120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 ruc;
1317120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 rfc;
1318120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 roc;
1319120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 rlerrc;
1320120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 rjc;
1321120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 mgprc;
1322120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 mgpdc;
1323120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 mgptc;
1324120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 torl;
1325120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 torh;
1326120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 totl;
1327120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 toth;
1328120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 tpr;
1329120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 tpt;
1330120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 ptc64;
1331120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 ptc127;
1332120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 ptc255;
1333120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 ptc511;
1334120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 ptc1023;
1335120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 ptc1522;
1336120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 mptc;
1337120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 bptc;
1338120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 tsctc;
1339120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 tsctfc;
1340120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 iac;
1341120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 icrxptc;
1342120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 icrxatc;
1343120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 ictxptc;
1344120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 ictxatc;
1345120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 ictxqec;
1346120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 ictxqmtc;
1347120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 icrxdmtc;
1348120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u64 icrxoc;
13491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
13501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
13511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Structure containing variables used by the shared code (e1000_hw.c) */
13521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct e1000_hw {
1353120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 __iomem *hw_addr;
1354120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 __iomem *flash_address;
135513acde8fffc0afbe8341fe08d2c594243f905c1fFlorian Fainelli	void __iomem *ce4100_gbe_mdio_base_virt;
1356120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_mac_type mac_type;
1357120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_phy_type phy_type;
1358120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 phy_init_script;
1359120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_media_type media_type;
1360120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	void *back;
1361120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	struct e1000_shadow_ram *eeprom_shadow_ram;
1362120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 flash_bank_size;
1363120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 flash_base_addr;
1364120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_fc_type fc;
1365120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_speed bus_speed;
1366120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_width bus_width;
1367120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_bus_type bus_type;
1368bd2371ebcc71d0a276ae341d735326a8beab6627Jeff Garzik	struct e1000_eeprom_info eeprom;
1369120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_ms_type master_slave;
1370120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_ms_type original_master_slave;
1371120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_ffe_config ffe_config_state;
1372120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 asf_firmware_present;
1373120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 eeprom_semaphore_present;
1374120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	unsigned long io_base;
1375120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 phy_id;
1376120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 phy_revision;
1377120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 phy_addr;
1378120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 original_fc;
1379120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 txcw;
1380120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 autoneg_failed;
1381120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 max_frame_size;
1382120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 min_frame_size;
1383120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 mc_filter_type;
1384120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 num_mc_addrs;
1385120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 collision_delta;
1386120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 tx_packet_delta;
1387120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 ledctl_default;
1388120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 ledctl_mode1;
1389120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u32 ledctl_mode2;
1390120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool tx_pkt_filtering;
1391bd2371ebcc71d0a276ae341d735326a8beab6627Jeff Garzik	struct e1000_host_mng_dhcp_cookie mng_cookie;
1392120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 phy_spd_default;
1393120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 autoneg_advertised;
1394120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 pci_cmd_word;
1395120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 fc_high_water;
1396120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 fc_low_water;
1397120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 fc_pause_time;
1398120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 current_ifs_val;
1399120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 ifs_min_val;
1400120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 ifs_max_val;
1401120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 ifs_step_size;
1402120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 ifs_ratio;
1403120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 device_id;
1404120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 vendor_id;
1405120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 subsystem_id;
1406120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u16 subsystem_vendor_id;
1407120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 revision_id;
1408120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 autoneg;
1409120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 mdix;
1410120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 forced_speed_duplex;
1411120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 wait_autoneg_complete;
1412120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 dma_fairness;
1413120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 mac_addr[NODE_ADDRESS_SIZE];
1414120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 perm_mac_addr[NODE_ADDRESS_SIZE];
1415120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool disable_polarity_correction;
1416120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool speed_downgraded;
1417120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_smart_speed smart_speed;
1418120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_dsp_config dsp_config_state;
1419120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool get_link_status;
1420120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool serdes_has_link;
1421120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool tbi_compatibility_en;
1422120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool tbi_compatibility_on;
1423120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool laa_is_present;
1424120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool phy_reset_disable;
1425120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool initialize_hw_bits_disable;
1426120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool fc_send_xon;
1427120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool fc_strict_ieee;
1428120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool report_tx_early;
1429120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool adaptive_ifs;
1430120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool ifs_params_forced;
1431120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool in_ifs_mode;
1432120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool mng_reg_access_disabled;
1433120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool leave_av_bit_off;
1434120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool bad_tx_carr_stats_fd;
1435120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	bool has_smbus;
14361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
14371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1438120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EEPROM_SWDPIN0   0x0001	/* SWDPIN 0 EEPROM Value */
1439120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EEPROM_LED_LOGIC 0x0020	/* Led Logic Word */
1440120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EEPROM_RW_REG_DATA   16	/* Offset to data in EEPROM read/write registers */
1441120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EEPROM_RW_REG_DONE   2	/* Offset to READ/WRITE done bit */
1442120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EEPROM_RW_REG_START  1	/* First bit for telling part to start operation */
1443120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EEPROM_RW_ADDR_SHIFT 2	/* Shift to the address bits */
1444120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EEPROM_POLL_WRITE    1	/* Flag for polling for write complete */
1445120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EEPROM_POLL_READ     0	/* Flag for polling for read complete */
14461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Register Bit Masks */
14471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Device Control */
1448120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_FD       0x00000001	/* Full duplex.0=half; 1=full */
1449120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_BEM      0x00000002	/* Endian Mode.0=little,1=big */
1450120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_PRIOR    0x00000004	/* Priority on PCI. 0=rx,1=fair */
1451120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_GIO_MASTER_DISABLE 0x00000004	/*Blocks new Master requests */
1452120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_LRST     0x00000008	/* Link reset. 0=normal,1=reset */
1453120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_TME      0x00000010	/* Test mode. 0=normal,1=test */
1454120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_SLE      0x00000020	/* Serial Link on 0=dis,1=en */
1455120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_ASDE     0x00000020	/* Auto-speed detect enable */
1456120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_SLU      0x00000040	/* Set link up (Force Link) */
1457120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_ILOS     0x00000080	/* Invert Loss-Of Signal */
1458120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_SPD_SEL  0x00000300	/* Speed Select Mask */
1459120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_SPD_10   0x00000000	/* Force 10Mb */
1460120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_SPD_100  0x00000100	/* Force 100Mb */
1461120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_SPD_1000 0x00000200	/* Force 1Gb */
1462120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_BEM32    0x00000400	/* Big Endian 32 mode */
1463120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_FRCSPD   0x00000800	/* Force Speed */
1464120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_FRCDPX   0x00001000	/* Force Duplex */
1465120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_D_UD_EN  0x00002000	/* Dock/Undock enable */
1466120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_D_UD_POLARITY 0x00004000	/* Defined polarity of Dock/Undock indication in SDP[0] */
1467120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_FORCE_PHY_RESET 0x00008000	/* Reset both PHY ports, through PHYRST_N pin */
1468120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_LINK_EN 0x00010000	/* enable link status from external LINK_0 and LINK_1 pins */
1469120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_SWDPIN0  0x00040000	/* SWDPIN 0 value */
1470120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_SWDPIN1  0x00080000	/* SWDPIN 1 value */
1471120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_SWDPIN2  0x00100000	/* SWDPIN 2 value */
1472120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_SWDPIN3  0x00200000	/* SWDPIN 3 value */
1473120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_SWDPIO0  0x00400000	/* SWDPIN 0 Input or output */
1474120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_SWDPIO1  0x00800000	/* SWDPIN 1 input or output */
1475120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_SWDPIO2  0x01000000	/* SWDPIN 2 input or output */
1476120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_SWDPIO3  0x02000000	/* SWDPIN 3 input or output */
1477120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_RST      0x04000000	/* Global reset */
1478120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_RFCE     0x08000000	/* Receive Flow Control enable */
1479120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_TFCE     0x10000000	/* Transmit flow control enable */
1480120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_RTE      0x20000000	/* Routing tag enable */
1481120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_VME      0x40000000	/* IEEE VLAN mode enable */
1482120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_PHY_RST  0x80000000	/* PHY Reset */
1483120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_SW2FW_INT 0x02000000	/* Initiate an interrupt to manageability engine */
14841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
14851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Device Status */
1486120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_FD         0x00000001	/* Full duplex.0=half,1=full */
1487120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_LU         0x00000002	/* Link up.0=no,1=link */
1488120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_FUNC_MASK  0x0000000C	/* PCI Function Mask */
14892d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_STATUS_FUNC_SHIFT 2
1490120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_FUNC_0     0x00000000	/* Function 0 */
1491120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_FUNC_1     0x00000004	/* Function 1 */
1492120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_TXOFF      0x00000010	/* transmission paused */
1493120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_TBIMODE    0x00000020	/* TBI mode */
14941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_STATUS_SPEED_MASK 0x000000C0
1495120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_SPEED_10   0x00000000	/* Speed 10Mb/s */
1496120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_SPEED_100  0x00000040	/* Speed 100Mb/s */
1497120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_SPEED_1000 0x00000080	/* Speed 1000Mb/s */
1498120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_LAN_INIT_DONE 0x00000200	/* Lan Init Completion
1499120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						   by EEPROM/Flash */
1500120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_ASDV       0x00000300	/* Auto speed detect value */
1501120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_DOCK_CI    0x00000800	/* Change in Dock/Undock state. Clear on write '0'. */
1502120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_GIO_MASTER_ENABLE 0x00080000	/* Status of Master requests. */
1503120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_MTXCKOK    0x00000400	/* MTX clock running OK */
1504120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_PCI66      0x00000800	/* In 66Mhz slot */
1505120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_BUS64      0x00001000	/* In 64 bit slot */
1506120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_PCIX_MODE  0x00002000	/* PCI-X mode */
1507120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_PCIX_SPEED 0x0000C000	/* PCI-X bus speed */
1508120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_BMC_SKU_0  0x00100000	/* BMC USB redirect disabled */
1509120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_BMC_SKU_1  0x00200000	/* BMC SRAM disabled */
1510120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_BMC_SKU_2  0x00400000	/* BMC SDRAM disabled */
1511120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_BMC_CRYPTO 0x00800000	/* BMC crypto disabled */
1512120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_BMC_LITE   0x01000000	/* BMC external code execution disabled */
1513120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_RGMII_ENABLE 0x02000000	/* RGMII disabled */
15146418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_STATUS_FUSE_8       0x04000000
15156418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_STATUS_FUSE_9       0x08000000
1516120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_SERDES0_DIS  0x10000000	/* SERDES disabled on port 0 */
1517120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_SERDES1_DIS  0x20000000	/* SERDES disabled on port 1 */
15181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1519120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg/* Constants used to interpret the masked PCI-X bus speed. */
1520120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_PCIX_SPEED_66  0x00000000	/* PCI-X bus speed  50-66 MHz */
1521120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_PCIX_SPEED_100 0x00004000	/* PCI-X bus speed  66-100 MHz */
1522120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_STATUS_PCIX_SPEED_133 0x00008000	/* PCI-X bus speed 100-133 MHz */
15231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
15241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* EEPROM/Flash Control */
1525120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_SK        0x00000001	/* EEPROM Clock */
1526120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_CS        0x00000002	/* EEPROM Chip Select */
1527120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_DI        0x00000004	/* EEPROM Data In */
1528120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_DO        0x00000008	/* EEPROM Data Out */
15291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_EECD_FWE_MASK  0x00000030
1530120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_FWE_DIS   0x00000010	/* Disable FLASH writes */
1531120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_FWE_EN    0x00000020	/* Enable FLASH writes */
15321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_EECD_FWE_SHIFT 4
1533120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_REQ       0x00000040	/* EEPROM Access Request */
1534120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_GNT       0x00000080	/* EEPROM Access Grant */
1535120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_PRES      0x00000100	/* EEPROM Present */
1536120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_SIZE      0x00000200	/* EEPROM Size (0=64 word 1=256 word) */
1537120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_ADDR_BITS 0x00000400	/* EEPROM Addressing bits based on type
1538120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 * (0-small, 1-large) */
1539120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_TYPE      0x00002000	/* EEPROM Type (1-SPI, 0-Microwire) */
15401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef E1000_EEPROM_GRANT_ATTEMPTS
1541120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EEPROM_GRANT_ATTEMPTS 1000	/* EEPROM # attempts to gain grant */
15421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
1543120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_AUTO_RD          0x00000200	/* EEPROM Auto Read done */
1544120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_SIZE_EX_MASK     0x00007800	/* EEprom Size */
15452d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_EECD_SIZE_EX_SHIFT    11
1546120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_NVADDS    0x00018000	/* NVM Address Size */
1547120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_SELSHAD   0x00020000	/* Select Shadow RAM */
1548120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_INITSRAM  0x00040000	/* Initialize Shadow RAM */
1549120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_FLUPD     0x00080000	/* Update FLASH */
1550120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_AUPDEN    0x00100000	/* Enable Autonomous FLASH update */
1551120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_SHADV     0x00200000	/* Shadow RAM Data Valid */
1552120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EECD_SEC1VAL   0x00400000	/* Sector One Valid */
1553fd803241744ad6e4262b6588c6af89e8fb794098Jeff Kirsher#define E1000_EECD_SECVAL_SHIFT      22
15542d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_STM_OPCODE     0xDB00
15552d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_HICR_FW_RESET  0xC0
15561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1557d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_SHADOW_RAM_WORDS     2048
15582df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define E1000_ICH_NVM_SIG_WORD     0x13
15592df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define E1000_ICH_NVM_SIG_MASK     0xC0
1560d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
15611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* EEPROM Read */
1562120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EERD_START      0x00000001	/* Start Read */
1563120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EERD_DONE       0x00000010	/* Read Done */
15641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_EERD_ADDR_SHIFT 8
1565120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EERD_ADDR_MASK  0x0000FF00	/* Read Address */
15661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_EERD_DATA_SHIFT 16
1567120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EERD_DATA_MASK  0xFFFF0000	/* Read Data */
15681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
15691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* SPI EEPROM Status Register */
15701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_STATUS_RDY_SPI  0x01
15711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_STATUS_WEN_SPI  0x02
15721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_STATUS_BP0_SPI  0x04
15731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_STATUS_BP1_SPI  0x08
15741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_STATUS_WPEN_SPI 0x80
15751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
15761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Extended Device Control */
1577120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_GPI0_EN   0x00000001	/* Maps SDP4 to GPI0 */
1578120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_GPI1_EN   0x00000002	/* Maps SDP5 to GPI1 */
15791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_EXT_PHYINT_EN E1000_CTRL_EXT_GPI1_EN
1580120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_GPI2_EN   0x00000004	/* Maps SDP6 to GPI2 */
1581120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_GPI3_EN   0x00000008	/* Maps SDP7 to GPI3 */
1582120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_SDP4_DATA 0x00000010	/* Value of SW Defineable Pin 4 */
1583120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_SDP5_DATA 0x00000020	/* Value of SW Defineable Pin 5 */
15841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_EXT_PHY_INT   E1000_CTRL_EXT_SDP5_DATA
1585120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_SDP6_DATA 0x00000040	/* Value of SW Defineable Pin 6 */
1586120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_SDP7_DATA 0x00000080	/* Value of SW Defineable Pin 7 */
1587120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_SDP4_DIR  0x00000100	/* Direction of SDP4 0=in 1=out */
1588120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_SDP5_DIR  0x00000200	/* Direction of SDP5 0=in 1=out */
1589120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_SDP6_DIR  0x00000400	/* Direction of SDP6 0=in 1=out */
1590120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_SDP7_DIR  0x00000800	/* Direction of SDP7 0=in 1=out */
1591120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_ASDCHK    0x00001000	/* Initiate an ASD sequence */
1592120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_EE_RST    0x00002000	/* Reinitialize from EEPROM */
1593120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_IPS       0x00004000	/* Invert Power State */
1594120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_SPD_BYPS  0x00008000	/* Speed Select Bypass */
1595120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_RO_DIS    0x00020000	/* Relaxed Ordering disable */
15961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_EXT_LINK_MODE_MASK 0x00C00000
15971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_EXT_LINK_MODE_GMII 0x00000000
15981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_EXT_LINK_MODE_TBI  0x00C00000
159935574764c7eafab4ec0aa92c18a78a51acc8a710Nicholas Nunley#define E1000_CTRL_EXT_LINK_MODE_KMRN 0x00000000
16006418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_CTRL_EXT_LINK_MODE_SERDES  0x00C00000
160135574764c7eafab4ec0aa92c18a78a51acc8a710Nicholas Nunley#define E1000_CTRL_EXT_LINK_MODE_SGMII   0x00800000
16021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_EXT_WR_WMARK_MASK  0x03000000
16031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_EXT_WR_WMARK_256   0x00000000
16041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_EXT_WR_WMARK_320   0x01000000
16051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_EXT_WR_WMARK_384   0x02000000
16061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_EXT_WR_WMARK_448   0x03000000
1607120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_DRV_LOAD       0x10000000	/* Driver loaded bit for FW */
1608120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_IAME           0x08000000	/* Interrupt acknowledge Auto-mask */
1609120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_INT_TIMER_CLR  0x20000000	/* Clear Interrupt timers after IMS clear */
1610120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CRTL_EXT_PB_PAREN       0x01000000	/* packet buffer parity error detection enabled */
1611120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_CTRL_EXT_DF_PAREN       0x02000000	/* descriptor FIFO parity error detection enable */
16126418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_CTRL_EXT_GHOST_PAREN    0x40000000
16131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
16141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* MDI Control */
16151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_MDIC_DATA_MASK 0x0000FFFF
16161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_MDIC_REG_MASK  0x001F0000
16171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_MDIC_REG_SHIFT 16
16181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_MDIC_PHY_MASK  0x03E00000
16191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_MDIC_PHY_SHIFT 21
16201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_MDIC_OP_WRITE  0x04000000
16211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_MDIC_OP_READ   0x08000000
16221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_MDIC_READY     0x10000000
16231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_MDIC_INT_EN    0x20000000
16241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_MDIC_ERROR     0x40000000
16251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
16265377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define INTEL_CE_GBE_MDIC_OP_WRITE      0x04000000
16275377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define INTEL_CE_GBE_MDIC_OP_READ       0x00000000
16285377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define INTEL_CE_GBE_MDIC_GO            0x80000000
16295377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define INTEL_CE_GBE_MDIC_READ_ERROR    0x80000000
16305377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie
16316418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_MASK           0x0000FFFF
16326418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_OFFSET         0x001F0000
16336418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_OFFSET_SHIFT   16
16346418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_REN            0x00200000
16356418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher
16366418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_OFFSET_FIFO_CTRL      0x00000000
16376418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_OFFSET_CTRL           0x00000001
16386418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_OFFSET_INB_CTRL       0x00000002
16396418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_OFFSET_DIAG           0x00000003
16406418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_OFFSET_TIMEOUTS       0x00000004
16416418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_OFFSET_INB_PARAM      0x00000009
16426418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_OFFSET_HD_CTRL        0x00000010
16436418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_OFFSET_M2P_SERDES     0x0000001E
16446418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_OFFSET_M2P_MODES      0x0000001F
16456418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher
16466418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher/* FIFO Control */
16476418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_FIFO_CTRL_RX_BYPASS   0x00000008
16486418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_FIFO_CTRL_TX_BYPASS   0x00000800
16496418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher
16506418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher/* In-Band Control */
1651d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_KUMCTRLSTA_INB_CTRL_LINK_STATUS_TX_TIMEOUT_DEFAULT    0x00000500
16526418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_INB_CTRL_DIS_PADDING  0x00000010
16536418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher
16546418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher/* Half-Duplex Control */
16556418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_HD_CTRL_10_100_DEFAULT 0x00000004
16566418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_KUMCTRLSTA_HD_CTRL_1000_DEFAULT  0x00000000
16576418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher
1658d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_KUMCTRLSTA_OFFSET_K0S_CTRL       0x0000001E
1659d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
1660d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_KUMCTRLSTA_DIAG_FELPBK           0x2000
1661d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_KUMCTRLSTA_DIAG_NELPBK           0x1000
1662d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
1663d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_KUMCTRLSTA_K0S_100_EN            0x2000
1664d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_KUMCTRLSTA_K0S_GBE_EN            0x1000
1665d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_KUMCTRLSTA_K0S_ENTRY_LATENCY_MASK   0x0003
1666d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
1667d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_KABGTXD_BGSQLBIAS                0x00050000
1668d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
1669d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_PHY_CTRL_SPD_EN                  0x00000001
1670d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_PHY_CTRL_D0A_LPLU                0x00000002
1671d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_PHY_CTRL_NOND0A_LPLU             0x00000004
1672d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_PHY_CTRL_NOND0A_GBE_DISABLE      0x00000008
1673d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_PHY_CTRL_GBE_DISABLE             0x00000040
1674d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_PHY_CTRL_B2B_EN                  0x00000080
1675d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
16761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* LED Control */
16771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED0_MODE_MASK       0x0000000F
16781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED0_MODE_SHIFT      0
16792d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_LEDCTL_LED0_BLINK_RATE      0x0000020
16801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED0_IVRT            0x00000040
16811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED0_BLINK           0x00000080
16821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED1_MODE_MASK       0x00000F00
16831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED1_MODE_SHIFT      8
16842d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_LEDCTL_LED1_BLINK_RATE      0x0002000
16851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED1_IVRT            0x00004000
16861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED1_BLINK           0x00008000
16871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED2_MODE_MASK       0x000F0000
16881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED2_MODE_SHIFT      16
16892d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_LEDCTL_LED2_BLINK_RATE      0x00200000
16901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED2_IVRT            0x00400000
16911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED2_BLINK           0x00800000
16921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED3_MODE_MASK       0x0F000000
16931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED3_MODE_SHIFT      24
1694868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_LEDCTL_LED3_BLINK_RATE      0x20000000
16951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED3_IVRT            0x40000000
16961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_LED3_BLINK           0x80000000
16971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
16981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_LINK_10_1000  0x0
16991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_LINK_100_1000 0x1
17001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_LINK_UP       0x2
17011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_ACTIVITY      0x3
17021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_LINK_ACTIVITY 0x4
17031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_LINK_10       0x5
17041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_LINK_100      0x6
17051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_LINK_1000     0x7
17061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_PCIX_MODE     0x8
17071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_FULL_DUPLEX   0x9
17081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_COLLISION     0xA
17091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_BUS_SPEED     0xB
17101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_BUS_SIZE      0xC
17111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_PAUSED        0xD
17121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_LED_ON        0xE
17131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_LEDCTL_MODE_LED_OFF       0xF
17141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
17151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Receive Address */
1716120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RAH_AV  0x80000000	/* Receive descriptor valid */
17171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
17181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Interrupt Cause Read */
1719120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_TXDW          0x00000001	/* Transmit desc written back */
1720120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_TXQE          0x00000002	/* Transmit Queue empty */
1721120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_LSC           0x00000004	/* Link Status Change */
1722120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_RXSEQ         0x00000008	/* rx sequence error */
1723120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_RXDMT0        0x00000010	/* rx desc min. threshold (0) */
1724120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_RXO           0x00000040	/* rx overrun */
1725120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_RXT0          0x00000080	/* rx timer intr (ring 0) */
1726120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_MDAC          0x00000200	/* MDIO access complete */
1727120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_RXCFG         0x00000400	/* RX /c/ ordered set */
1728120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_GPI_EN0       0x00000800	/* GP Int 0 */
1729120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_GPI_EN1       0x00001000	/* GP Int 1 */
1730120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_GPI_EN2       0x00002000	/* GP Int 2 */
1731120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_GPI_EN3       0x00004000	/* GP Int 3 */
17321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_ICR_TXD_LOW       0x00008000
17331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_ICR_SRPD          0x00010000
1734120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_ACK           0x00020000	/* Receive Ack frame */
1735120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_MNG           0x00040000	/* Manageability event */
1736120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_DOCK          0x00080000	/* Dock/Undock */
1737120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_INT_ASSERTED  0x80000000	/* If this bit asserted, the driver should claim the interrupt */
1738120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_RXD_FIFO_PAR0 0x00100000	/* queue 0 Rx descriptor FIFO parity error */
1739120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_TXD_FIFO_PAR0 0x00200000	/* queue 0 Tx descriptor FIFO parity error */
1740120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_HOST_ARB_PAR  0x00400000	/* host arb read buffer parity error */
1741120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_PB_PAR        0x00800000	/* packet buffer parity error */
1742120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_RXD_FIFO_PAR1 0x01000000	/* queue 1 Rx descriptor FIFO parity error */
1743120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_TXD_FIFO_PAR1 0x02000000	/* queue 1 Tx descriptor FIFO parity error */
1744120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_ALL_PARITY    0x03F00000	/* all parity error bits */
1745120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_DSW           0x00000020	/* FW changed the status of DISSW bit in the FWSM */
1746120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_PHYINT        0x00001000	/* LAN connected device generates an interrupt */
1747120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICR_EPRST         0x00100000	/* ME hardware reset occurs */
17481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
17491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Interrupt Cause Set */
1750120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_TXDW      E1000_ICR_TXDW	/* Transmit desc written back */
1751120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_TXQE      E1000_ICR_TXQE	/* Transmit Queue empty */
1752120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_LSC       E1000_ICR_LSC	/* Link Status Change */
1753120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_RXSEQ     E1000_ICR_RXSEQ	/* rx sequence error */
1754120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_RXDMT0    E1000_ICR_RXDMT0	/* rx desc min. threshold */
1755120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_RXO       E1000_ICR_RXO	/* rx overrun */
1756120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_RXT0      E1000_ICR_RXT0	/* rx timer intr */
1757120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_MDAC      E1000_ICR_MDAC	/* MDIO access complete */
1758120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_RXCFG     E1000_ICR_RXCFG	/* RX /c/ ordered set */
1759120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_GPI_EN0   E1000_ICR_GPI_EN0	/* GP Int 0 */
1760120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_GPI_EN1   E1000_ICR_GPI_EN1	/* GP Int 1 */
1761120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_GPI_EN2   E1000_ICR_GPI_EN2	/* GP Int 2 */
1762120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_GPI_EN3   E1000_ICR_GPI_EN3	/* GP Int 3 */
17631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_ICS_TXD_LOW   E1000_ICR_TXD_LOW
17641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_ICS_SRPD      E1000_ICR_SRPD
1765120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_ACK       E1000_ICR_ACK	/* Receive Ack frame */
1766120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_MNG       E1000_ICR_MNG	/* Manageability event */
1767120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_DOCK      E1000_ICR_DOCK	/* Dock/Undock */
1768120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_RXD_FIFO_PAR0 E1000_ICR_RXD_FIFO_PAR0	/* queue 0 Rx descriptor FIFO parity error */
1769120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_TXD_FIFO_PAR0 E1000_ICR_TXD_FIFO_PAR0	/* queue 0 Tx descriptor FIFO parity error */
1770120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_HOST_ARB_PAR  E1000_ICR_HOST_ARB_PAR	/* host arb read buffer parity error */
1771120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_PB_PAR        E1000_ICR_PB_PAR	/* packet buffer parity error */
1772120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_RXD_FIFO_PAR1 E1000_ICR_RXD_FIFO_PAR1	/* queue 1 Rx descriptor FIFO parity error */
1773120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_ICS_TXD_FIFO_PAR1 E1000_ICR_TXD_FIFO_PAR1	/* queue 1 Tx descriptor FIFO parity error */
1774d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_ICS_DSW       E1000_ICR_DSW
1775d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_ICS_PHYINT    E1000_ICR_PHYINT
1776d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_ICS_EPRST     E1000_ICR_EPRST
17771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
17781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Interrupt Mask Set */
1779120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_TXDW      E1000_ICR_TXDW	/* Transmit desc written back */
1780120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_TXQE      E1000_ICR_TXQE	/* Transmit Queue empty */
1781120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_LSC       E1000_ICR_LSC	/* Link Status Change */
1782120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_RXSEQ     E1000_ICR_RXSEQ	/* rx sequence error */
1783120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_RXDMT0    E1000_ICR_RXDMT0	/* rx desc min. threshold */
1784120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_RXO       E1000_ICR_RXO	/* rx overrun */
1785120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_RXT0      E1000_ICR_RXT0	/* rx timer intr */
1786120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_MDAC      E1000_ICR_MDAC	/* MDIO access complete */
1787120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_RXCFG     E1000_ICR_RXCFG	/* RX /c/ ordered set */
1788120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_GPI_EN0   E1000_ICR_GPI_EN0	/* GP Int 0 */
1789120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_GPI_EN1   E1000_ICR_GPI_EN1	/* GP Int 1 */
1790120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_GPI_EN2   E1000_ICR_GPI_EN2	/* GP Int 2 */
1791120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_GPI_EN3   E1000_ICR_GPI_EN3	/* GP Int 3 */
17921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_IMS_TXD_LOW   E1000_ICR_TXD_LOW
17931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_IMS_SRPD      E1000_ICR_SRPD
1794120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_ACK       E1000_ICR_ACK	/* Receive Ack frame */
1795120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_MNG       E1000_ICR_MNG	/* Manageability event */
1796120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_DOCK      E1000_ICR_DOCK	/* Dock/Undock */
1797120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_RXD_FIFO_PAR0 E1000_ICR_RXD_FIFO_PAR0	/* queue 0 Rx descriptor FIFO parity error */
1798120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_TXD_FIFO_PAR0 E1000_ICR_TXD_FIFO_PAR0	/* queue 0 Tx descriptor FIFO parity error */
1799120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_HOST_ARB_PAR  E1000_ICR_HOST_ARB_PAR	/* host arb read buffer parity error */
1800120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_PB_PAR        E1000_ICR_PB_PAR	/* packet buffer parity error */
1801120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_RXD_FIFO_PAR1 E1000_ICR_RXD_FIFO_PAR1	/* queue 1 Rx descriptor FIFO parity error */
1802120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMS_TXD_FIFO_PAR1 E1000_ICR_TXD_FIFO_PAR1	/* queue 1 Tx descriptor FIFO parity error */
1803d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_IMS_DSW       E1000_ICR_DSW
1804d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_IMS_PHYINT    E1000_ICR_PHYINT
1805d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_IMS_EPRST     E1000_ICR_EPRST
18061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
18071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Interrupt Mask Clear */
1808120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_TXDW      E1000_ICR_TXDW	/* Transmit desc written back */
1809120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_TXQE      E1000_ICR_TXQE	/* Transmit Queue empty */
1810120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_LSC       E1000_ICR_LSC	/* Link Status Change */
1811120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_RXSEQ     E1000_ICR_RXSEQ	/* rx sequence error */
1812120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_RXDMT0    E1000_ICR_RXDMT0	/* rx desc min. threshold */
1813120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_RXO       E1000_ICR_RXO	/* rx overrun */
1814120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_RXT0      E1000_ICR_RXT0	/* rx timer intr */
1815120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_MDAC      E1000_ICR_MDAC	/* MDIO access complete */
1816120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_RXCFG     E1000_ICR_RXCFG	/* RX /c/ ordered set */
1817120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_GPI_EN0   E1000_ICR_GPI_EN0	/* GP Int 0 */
1818120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_GPI_EN1   E1000_ICR_GPI_EN1	/* GP Int 1 */
1819120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_GPI_EN2   E1000_ICR_GPI_EN2	/* GP Int 2 */
1820120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_GPI_EN3   E1000_ICR_GPI_EN3	/* GP Int 3 */
18211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_IMC_TXD_LOW   E1000_ICR_TXD_LOW
18221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_IMC_SRPD      E1000_ICR_SRPD
1823120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_ACK       E1000_ICR_ACK	/* Receive Ack frame */
1824120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_MNG       E1000_ICR_MNG	/* Manageability event */
1825120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_DOCK      E1000_ICR_DOCK	/* Dock/Undock */
1826120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_RXD_FIFO_PAR0 E1000_ICR_RXD_FIFO_PAR0	/* queue 0 Rx descriptor FIFO parity error */
1827120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_TXD_FIFO_PAR0 E1000_ICR_TXD_FIFO_PAR0	/* queue 0 Tx descriptor FIFO parity error */
1828120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_HOST_ARB_PAR  E1000_ICR_HOST_ARB_PAR	/* host arb read buffer parity error */
1829120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_PB_PAR        E1000_ICR_PB_PAR	/* packet buffer parity error */
1830120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_RXD_FIFO_PAR1 E1000_ICR_RXD_FIFO_PAR1	/* queue 1 Rx descriptor FIFO parity error */
1831120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_IMC_TXD_FIFO_PAR1 E1000_ICR_TXD_FIFO_PAR1	/* queue 1 Tx descriptor FIFO parity error */
1832d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_IMC_DSW       E1000_ICR_DSW
1833d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_IMC_PHYINT    E1000_ICR_PHYINT
1834d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_IMC_EPRST     E1000_ICR_EPRST
18351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
18361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Receive Control */
1837120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_RST            0x00000001	/* Software reset */
1838120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_EN             0x00000002	/* enable */
1839120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_SBP            0x00000004	/* store bad packet */
1840120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_UPE            0x00000008	/* unicast promiscuous enable */
1841120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_MPE            0x00000010	/* multicast promiscuous enab */
1842120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_LPE            0x00000020	/* long packet enable */
1843120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_LBM_NO         0x00000000	/* no loopback mode */
1844120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_LBM_MAC        0x00000040	/* MAC loopback mode */
1845120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_LBM_SLP        0x00000080	/* serial link loopback mode */
1846120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_LBM_TCVR       0x000000C0	/* tcvr loopback mode */
1847120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_DTYP_MASK      0x00000C00	/* Descriptor type mask */
1848120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_DTYP_PS        0x00000400	/* Packet Split descriptor */
1849120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_RDMTS_HALF     0x00000000	/* rx desc min threshold size */
1850120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_RDMTS_QUAT     0x00000100	/* rx desc min threshold size */
1851120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_RDMTS_EIGTH    0x00000200	/* rx desc min threshold size */
1852120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_MO_SHIFT       12	/* multicast offset shift */
1853120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_MO_0           0x00000000	/* multicast offset 11:0 */
1854120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_MO_1           0x00001000	/* multicast offset 12:1 */
1855120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_MO_2           0x00002000	/* multicast offset 13:2 */
1856120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_MO_3           0x00003000	/* multicast offset 15:4 */
1857120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_MDR            0x00004000	/* multicast desc ring 0 */
1858120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_BAM            0x00008000	/* broadcast enable */
18591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* these buffer sizes are valid if E1000_RCTL_BSEX is 0 */
1860120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_SZ_2048        0x00000000	/* rx buffer size 2048 */
1861120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_SZ_1024        0x00010000	/* rx buffer size 1024 */
1862120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_SZ_512         0x00020000	/* rx buffer size 512 */
1863120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_SZ_256         0x00030000	/* rx buffer size 256 */
18641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* these buffer sizes are valid if E1000_RCTL_BSEX is 1 */
1865120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_SZ_16384       0x00010000	/* rx buffer size 16384 */
1866120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_SZ_8192        0x00020000	/* rx buffer size 8192 */
1867120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_SZ_4096        0x00030000	/* rx buffer size 4096 */
1868120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_VFE            0x00040000	/* vlan filter enable */
1869120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_CFIEN          0x00080000	/* canonical form enable */
1870120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_CFI            0x00100000	/* canonical form indicator */
1871120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_DPF            0x00400000	/* discard pause frames */
1872120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_PMCF           0x00800000	/* pass MAC control frames */
1873120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_BSEX           0x02000000	/* Buffer size extension */
1874120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_SECRC          0x04000000	/* Strip Ethernet CRC */
1875120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_FLXBUF_MASK    0x78000000	/* Flexible buffer size */
1876120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RCTL_FLXBUF_SHIFT   27	/* Flexible buffer shift */
18772d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
18782d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* Use byte values for the following shift parameters
18792d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala * Usage:
18802d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala *     psrctl |= (((ROUNDUP(value0, 128) >> E1000_PSRCTL_BSIZE0_SHIFT) &
18812d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala *                  E1000_PSRCTL_BSIZE0_MASK) |
18822d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala *                ((ROUNDUP(value1, 1024) >> E1000_PSRCTL_BSIZE1_SHIFT) &
18832d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala *                  E1000_PSRCTL_BSIZE1_MASK) |
18842d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala *                ((ROUNDUP(value2, 1024) << E1000_PSRCTL_BSIZE2_SHIFT) &
18852d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala *                  E1000_PSRCTL_BSIZE2_MASK) |
18862d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala *                ((ROUNDUP(value3, 1024) << E1000_PSRCTL_BSIZE3_SHIFT) |;
18872d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala *                  E1000_PSRCTL_BSIZE3_MASK))
18882d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala * where value0 = [128..16256],  default=256
18892d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala *       value1 = [1024..64512], default=4096
18902d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala *       value2 = [0..64512],    default=4096
18912d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala *       value3 = [0..64512],    default=0
18922d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala */
189376c224bc9fdf108ae6e97553322122f53bdbe75cAuke Kok
18942d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_PSRCTL_BSIZE0_MASK   0x0000007F
18952d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_PSRCTL_BSIZE1_MASK   0x00003F00
18962d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_PSRCTL_BSIZE2_MASK   0x003F0000
18972d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_PSRCTL_BSIZE3_MASK   0x3F000000
18982d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
1899120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PSRCTL_BSIZE0_SHIFT  7	/* Shift _right_ 7 */
1900120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PSRCTL_BSIZE1_SHIFT  2	/* Shift _right_ 2 */
1901120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PSRCTL_BSIZE2_SHIFT  6	/* Shift _left_ 6 */
1902120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PSRCTL_BSIZE3_SHIFT 14	/* Shift _left_ 14 */
19031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
19046418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher/* SW_W_SYNC definitions */
19056418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_SWFW_EEP_SM     0x0001
19066418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_SWFW_PHY0_SM    0x0002
19076418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_SWFW_PHY1_SM    0x0004
19086418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher#define E1000_SWFW_MAC_CSR_SM 0x0008
19096418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher
19101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Receive Descriptor */
1911120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDT_DELAY 0x0000ffff	/* Delay timer (1=1024us) */
1912120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDT_FPDB  0x80000000	/* Flush descriptor block */
1913120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDLEN_LEN 0x0007ff80	/* descriptor length */
1914120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDH_RDH   0x0000ffff	/* receive descriptor head */
1915120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RDT_RDT   0x0000ffff	/* receive descriptor tail */
19161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
19171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Flow Control */
1918120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FCRTH_RTH  0x0000FFF8	/* Mask Bits[15:3] for RTH */
1919120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FCRTH_XFCE 0x80000000	/* External Flow Control Enable */
1920120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FCRTL_RTL  0x0000FFF8	/* Mask Bits[15:3] for RTL */
1921120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FCRTL_XONE 0x80000000	/* Enable XON frame transmission */
19221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
19232d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* Header split receive */
19242d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RFCTL_ISCSI_DIS           0x00000001
19252d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RFCTL_ISCSI_DWC_MASK      0x0000003E
19262d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RFCTL_ISCSI_DWC_SHIFT     1
19272d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RFCTL_NFSW_DIS            0x00000040
19282d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RFCTL_NFSR_DIS            0x00000080
19292d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RFCTL_NFS_VER_MASK        0x00000300
19302d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RFCTL_NFS_VER_SHIFT       8
19312d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RFCTL_IPV6_DIS            0x00000400
19322d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RFCTL_IPV6_XSUM_DIS       0x00000800
19332d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RFCTL_ACK_DIS             0x00001000
19342d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RFCTL_ACKD_DIS            0x00002000
19352d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RFCTL_IPFRSP_DIS          0x00004000
19362d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RFCTL_EXTEN               0x00008000
19372d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RFCTL_IPV6_EX_DIS         0x00010000
19382d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_RFCTL_NEW_IPV6_EXT_DIS    0x00020000
19392d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
19401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Receive Descriptor Control */
1941120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXDCTL_PTHRESH 0x0000003F	/* RXDCTL Prefetch Threshold */
1942120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXDCTL_HTHRESH 0x00003F00	/* RXDCTL Host Threshold */
1943120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXDCTL_WTHRESH 0x003F0000	/* RXDCTL Writeback Threshold */
1944120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXDCTL_GRAN    0x01000000	/* RXDCTL Granularity */
19451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
19461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Transmit Descriptor Control */
1947120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXDCTL_PTHRESH 0x0000003F	/* TXDCTL Prefetch Threshold */
1948120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXDCTL_HTHRESH 0x00003F00	/* TXDCTL Host Threshold */
1949120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXDCTL_WTHRESH 0x003F0000	/* TXDCTL Writeback Threshold */
1950120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXDCTL_GRAN    0x01000000	/* TXDCTL Granularity */
1951120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXDCTL_LWTHRESH 0xFE000000	/* TXDCTL Low Threshold */
1952120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXDCTL_FULL_TX_DESC_WB 0x01010000	/* GRAN=1, WTHRESH=1 */
1953120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXDCTL_COUNT_DESC 0x00400000	/* Enable the counting of desc.
1954120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						   still to be processed. */
19551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Transmit Configuration Word */
1956120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXCW_FD         0x00000020	/* TXCW full duplex */
1957120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXCW_HD         0x00000040	/* TXCW half duplex */
1958120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXCW_PAUSE      0x00000080	/* TXCW sym pause request */
1959120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXCW_ASM_DIR    0x00000100	/* TXCW astm pause direction */
1960120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXCW_PAUSE_MASK 0x00000180	/* TXCW pause request mask */
1961120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXCW_RF         0x00003000	/* TXCW remote fault */
1962120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXCW_NP         0x00008000	/* TXCW next page */
1963120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXCW_CW         0x0000ffff	/* TxConfigWord mask */
1964120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXCW_TXC        0x40000000	/* Transmit Config control */
1965120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TXCW_ANE        0x80000000	/* Auto-neg enable */
19661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
19671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Receive Configuration Word */
1968120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXCW_CW    0x0000ffff	/* RxConfigWord mask */
1969120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXCW_NC    0x04000000	/* Receive config no carrier */
1970120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXCW_IV    0x08000000	/* Receive config invalid */
1971120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXCW_CC    0x10000000	/* Receive config change */
1972120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXCW_C     0x20000000	/* Receive config */
1973120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXCW_SYNCH 0x40000000	/* Receive config synch */
1974120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXCW_ANC   0x80000000	/* Auto-neg complete */
19751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
19761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Transmit Control */
1977120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TCTL_RST    0x00000001	/* software reset */
1978120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TCTL_EN     0x00000002	/* enable tx */
1979120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TCTL_BCE    0x00000004	/* busy check enable */
1980120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TCTL_PSP    0x00000008	/* pad short packets */
1981120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TCTL_CT     0x00000ff0	/* collision threshold */
1982120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TCTL_COLD   0x003ff000	/* collision distance */
1983120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TCTL_SWXOFF 0x00400000	/* SW Xoff transmission */
1984120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TCTL_PBE    0x00800000	/* Packet Burst Enable */
1985120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TCTL_RTLC   0x01000000	/* Re-transmit on late collision */
1986120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TCTL_NRTU   0x02000000	/* No Re-transmit on underrun */
1987120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TCTL_MULR   0x10000000	/* Multiple request support */
19886418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher/* Extended Transmit Control */
1989120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TCTL_EXT_BST_MASK  0x000003FF	/* Backoff Slot Time */
1990120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_TCTL_EXT_GCEX_MASK 0x000FFC00	/* Gigabit Carry Extend Padding */
19916418ecc68e1d9416451b6f78ebb2c0b077e0abf2Jeff Kirsher
19921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Receive Checksum Control */
1993120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXCSUM_PCSS_MASK 0x000000FF	/* Packet Checksum Start */
1994120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXCSUM_IPOFL     0x00000100	/* IPv4 checksum offload */
1995120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXCSUM_TUOFL     0x00000200	/* TCP / UDP checksum offload */
1996120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXCSUM_IPV6OFL   0x00000400	/* IPv6 checksum offload */
1997120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXCSUM_IPPCSE    0x00001000	/* IP payload checksum enable */
1998120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_RXCSUM_PCSD      0x00002000	/* packet checksum disabled */
19992d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
2000868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala/* Multiple Receive Queue Control */
2001868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_MRQC_ENABLE_MASK              0x00000003
2002868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_MRQC_ENABLE_RSS_2Q            0x00000001
2003868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_MRQC_ENABLE_RSS_INT           0x00000004
2004868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_MRQC_RSS_FIELD_MASK           0xFFFF0000
2005868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_MRQC_RSS_FIELD_IPV4_TCP       0x00010000
2006868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_MRQC_RSS_FIELD_IPV4           0x00020000
2007d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_MRQC_RSS_FIELD_IPV6_TCP_EX    0x00040000
2008868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_MRQC_RSS_FIELD_IPV6_EX        0x00080000
2009868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_MRQC_RSS_FIELD_IPV6           0x00100000
2010d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_MRQC_RSS_FIELD_IPV6_TCP       0x00200000
20111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
20121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Definitions for power management and wakeup registers */
20131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Wake Up Control */
2014120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUC_APME       0x00000001	/* APM Enable */
2015120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUC_PME_EN     0x00000002	/* PME Enable */
2016120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUC_PME_STATUS 0x00000004	/* PME Status */
2017120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUC_APMPME     0x00000008	/* Assert PME on APM Wakeup */
2018120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUC_SPM        0x80000000	/* Enable SPM */
20191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
20201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Wake Up Filter Control */
2021120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_LNKC 0x00000001	/* Link Status Change Wakeup Enable */
2022120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_MAG  0x00000002	/* Magic Packet Wakeup Enable */
2023120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_EX   0x00000004	/* Directed Exact Wakeup Enable */
2024120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_MC   0x00000008	/* Directed Multicast Wakeup Enable */
2025120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_BC   0x00000010	/* Broadcast Wakeup Enable */
2026120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_ARP  0x00000020	/* ARP Request Packet Wakeup Enable */
2027120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_IPV4 0x00000040	/* Directed IPv4 Packet Wakeup Enable */
2028120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_IPV6 0x00000080	/* Directed IPv6 Packet Wakeup Enable */
2029120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_IGNORE_TCO      0x00008000	/* Ignore WakeOn TCO packets */
2030120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_FLX0 0x00010000	/* Flexible Filter 0 Enable */
2031120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_FLX1 0x00020000	/* Flexible Filter 1 Enable */
2032120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_FLX2 0x00040000	/* Flexible Filter 2 Enable */
2033120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_FLX3 0x00080000	/* Flexible Filter 3 Enable */
2034120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_ALL_FILTERS 0x000F00FF	/* Mask for all wakeup filters */
2035120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_FLX_OFFSET 16	/* Offset to the Flexible Filters bits */
2036120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUFC_FLX_FILTERS 0x000F0000	/* Mask for the 4 flexible filters */
20371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
20381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Wake Up Status */
2039120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUS_LNKC 0x00000001	/* Link Status Changed */
2040120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUS_MAG  0x00000002	/* Magic Packet Received */
2041120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUS_EX   0x00000004	/* Directed Exact Received */
2042120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUS_MC   0x00000008	/* Directed Multicast Received */
2043120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUS_BC   0x00000010	/* Broadcast Received */
2044120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUS_ARP  0x00000020	/* ARP Request Packet Received */
2045120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUS_IPV4 0x00000040	/* Directed IPv4 Packet Wakeup Received */
2046120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUS_IPV6 0x00000080	/* Directed IPv6 Packet Wakeup Received */
2047120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUS_FLX0 0x00010000	/* Flexible Filter 0 Match */
2048120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUS_FLX1 0x00020000	/* Flexible Filter 1 Match */
2049120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUS_FLX2 0x00040000	/* Flexible Filter 2 Match */
2050120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUS_FLX3 0x00080000	/* Flexible Filter 3 Match */
2051120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUS_FLX_FILTERS 0x000F0000	/* Mask for the 4 flexible filters */
20521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
20531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Management Control */
2054120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_SMBUS_EN      0x00000001	/* SMBus Enabled - RO */
2055120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_ASF_EN        0x00000002	/* ASF Enabled - RO */
2056120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_R_ON_FORCE    0x00000004	/* Reset on Force TCO - RO */
2057120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_RMCP_EN       0x00000100	/* Enable RCMP 026Fh Filtering */
2058120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_0298_EN       0x00000200	/* Enable RCMP 0298h Filtering */
2059120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_IPV4_EN       0x00000400	/* Enable IPv4 */
2060120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_IPV6_EN       0x00000800	/* Enable IPv6 */
2061120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_SNAP_EN       0x00001000	/* Accept LLC/SNAP */
2062120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_ARP_EN        0x00002000	/* Enable ARP Request Filtering */
2063120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_NEIGHBOR_EN   0x00004000	/* Enable Neighbor Discovery
2064120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						 * Filtering */
2065120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_ARP_RES_EN    0x00008000	/* Enable ARP response Filtering */
2066120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_TCO_RESET     0x00010000	/* TCO Reset Occurred */
2067120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_RCV_TCO_EN    0x00020000	/* Receive TCO Packets Enabled */
2068120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_REPORT_STATUS 0x00040000	/* Status Reporting Enabled */
2069120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_RCV_ALL       0x00080000	/* Receive All Enabled */
2070120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_BLK_PHY_RST_ON_IDE   0x00040000	/* Block phy resets */
2071120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_EN_MAC_ADDR_FILTER   0x00100000	/* Enable MAC address
2072120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg							 * filtering */
2073120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_EN_MNG2HOST   0x00200000	/* Enable MNG packets to host
2074120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						 * memory */
2075120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_EN_IP_ADDR_FILTER    0x00400000	/* Enable IP address
2076120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg							 * filtering */
2077120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_EN_XSUM_FILTER   0x00800000	/* Enable checksum filtering */
2078120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_BR_EN         0x01000000	/* Enable broadcast filtering */
2079120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_SMB_REQ       0x01000000	/* SMBus Request */
2080120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_SMB_GNT       0x02000000	/* SMBus Grant */
2081120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_SMB_CLK_IN    0x04000000	/* SMBus Clock In */
2082120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_SMB_DATA_IN   0x08000000	/* SMBus Data In */
2083120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_SMB_DATA_OUT  0x10000000	/* SMBus Data Out */
2084120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_SMB_CLK_OUT   0x20000000	/* SMBus Clock Out */
2085120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg
2086120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_SMB_DATA_OUT_SHIFT  28	/* SMBus Data Out Shift */
2087120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_MANC_SMB_CLK_OUT_SHIFT   29	/* SMBus Clock Out Shift */
20881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
20892d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* SW Semaphore Register */
2090120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_SWSM_SMBI         0x00000001	/* Driver Semaphore bit */
2091120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_SWSM_SWESMBI      0x00000002	/* FW Semaphore bit */
2092120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_SWSM_WMNG         0x00000004	/* Wake MNG Clock */
2093120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_SWSM_DRV_LOAD     0x00000008	/* Driver Loaded Bit */
20942d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
20952d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* FW Semaphore Register */
2096120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FWSM_MODE_MASK    0x0000000E	/* FW mode */
20972d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FWSM_MODE_SHIFT            1
2098120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FWSM_FW_VALID     0x00008000	/* FW established a valid mode */
20992d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
2100120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FWSM_RSPCIPHY        0x00000040	/* Reset PHY on PCI reset */
2101120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FWSM_DISSW           0x10000000	/* FW disable SW Write Access */
2102120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FWSM_SKUSEL_MASK     0x60000000	/* LAN SKU select */
2103d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_FWSM_SKUEL_SHIFT     29
2104120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FWSM_SKUSEL_EMB      0x0	/* Embedded SKU */
2105120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FWSM_SKUSEL_CONS     0x1	/* Consumer SKU */
2106120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FWSM_SKUSEL_PERF_100 0x2	/* Perf & Corp 10/100 SKU */
2107120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FWSM_SKUSEL_PERF_GBE 0x3	/* Perf & Copr GbE SKU */
2108d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
21092d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* FFLT Debug Register */
2110120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FFLT_DBG_INVC     0x00100000	/* Invalid /C/ code handling */
21112d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
21122d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakalatypedef enum {
2113120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_mng_mode_none = 0,
2114120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_mng_mode_asf,
2115120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_mng_mode_pt,
2116120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_mng_mode_ipmi,
2117120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	e1000_mng_mode_host_interface_only
21182d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala} e1000_mng_mode;
21192d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
2120120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg/* Host Interface Control Register */
2121120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_HICR_EN           0x00000001	/* Enable Bit - RO */
2122120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_HICR_C            0x00000002	/* Driver sets this bit when done
2123120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						 * to put command in RAM */
2124120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_HICR_SV           0x00000004	/* Status Validity */
2125120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_HICR_FWR          0x00000080	/* FW reset. Set by the Host */
21262d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
21272d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* Host Interface Command Interface - Address range 0x8800-0x8EFF */
2128120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_HI_MAX_DATA_LENGTH         252	/* Host Interface data length */
2129120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_HI_MAX_BLOCK_BYTE_LENGTH  1792	/* Number of bytes in range */
2130120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_HI_MAX_BLOCK_DWORD_LENGTH  448	/* Number of dwords in range */
2131120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_HI_COMMAND_TIMEOUT         500	/* Time in ms to process HI command */
21322d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
21332d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakalastruct e1000_host_command_header {
2134120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 command_id;
2135120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 command_length;
2136120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 command_options;	/* I/F bits for command, status for return */
2137120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 checksum;
21382d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala};
21392d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakalastruct e1000_host_command_info {
2140120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	struct e1000_host_command_header command_header;	/* Command Head/Command Result Head has 4 bytes */
2141120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg	u8 command_data[E1000_HI_MAX_DATA_LENGTH];	/* Command data can length 0..252 */
21422d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala};
21432d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
21442d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* Host SMB register #0 */
2145120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_HSMC0R_CLKIN      0x00000001	/* SMB Clock in */
2146120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_HSMC0R_DATAIN     0x00000002	/* SMB Data in */
2147120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_HSMC0R_DATAOUT    0x00000004	/* SMB Data out */
2148120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_HSMC0R_CLKOUT     0x00000008	/* SMB Clock out */
21492d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
21502d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* Host SMB register #1 */
21512d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_HSMC1R_CLKIN      E1000_HSMC0R_CLKIN
21522d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_HSMC1R_DATAIN     E1000_HSMC0R_DATAIN
21532d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_HSMC1R_DATAOUT    E1000_HSMC0R_DATAOUT
21542d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_HSMC1R_CLKOUT     E1000_HSMC0R_CLKOUT
21552d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
21562d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* FW Status Register */
2157120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_FWSTS_FWS_MASK    0x000000FF	/* FW Status */
21582d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
21591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Wake Up Packet Length */
2160120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_WUPL_LENGTH_MASK 0x0FFF	/* Only the lower 12 bits are valid */
21611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
21621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_MDALIGN          4096
21631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
21648fc897b00a7d81ffaa24e18881c2d6b10698ab0bAuke Kok/* PCI-Ex registers*/
2165b7ee49db8b4b21dad3284d5507e7ea2946031f6eJeff Kirsher
2166b7ee49db8b4b21dad3284d5507e7ea2946031f6eJeff Kirsher/* PCI-Ex Control Register */
21670f15a8fae8b8558f5a9b0fec770846c487c779f6Jeff Kirsher#define E1000_GCR_RXD_NO_SNOOP          0x00000001
21680f15a8fae8b8558f5a9b0fec770846c487c779f6Jeff Kirsher#define E1000_GCR_RXDSCW_NO_SNOOP       0x00000002
21690f15a8fae8b8558f5a9b0fec770846c487c779f6Jeff Kirsher#define E1000_GCR_RXDSCR_NO_SNOOP       0x00000004
21700f15a8fae8b8558f5a9b0fec770846c487c779f6Jeff Kirsher#define E1000_GCR_TXD_NO_SNOOP          0x00000008
21710f15a8fae8b8558f5a9b0fec770846c487c779f6Jeff Kirsher#define E1000_GCR_TXDSCW_NO_SNOOP       0x00000010
21720f15a8fae8b8558f5a9b0fec770846c487c779f6Jeff Kirsher#define E1000_GCR_TXDSCR_NO_SNOOP       0x00000020
21730f15a8fae8b8558f5a9b0fec770846c487c779f6Jeff Kirsher
21740f15a8fae8b8558f5a9b0fec770846c487c779f6Jeff Kirsher#define PCI_EX_NO_SNOOP_ALL (E1000_GCR_RXD_NO_SNOOP         | \
21750f15a8fae8b8558f5a9b0fec770846c487c779f6Jeff Kirsher                             E1000_GCR_RXDSCW_NO_SNOOP      | \
21760f15a8fae8b8558f5a9b0fec770846c487c779f6Jeff Kirsher                             E1000_GCR_RXDSCR_NO_SNOOP      | \
21770f15a8fae8b8558f5a9b0fec770846c487c779f6Jeff Kirsher                             E1000_GCR_TXD_NO_SNOOP         | \
21780f15a8fae8b8558f5a9b0fec770846c487c779f6Jeff Kirsher                             E1000_GCR_TXDSCW_NO_SNOOP      | \
21790f15a8fae8b8558f5a9b0fec770846c487c779f6Jeff Kirsher                             E1000_GCR_TXDSCR_NO_SNOOP)
2180b7ee49db8b4b21dad3284d5507e7ea2946031f6eJeff Kirsher
2181d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define PCI_EX_82566_SNOOP_ALL PCI_EX_NO_SNOOP_ALL
2182d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
2183868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_GCR_L1_ACT_WITHOUT_L0S_RX 0x08000000
21842d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* Function Active and Power State to MNG */
21852d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_FUNC0_POWER_STATE_MASK         0x00000003
21862d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_LAN0_VALID                     0x00000004
21872d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_FUNC0_AUX_EN                   0x00000008
21882d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_FUNC1_POWER_STATE_MASK         0x000000C0
21892d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_FUNC1_POWER_STATE_SHIFT        6
21902d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_LAN1_VALID                     0x00000100
21912d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_FUNC1_AUX_EN                   0x00000200
21922d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_FUNC2_POWER_STATE_MASK         0x00003000
21932d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_FUNC2_POWER_STATE_SHIFT        12
21942d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_IDE_ENABLE                     0x00004000
21952d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_FUNC2_AUX_EN                   0x00008000
21962d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_FUNC3_POWER_STATE_MASK         0x000C0000
21972d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_FUNC3_POWER_STATE_SHIFT        18
21982d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_SP_ENABLE                      0x00100000
21992d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_FUNC3_AUX_EN                   0x00200000
22002d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_FUNC4_POWER_STATE_MASK         0x03000000
22012d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_FUNC4_POWER_STATE_SHIFT        24
22022d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_IPMI_ENABLE                    0x04000000
22032d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_FUNC4_AUX_EN                   0x08000000
22042d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_MNGCG                          0x20000000
22052d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_LAN_FUNC_SEL                   0x40000000
22062d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_FACTPS_PM_STATE_CHANGED               0x80000000
22072d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
2208caeccb682a2483a79162bb66a431175d4134ae0bJeff Kirsher/* PCI-Ex Config Space */
2209caeccb682a2483a79162bb66a431175d4134ae0bJeff Kirsher#define PCI_EX_LINK_STATUS           0x12
2210caeccb682a2483a79162bb66a431175d4134ae0bJeff Kirsher#define PCI_EX_LINK_WIDTH_MASK       0x3F0
2211caeccb682a2483a79162bb66a431175d4134ae0bJeff Kirsher#define PCI_EX_LINK_WIDTH_SHIFT      4
2212caeccb682a2483a79162bb66a431175d4134ae0bJeff Kirsher
22131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* EEPROM Commands - Microwire */
2214120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_READ_OPCODE_MICROWIRE  0x6	/* EEPROM read opcode */
2215120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_WRITE_OPCODE_MICROWIRE 0x5	/* EEPROM write opcode */
2216120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_ERASE_OPCODE_MICROWIRE 0x7	/* EEPROM erase opcode */
2217120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_EWEN_OPCODE_MICROWIRE  0x13	/* EEPROM erase/write enable */
2218120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_EWDS_OPCODE_MICROWIRE  0x10	/* EEPROM erase/write disable */
22191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
22201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* EEPROM Commands - SPI */
2221120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_MAX_RETRY_SPI        5000	/* Max wait of 5ms, for RDY signal */
2222120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_READ_OPCODE_SPI      0x03	/* EEPROM read opcode */
2223120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_WRITE_OPCODE_SPI     0x02	/* EEPROM write opcode */
2224120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_A8_OPCODE_SPI        0x08	/* opcode bit-3 = address bit-8 */
2225120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_WREN_OPCODE_SPI      0x06	/* EEPROM set Write Enable latch */
2226120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_WRDI_OPCODE_SPI      0x04	/* EEPROM reset Write Enable latch */
2227120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_RDSR_OPCODE_SPI      0x05	/* EEPROM read Status register */
2228120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_WRSR_OPCODE_SPI      0x01	/* EEPROM write Status register */
2229120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_ERASE4K_OPCODE_SPI   0x20	/* EEPROM ERASE 4KB */
2230120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_ERASE64K_OPCODE_SPI  0xD8	/* EEPROM ERASE 64KB */
2231120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_ERASE256_OPCODE_SPI  0xDB	/* EEPROM ERASE 256B */
22321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
22331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* EEPROM Size definitions */
22342d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define EEPROM_WORD_SIZE_SHIFT  6
22352d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define EEPROM_SIZE_SHIFT       10
22361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_SIZE_MASK        0x1C00
22371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
22381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* EEPROM Word Offsets */
22391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_COMPAT                 0x0003
22401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_ID_LED_SETTINGS        0x0004
2241868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define EEPROM_VERSION                0x0005
2242120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define EEPROM_SERDES_AMPLITUDE       0x0006	/* For SERDES output amplitude adjustment. */
22431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_PHY_CLASS_WORD         0x0007
22441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_INIT_CONTROL1_REG      0x000A
22451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_INIT_CONTROL2_REG      0x000F
2246d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define EEPROM_SWDEF_PINS_CTRL_PORT_1 0x0010
22471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_INIT_CONTROL3_PORT_B   0x0014
224885b22eb632dc75887ba99edad49307a02c2ae7ecJeff Kirsher#define EEPROM_INIT_3GIO_3            0x001A
2249d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define EEPROM_SWDEF_PINS_CTRL_PORT_0 0x0020
22501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_INIT_CONTROL3_PORT_A   0x0024
22511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_CFG                    0x0012
22521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_FLASH_VERSION          0x0032
22531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_CHECKSUM_REG           0x003F
22541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2255120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EEPROM_CFG_DONE         0x00040000	/* MNG config cycle done */
2256120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_EEPROM_CFG_DONE_PORT_1  0x00080000	/* ...for second port */
2257868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala
22581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Word definitions for ID LED Settings */
22591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ID_LED_RESERVED_0000 0x0000
22601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ID_LED_RESERVED_FFFF 0xFFFF
22611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ID_LED_DEFAULT       ((ID_LED_OFF1_ON2 << 12) | \
22621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds                              (ID_LED_OFF1_OFF2 << 8) | \
22631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds                              (ID_LED_DEF1_DEF2 << 4) | \
22641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds                              (ID_LED_DEF1_DEF2))
22651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ID_LED_DEF1_DEF2     0x1
22661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ID_LED_DEF1_ON2      0x2
22671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ID_LED_DEF1_OFF2     0x3
22681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ID_LED_ON1_DEF2      0x4
22691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ID_LED_ON1_ON2       0x5
22701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ID_LED_ON1_OFF2      0x6
22711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ID_LED_OFF1_DEF2     0x7
22721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ID_LED_OFF1_ON2      0x8
22731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ID_LED_OFF1_OFF2     0x9
22741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
22751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP_ACTIVITY_LED_MASK   0xFFFFF0FF
22761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP_ACTIVITY_LED_ENABLE 0x0300
22771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP_LED3_MODE           0x07000000
22781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
22791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Mask bits for SERDES amplitude adjustment in Word 6 of the EEPROM */
22801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_SERDES_AMPLITUDE_MASK  0x000F
22811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
22821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Mask bit for PHY class in Word 7 of the EEPROM */
22831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_PHY_CLASS_A   0x8000
22841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
22851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Mask bits for fields in Word 0x0a of the EEPROM */
22861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_WORD0A_ILOS   0x0010
22871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_WORD0A_SWDPIO 0x01E0
22881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_WORD0A_LRST   0x0200
22891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_WORD0A_FD     0x0400
22901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_WORD0A_66MHZ  0x0800
22911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
22921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Mask bits for fields in Word 0x0f of the EEPROM */
22931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_WORD0F_PAUSE_MASK 0x3000
22941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_WORD0F_PAUSE      0x1000
22951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_WORD0F_ASM_DIR    0x2000
22961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_WORD0F_ANE        0x0800
22971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_WORD0F_SWPDIO_EXT 0x00F0
2298d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define EEPROM_WORD0F_LPLU       0x0001
2299d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
2300d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok/* Mask bits for fields in Word 0x10/0x20 of the EEPROM */
2301d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define EEPROM_WORD1020_GIGA_DISABLE         0x0010
2302d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define EEPROM_WORD1020_GIGA_DISABLE_NON_D0A 0x0008
23031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
230485b22eb632dc75887ba99edad49307a02c2ae7ecJeff Kirsher/* Mask bits for fields in Word 0x1a of the EEPROM */
230585b22eb632dc75887ba99edad49307a02c2ae7ecJeff Kirsher#define EEPROM_WORD1A_ASPM_MASK  0x000C
230685b22eb632dc75887ba99edad49307a02c2ae7ecJeff Kirsher
23071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* For checksumming, the sum of all words in the EEPROM should equal 0xBABA. */
23081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_SUM 0xBABA
23091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
23101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* EEPROM Map defines (WORD OFFSETS)*/
23111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_NODE_ADDRESS_BYTE_0 0
23121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_PBA_BYTE_1          8
23131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
23141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_RESERVED_WORD          0xFFFF
23151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
23161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* EEPROM Map Sizes (Byte Counts) */
23171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PBA_SIZE 4
23181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
23191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Collision related configuration parameters */
23201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_COLLISION_THRESHOLD       15
23211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CT_SHIFT                  4
23220fadb0597d240d4ed279042cab632d567510a1a3Jeff Kirsher/* Collision distance is a 0-based value that applies to
23230fadb0597d240d4ed279042cab632d567510a1a3Jeff Kirsher * half-duplex-capable hardware only. */
23240fadb0597d240d4ed279042cab632d567510a1a3Jeff Kirsher#define E1000_COLLISION_DISTANCE        63
23250fadb0597d240d4ed279042cab632d567510a1a3Jeff Kirsher#define E1000_COLLISION_DISTANCE_82542  64
23261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_FDX_COLLISION_DISTANCE    E1000_COLLISION_DISTANCE
23271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_HDX_COLLISION_DISTANCE    E1000_COLLISION_DISTANCE
23281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_COLD_SHIFT                12
23291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
23301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Number of Transmit and Receive Descriptors must be a multiple of 8 */
23311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REQ_TX_DESCRIPTOR_MULTIPLE  8
23321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REQ_RX_DESCRIPTOR_MULTIPLE  8
23331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
23341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Default values for the transmit IPG register */
23351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DEFAULT_82542_TIPG_IPGT        10
23361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DEFAULT_82543_TIPG_IPGT_FIBER  9
23371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DEFAULT_82543_TIPG_IPGT_COPPER 8
23381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
23391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_TIPG_IPGT_MASK  0x000003FF
23401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_TIPG_IPGR1_MASK 0x000FFC00
23411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_TIPG_IPGR2_MASK 0x3FF00000
23421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
23431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DEFAULT_82542_TIPG_IPGR1 2
23441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DEFAULT_82543_TIPG_IPGR1 8
23451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_TIPG_IPGR1_SHIFT  10
23461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
23471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DEFAULT_82542_TIPG_IPGR2 10
23481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DEFAULT_82543_TIPG_IPGR2 6
23491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_TIPG_IPGR2_SHIFT  20
23501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
23511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_TXDMAC_DPP 0x00000001
23521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
23531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Adaptive IFS defines */
23541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TX_THRESHOLD_START     8
23551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TX_THRESHOLD_INCREMENT 10
23561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TX_THRESHOLD_DECREMENT 1
23571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TX_THRESHOLD_STOP      190
23581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TX_THRESHOLD_DISABLE   0
23591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TX_THRESHOLD_TIMER_MS  10000
23601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MIN_NUM_XMITS          1000
23611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IFS_MAX                80
23621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IFS_STEP               10
23631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IFS_MIN                40
23641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IFS_RATIO              4
23651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
23662d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* Extended Configuration Control and Size */
23672d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_EXTCNF_CTRL_PCIE_WRITE_ENABLE 0x00000001
23682d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_EXTCNF_CTRL_PHY_WRITE_ENABLE  0x00000002
23692d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_EXTCNF_CTRL_D_UD_ENABLE       0x00000004
23702d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_EXTCNF_CTRL_D_UD_LATENCY      0x00000008
23712d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_EXTCNF_CTRL_D_UD_OWNER        0x00000010
23722d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP 0x00000020
23732d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_EXTCNF_CTRL_MDIO_HW_OWNERSHIP 0x00000040
2374d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_EXTCNF_CTRL_EXT_CNF_POINTER   0x0FFF0000
23752d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
23762d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_EXTCNF_SIZE_EXT_PHY_LENGTH    0x000000FF
23772d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_EXTCNF_SIZE_EXT_DOCK_LENGTH   0x0000FF00
23782d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH   0x00FF0000
2379d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE  0x00000001
2380d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_EXTCNF_CTRL_SWFLAG            0x00000020
23812d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
23821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PBA constants */
2383120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PBA_8K 0x0008	/* 8KB, default Rx allocation */
2384120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PBA_12K 0x000C	/* 12KB, default Rx allocation */
2385120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PBA_16K 0x0010	/* 16KB, default TX allocation */
2386018ea44ef1eade417296c4a57afe3cd963268433Bruce Allan#define E1000_PBA_20K 0x0014
23871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_PBA_22K 0x0016
23881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_PBA_24K 0x0018
23891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_PBA_30K 0x001E
2390868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_PBA_32K 0x0020
2391d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_PBA_34K 0x0022
2392868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define E1000_PBA_38K 0x0026
23931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_PBA_40K 0x0028
2394120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define E1000_PBA_48K 0x0030	/* 48KB, default RX allocation */
23951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2396d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define E1000_PBS_16K E1000_PBA_16K
2397d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
23981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Flow Control Constants */
23991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLOW_CONTROL_ADDRESS_LOW  0x00C28001
24001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLOW_CONTROL_ADDRESS_HIGH 0x00000100
24011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FLOW_CONTROL_TYPE         0x8808
24021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* The historical defaults for the flow control values are given below. */
2404120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define FC_DEFAULT_HI_THRESH        (0x8000)	/* 32KB */
2405120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define FC_DEFAULT_LO_THRESH        (0x4000)	/* 16KB */
2406120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define FC_DEFAULT_TX_TIMER         (0x100)	/* ~130 us */
24071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PCIX Config space */
24091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCIX_COMMAND_REGISTER    0xE6
24101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCIX_STATUS_REGISTER_LO  0xE8
24111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCIX_STATUS_REGISTER_HI  0xEA
24121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCIX_COMMAND_MMRBC_MASK      0x000C
24141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCIX_COMMAND_MMRBC_SHIFT     0x2
24151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCIX_STATUS_HI_MMRBC_MASK    0x0060
24161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCIX_STATUS_HI_MMRBC_SHIFT   0x5
24171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCIX_STATUS_HI_MMRBC_4K      0x3
24181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCIX_STATUS_HI_MMRBC_2K      0x2
24191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Number of bits required to shift right the "pause" bits from the
24211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * EEPROM (bits 13:12) to the "pause" (bits 8:7) field in the TXCW register.
24221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
24231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PAUSE_SHIFT 5
24241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Number of bits required to shift left the "SWDPIO" bits from the
24261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * EEPROM (bits 8:5) to the "SWDPIO" (bits 25:22) field in the CTRL register.
24271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
24281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SWDPIO_SHIFT 17
24291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Number of bits required to shift left the "SWDPIO_EXT" bits from the
24311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * EEPROM word F (bits 7:4) to the bits 11:8 of The Extended CTRL register.
24321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
24331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SWDPIO__EXT_SHIFT 4
24341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Number of bits required to shift left the "ILOS" bit from the EEPROM
24361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * (bit 4) to the "ILOS" (bit 7) field in the CTRL register.
24371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
24381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ILOS_SHIFT  3
24391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RECEIVE_BUFFER_ALIGN_SIZE  (256)
24411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Number of milliseconds we wait for auto-negotiation to complete */
24431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LINK_UP_TIMEOUT             500
24441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24452d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* Number of milliseconds we wait for Eeprom auto read bit done after MAC reset */
24462d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define AUTO_READ_DONE_TIMEOUT      10
24472d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* Number of milliseconds we wait for PHY configuration done after MAC reset */
2448d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define PHY_CFG_TIMEOUT             100
24492d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
2450406874a7ccee927049b1c182df69457718b938daJoe Perches#define E1000_TX_BUFFER_SIZE ((u32)1514)
24511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* The carrier extension symbol, as received by the NIC. */
24531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CARRIER_EXTENSION   0x0F
24541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* TBI_ACCEPT macro definition:
24561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
24571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This macro requires:
24581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *      adapter = a pointer to struct e1000_hw
24591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *      status = the 8 bit status field of the RX descriptor with EOP set
24601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *      error = the 8 bit error field of the RX descriptor with EOP set
24611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *      length = the sum of all the length fields of the RX descriptors that
24621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *               make up the current frame
24631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *      last_byte = the last byte of the frame DMAed by the hardware
24641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *      max_frame_length = the maximum frame length we want to accept.
24651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *      min_frame_length = the minimum frame length we want to accept.
24661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
24671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This macro is a conditional that should be used in the interrupt
24681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * handler's Rx processing routine when RxErrors have been detected.
24691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
24701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Typical use:
24711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  ...
24721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  if (TBI_ACCEPT) {
2473c3033b01d763aff572080db09ddcebed115b9cf5Joe Perches *      accept_frame = true;
24741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *      e1000_tbi_adjust_stats(adapter, MacAddress);
24751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *      frame_length--;
24761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  } else {
2477c3033b01d763aff572080db09ddcebed115b9cf5Joe Perches *      accept_frame = false;
24781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  }
24791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  ...
24801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
24811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TBI_ACCEPT(adapter, status, errors, length, last_byte) \
24831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    ((adapter)->tbi_compatibility_on && \
24841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds     (((errors) & E1000_RXD_ERR_FRAME_ERR_MASK) == E1000_RXD_ERR_CE) && \
24851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds     ((last_byte) == CARRIER_EXTENSION) && \
24861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds     (((status) & E1000_RXD_STAT_VP) ? \
24871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds          (((length) > ((adapter)->min_frame_size - VLAN_TAG_SIZE)) && \
24881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds           ((length) <= ((adapter)->max_frame_size + 1))) : \
24891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds          (((length) > (adapter)->min_frame_size) && \
24901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds           ((length) <= ((adapter)->max_frame_size + VLAN_TAG_SIZE + 1)))))
24911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Structures, enums, and macros for the PHY */
24931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Bit definitions for the Management Data IO (MDIO) and Management Data
24951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Clock (MDC) pins in the Device Control Register.
24961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
24971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_PHY_RESET_DIR  E1000_CTRL_SWDPIO0
24981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_PHY_RESET      E1000_CTRL_SWDPIN0
24991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_MDIO_DIR       E1000_CTRL_SWDPIO2
25001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_MDIO           E1000_CTRL_SWDPIN2
25011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_MDC_DIR        E1000_CTRL_SWDPIO3
25021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_MDC            E1000_CTRL_SWDPIN3
25031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_PHY_RESET_DIR4 E1000_CTRL_EXT_SDP4_DIR
25041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_CTRL_PHY_RESET4     E1000_CTRL_EXT_SDP4_DATA
25051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
25061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PHY 1000 MII Register/Bit Definitions */
25071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PHY Registers defined by IEEE */
2508120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_CTRL         0x00	/* Control Register */
2509120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_STATUS       0x01	/* Status Register */
2510120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_ID1          0x02	/* Phy Id Reg (word 1) */
2511120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_ID2          0x03	/* Phy Id Reg (word 2) */
2512120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_AUTONEG_ADV  0x04	/* Autoneg Advertisement */
2513120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_LP_ABILITY   0x05	/* Link Partner Ability (Base Page) */
2514120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_AUTONEG_EXP  0x06	/* Autoneg Expansion Reg */
2515120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_NEXT_PAGE_TX 0x07	/* Next Page TX */
2516120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_LP_NEXT_PAGE 0x08	/* Link Partner Next Page */
2517120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_1000T_CTRL   0x09	/* 1000Base-T Control Reg */
2518120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_1000T_STATUS 0x0A	/* 1000Base-T Status Reg */
2519120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_EXT_STATUS   0x0F	/* Extended Status Reg */
2520120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg
2521120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MAX_PHY_REG_ADDRESS        0x1F	/* 5 bit address bus (0-0x1F) */
2522120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MAX_PHY_MULTI_PAGE_REG     0xF	/* Registers equal on all pages */
25231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
25241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* M88E1000 Specific Registers */
2525120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PHY_SPEC_CTRL     0x10	/* PHY Specific Control Register */
2526120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PHY_SPEC_STATUS   0x11	/* PHY Specific Status Register */
2527120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_INT_ENABLE        0x12	/* Interrupt Enable Register */
2528120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_INT_STATUS        0x13	/* Interrupt Status Register */
2529120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_EXT_PHY_SPEC_CTRL 0x14	/* Extended PHY Specific Control */
2530120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_RX_ERR_CNTR       0x15	/* Receive Error Counter */
2531120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg
2532120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PHY_EXT_CTRL      0x1A	/* PHY extend control register */
2533120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PHY_PAGE_SELECT   0x1D	/* Reg 29 for page number setting */
2534120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PHY_GEN_CONTROL   0x1E	/* Its meaning depends on reg 29 */
2535120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PHY_VCO_REG_BIT8  0x100	/* Bits 8 & 11 are adjusted for */
2536120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PHY_VCO_REG_BIT11 0x800	/* improved BER performance */
25371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
25381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_IEEE_REGS_PAGE  0x0000
25391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_IEEE_RESTART_AUTONEG 0x3300
25401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_IEEE_FORCE_GIGA      0x0140
25411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
25421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IGP01E1000 Specific Registers */
2543120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_PHY_PORT_CONFIG 0x10	/* PHY Specific Port Config Register */
2544120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_PHY_PORT_STATUS 0x11	/* PHY Specific Status Register */
2545120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_PHY_PORT_CTRL   0x12	/* PHY Specific Control Register */
2546120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_PHY_LINK_HEALTH 0x13	/* PHY Link Health Register */
2547120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_GMII_FIFO       0x14	/* GMII FIFO Register */
2548120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_PHY_CHANNEL_QUALITY 0x15	/* PHY Channel Quality Register */
25492d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define IGP02E1000_PHY_POWER_MGMT      0x19
2550120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_PHY_PAGE_SELECT     0x1F	/* PHY Page Select Core Register */
25511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
25521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IGP01E1000 AGC Registers - stores the cable length values*/
25531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_AGC_A        0x1172
25541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_AGC_B        0x1272
25551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_AGC_C        0x1472
25561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_AGC_D        0x1872
25571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
25582d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* IGP02E1000 AGC Registers for cable length values */
25592d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define IGP02E1000_PHY_AGC_A        0x11B1
25602d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define IGP02E1000_PHY_AGC_B        0x12B1
25612d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define IGP02E1000_PHY_AGC_C        0x14B1
25622d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define IGP02E1000_PHY_AGC_D        0x18B1
25632d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
25641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IGP01E1000 DSP Reset Register */
25651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_DSP_RESET   0x1F33
25661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_DSP_SET     0x1F71
25671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_DSP_FFE     0x1F35
25681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
25691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_CHANNEL_NUM    4
25702d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define IGP02E1000_PHY_CHANNEL_NUM    4
25712d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
25721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_AGC_PARAM_A    0x1171
25731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_AGC_PARAM_B    0x1271
25741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_AGC_PARAM_C    0x1471
25751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_AGC_PARAM_D    0x1871
25761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
25771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_EDAC_MU_INDEX        0xC000
25781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_EDAC_SIGN_EXT_9_BITS 0x8000
25791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
25801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_ANALOG_TX_STATE      0x2890
25811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_ANALOG_CLASS_A       0x2000
25821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_FORCE_ANALOG_ENABLE  0x0004
25831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_DSP_FFE_CM_CP        0x0069
25841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
25851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_DSP_FFE_DEFAULT      0x002A
25861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IGP01E1000 PCS Initialization register - stores the polarity status when
25871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * speed = 1000 Mbps. */
25881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_PCS_INIT_REG  0x00B4
25891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_PCS_CTRL_REG  0x00B5
25901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
25911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_ANALOG_REGS_PAGE  0x20C0
25921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
25931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PHY Control Register */
2594120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_CR_SPEED_SELECT_MSB 0x0040	/* bits 6,13: 10=1000, 01=100, 00=10 */
2595120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_CR_COLL_TEST_ENABLE 0x0080	/* Collision test enable */
2596120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_CR_FULL_DUPLEX      0x0100	/* FDX =1, half duplex =0 */
2597120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_CR_RESTART_AUTO_NEG 0x0200	/* Restart auto negotiation */
2598120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_CR_ISOLATE          0x0400	/* Isolate PHY from MII */
2599120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_CR_POWER_DOWN       0x0800	/* Power down */
2600120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_CR_AUTO_NEG_EN      0x1000	/* Auto Neg Enable */
2601120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_CR_SPEED_SELECT_LSB 0x2000	/* bits 6,13: 10=1000, 01=100, 00=10 */
2602120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_CR_LOOPBACK         0x4000	/* 0 = normal, 1 = loopback */
2603120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_CR_RESET            0x8000	/* 0 = normal, 1 = PHY reset */
26041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
26051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PHY Status Register */
2606120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_SR_EXTENDED_CAPS     0x0001	/* Extended register capabilities */
2607120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_SR_JABBER_DETECT     0x0002	/* Jabber Detected */
2608120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_SR_LINK_STATUS       0x0004	/* Link Status 1 = link */
2609120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_SR_AUTONEG_CAPS      0x0008	/* Auto Neg Capable */
2610120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_SR_REMOTE_FAULT      0x0010	/* Remote Fault Detect */
2611120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_SR_AUTONEG_COMPLETE  0x0020	/* Auto Neg Complete */
2612120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_SR_PREAMBLE_SUPPRESS 0x0040	/* Preamble may be suppressed */
2613120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_SR_EXTENDED_STATUS   0x0100	/* Ext. status info in Reg 0x0F */
2614120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_SR_100T2_HD_CAPS     0x0200	/* 100T2 Half Duplex Capable */
2615120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_SR_100T2_FD_CAPS     0x0400	/* 100T2 Full Duplex Capable */
2616120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_SR_10T_HD_CAPS       0x0800	/* 10T   Half Duplex Capable */
2617120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_SR_10T_FD_CAPS       0x1000	/* 10T   Full Duplex Capable */
2618120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_SR_100X_HD_CAPS      0x2000	/* 100X  Half Duplex Capable */
2619120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_SR_100X_FD_CAPS      0x4000	/* 100X  Full Duplex Capable */
2620120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define MII_SR_100T4_CAPS        0x8000	/* 100T4 Capable */
26211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
26221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Autoneg Advertisement Register */
2623120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_AR_SELECTOR_FIELD 0x0001	/* indicates IEEE 802.3 CSMA/CD */
2624120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_AR_10T_HD_CAPS    0x0020	/* 10T   Half Duplex Capable */
2625120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_AR_10T_FD_CAPS    0x0040	/* 10T   Full Duplex Capable */
2626120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_AR_100TX_HD_CAPS  0x0080	/* 100TX Half Duplex Capable */
2627120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_AR_100TX_FD_CAPS  0x0100	/* 100TX Full Duplex Capable */
2628120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_AR_100T4_CAPS     0x0200	/* 100T4 Capable */
2629120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_AR_PAUSE          0x0400	/* Pause operation desired */
2630120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_AR_ASM_DIR        0x0800	/* Asymmetric Pause Direction bit */
2631120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_AR_REMOTE_FAULT   0x2000	/* Remote Fault detected */
2632120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_AR_NEXT_PAGE      0x8000	/* Next Page ability supported */
26331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
26341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Link Partner Ability Register (Base Page) */
2635120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_LPAR_SELECTOR_FIELD 0x0000	/* LP protocol selector field */
2636120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_LPAR_10T_HD_CAPS    0x0020	/* LP is 10T   Half Duplex Capable */
2637120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_LPAR_10T_FD_CAPS    0x0040	/* LP is 10T   Full Duplex Capable */
2638120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_LPAR_100TX_HD_CAPS  0x0080	/* LP is 100TX Half Duplex Capable */
2639120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_LPAR_100TX_FD_CAPS  0x0100	/* LP is 100TX Full Duplex Capable */
2640120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_LPAR_100T4_CAPS     0x0200	/* LP is 100T4 Capable */
2641120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_LPAR_PAUSE          0x0400	/* LP Pause operation desired */
2642120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_LPAR_ASM_DIR        0x0800	/* LP Asymmetric Pause Direction bit */
2643120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_LPAR_REMOTE_FAULT   0x2000	/* LP has detected Remote Fault */
2644120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_LPAR_ACKNOWLEDGE    0x4000	/* LP has rx'd link code word */
2645120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_LPAR_NEXT_PAGE      0x8000	/* Next Page ability supported */
26461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
26471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Autoneg Expansion Register */
2648120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_ER_LP_NWAY_CAPS      0x0001	/* LP has Auto Neg Capability */
2649120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_ER_PAGE_RXD          0x0002	/* LP is 10T   Half Duplex Capable */
2650120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_ER_NEXT_PAGE_CAPS    0x0004	/* LP is 10T   Full Duplex Capable */
2651120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_ER_LP_NEXT_PAGE_CAPS 0x0008	/* LP is 100TX Half Duplex Capable */
2652120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NWAY_ER_PAR_DETECT_FAULT  0x0010	/* LP is 100TX Full Duplex Capable */
26531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
26541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Next Page TX Register */
2655120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NPTX_MSG_CODE_FIELD 0x0001	/* NP msg code or unformatted data */
2656120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NPTX_TOGGLE         0x0800	/* Toggles between exchanges
2657120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 * of different NP
2658120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 */
2659120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NPTX_ACKNOWLDGE2    0x1000	/* 1 = will comply with msg
2660120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 * 0 = cannot comply with msg
2661120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 */
2662120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NPTX_MSG_PAGE       0x2000	/* formatted(1)/unformatted(0) pg */
2663120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define NPTX_NEXT_PAGE      0x8000	/* 1 = addition NP will follow
2664120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 * 0 = sending last NP
2665120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 */
26661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
26671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Link Partner Next Page Register */
2668120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define LP_RNPR_MSG_CODE_FIELD 0x0001	/* NP msg code or unformatted data */
2669120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define LP_RNPR_TOGGLE         0x0800	/* Toggles between exchanges
2670120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 * of different NP
2671120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 */
2672120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define LP_RNPR_ACKNOWLDGE2    0x1000	/* 1 = will comply with msg
2673120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 * 0 = cannot comply with msg
2674120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 */
2675120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define LP_RNPR_MSG_PAGE       0x2000	/* formatted(1)/unformatted(0) pg */
2676120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define LP_RNPR_ACKNOWLDGE     0x4000	/* 1 = ACK / 0 = NO ACK */
2677120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define LP_RNPR_NEXT_PAGE      0x8000	/* 1 = addition NP will follow
2678120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 * 0 = sending last NP
2679120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 */
26801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
26811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1000BASE-T Control Register */
2682120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define CR_1000T_ASYM_PAUSE      0x0080	/* Advertise asymmetric pause bit */
2683120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define CR_1000T_HD_CAPS         0x0100	/* Advertise 1000T HD capability */
2684120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define CR_1000T_FD_CAPS         0x0200	/* Advertise 1000T FD capability  */
2685120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define CR_1000T_REPEATER_DTE    0x0400	/* 1=Repeater/switch device port */
2686120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					/* 0=DTE device */
2687120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define CR_1000T_MS_VALUE        0x0800	/* 1=Configure PHY as Master */
2688120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					/* 0=Configure PHY as Slave */
2689120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define CR_1000T_MS_ENABLE       0x1000	/* 1=Master/Slave manual config value */
2690120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					/* 0=Automatic Master/Slave config */
2691120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define CR_1000T_TEST_MODE_NORMAL 0x0000	/* Normal Operation */
2692120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define CR_1000T_TEST_MODE_1     0x2000	/* Transmit Waveform test */
2693120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define CR_1000T_TEST_MODE_2     0x4000	/* Master Transmit Jitter test */
2694120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define CR_1000T_TEST_MODE_3     0x6000	/* Slave Transmit Jitter test */
2695120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define CR_1000T_TEST_MODE_4     0x8000	/* Transmitter Distortion test */
26961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
26971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1000BASE-T Status Register */
2698120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define SR_1000T_IDLE_ERROR_CNT   0x00FF	/* Num idle errors since last read */
2699120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define SR_1000T_ASYM_PAUSE_DIR   0x0100	/* LP asymmetric pause direction bit */
2700120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define SR_1000T_LP_HD_CAPS       0x0400	/* LP is 1000T HD capable */
2701120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define SR_1000T_LP_FD_CAPS       0x0800	/* LP is 1000T FD capable */
2702120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define SR_1000T_REMOTE_RX_STATUS 0x1000	/* Remote receiver OK */
2703120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define SR_1000T_LOCAL_RX_STATUS  0x2000	/* Local receiver OK */
2704120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define SR_1000T_MS_CONFIG_RES    0x4000	/* 1=Local TX is Master, 0=Slave */
2705120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define SR_1000T_MS_CONFIG_FAULT  0x8000	/* Master/Slave config fault */
27061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SR_1000T_REMOTE_RX_STATUS_SHIFT          12
27071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SR_1000T_LOCAL_RX_STATUS_SHIFT           13
27081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SR_1000T_PHY_EXCESSIVE_IDLE_ERR_COUNT    5
27091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FFE_IDLE_ERR_COUNT_TIMEOUT_20            20
27101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FFE_IDLE_ERR_COUNT_TIMEOUT_100           100
27111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
27121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Extended Status Register */
2713120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IEEE_ESR_1000T_HD_CAPS 0x1000	/* 1000T HD capable */
2714120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IEEE_ESR_1000T_FD_CAPS 0x2000	/* 1000T FD capable */
2715120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IEEE_ESR_1000X_HD_CAPS 0x4000	/* 1000X HD capable */
2716120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IEEE_ESR_1000X_FD_CAPS 0x8000	/* 1000X FD capable */
27171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2718120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_TX_POLARITY_MASK   0x0100	/* register 10h bit 8 (polarity bit) */
2719120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_TX_NORMAL_POLARITY 0	/* register 10h bit 8 (normal polarity) */
27201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2721120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define AUTO_POLARITY_DISABLE  0x0010	/* register 11h bit 4 */
2722120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg				      /* (0=enable, 1=disable) */
27231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
27241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* M88E1000 PHY Specific Control Register */
2725120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSCR_JABBER_DISABLE    0x0001	/* 1=Jabber Function disabled */
2726120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSCR_POLARITY_REVERSAL 0x0002	/* 1=Polarity Reversal enabled */
2727120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSCR_SQE_TEST          0x0004	/* 1=SQE Test enabled */
2728120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSCR_CLK125_DISABLE    0x0010	/* 1=CLK125 low,
2729120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						 * 0=CLK125 toggling
2730120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						 */
2731120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSCR_MDI_MANUAL_MODE  0x0000	/* MDI Crossover Mode bits 6:5 */
2732120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					       /* Manual MDI configuration */
2733120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSCR_MDIX_MANUAL_MODE 0x0020	/* Manual MDIX configuration */
2734120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSCR_AUTO_X_1000T     0x0040	/* 1000BASE-T: Auto crossover,
2735120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						 *  100BASE-TX/10BASE-T:
2736120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						 *  MDI Mode
2737120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						 */
2738120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSCR_AUTO_X_MODE      0x0060	/* Auto crossover enabled
2739120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						 * all speeds.
2740120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						 */
27411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_PSCR_10BT_EXT_DIST_ENABLE 0x0080
2742120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					/* 1=Enable Extended 10BASE-T distance
2743120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 * (Lower 10BASE-T RX Threshold)
2744120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 * 0=Normal 10BASE-T RX Threshold */
27451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_PSCR_MII_5BIT_ENABLE      0x0100
2746120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					/* 1=5-Bit interface in 100BASE-TX
2747120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg					 * 0=MII interface in 100BASE-TX */
2748120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSCR_SCRAMBLER_DISABLE    0x0200	/* 1=Scrambler disable */
2749120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSCR_FORCE_LINK_GOOD      0x0400	/* 1=Force link good */
2750120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSCR_ASSERT_CRS_ON_TX     0x0800	/* 1=Assert CRS on Transmit */
27511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
27521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_PSCR_POLARITY_REVERSAL_SHIFT    1
27531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_PSCR_AUTO_X_MODE_SHIFT          5
27541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_PSCR_10BT_EXT_DIST_ENABLE_SHIFT 7
27551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
27561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* M88E1000 PHY Specific Status Register */
2757120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSSR_JABBER             0x0001	/* 1=Jabber */
2758120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSSR_REV_POLARITY       0x0002	/* 1=Polarity reversed */
2759120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSSR_DOWNSHIFT          0x0020	/* 1=Downshifted */
2760120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSSR_MDIX               0x0040	/* 1=MDIX; 0=MDI */
2761120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSSR_CABLE_LENGTH       0x0380	/* 0=<50M;1=50-80M;2=80-110M;
2762120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						 * 3=110-140M;4=>140M */
2763120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSSR_LINK               0x0400	/* 1=Link up, 0=Link down */
2764120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSSR_SPD_DPLX_RESOLVED  0x0800	/* 1=Speed & Duplex resolved */
2765120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSSR_PAGE_RCVD          0x1000	/* 1=Page received */
2766120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSSR_DPLX               0x2000	/* 1=Duplex 0=Half Duplex */
2767120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSSR_SPEED              0xC000	/* Speed, bits 14:15 */
2768120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSSR_10MBS              0x0000	/* 00=10Mbs */
2769120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSSR_100MBS             0x4000	/* 01=100Mbs */
2770120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_PSSR_1000MBS            0x8000	/* 10=1000Mbs */
27711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
27721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_PSSR_REV_POLARITY_SHIFT 1
27731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_PSSR_DOWNSHIFT_SHIFT    5
27741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_PSSR_MDIX_SHIFT         6
27751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_PSSR_CABLE_LENGTH_SHIFT 7
27761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
27771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* M88E1000 Extended PHY Specific Control Register */
2778120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_EPSCR_FIBER_LOOPBACK 0x4000	/* 1=Fiber loopback */
2779120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_EPSCR_DOWN_NO_IDLE   0x8000	/* 1=Lost lock detect enabled.
2780120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						 * Will assert lost lock and bring
2781120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						 * link down if idle not seen
2782120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						 * within 1ms in 1000BASE-T
2783120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg						 */
27841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Number of times we will attempt to autonegotiate before downshifting if we
27851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * are the master */
27861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK 0x0C00
27871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_EPSCR_MASTER_DOWNSHIFT_1X   0x0000
27881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_EPSCR_MASTER_DOWNSHIFT_2X   0x0400
27891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_EPSCR_MASTER_DOWNSHIFT_3X   0x0800
27901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_EPSCR_MASTER_DOWNSHIFT_4X   0x0C00
27911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Number of times we will attempt to autonegotiate before downshifting if we
27921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * are the slave */
27931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK  0x0300
27941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_EPSCR_SLAVE_DOWNSHIFT_DIS   0x0000
27951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X    0x0100
27961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_EPSCR_SLAVE_DOWNSHIFT_2X    0x0200
27971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_EPSCR_SLAVE_DOWNSHIFT_3X    0x0300
2798120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_EPSCR_TX_CLK_2_5     0x0060	/* 2.5 MHz TX_CLK */
2799120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_EPSCR_TX_CLK_25      0x0070	/* 25  MHz TX_CLK */
2800120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define M88E1000_EPSCR_TX_CLK_0       0x0000	/* NO  TX_CLK */
28011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2802ee04022a21764a12e29eee144b72344ebfe0a55cAuke Kok/* M88EC018 Rev 2 specific DownShift settings */
2803ee04022a21764a12e29eee144b72344ebfe0a55cAuke Kok#define M88EC018_EPSCR_DOWNSHIFT_COUNTER_MASK  0x0E00
2804ee04022a21764a12e29eee144b72344ebfe0a55cAuke Kok#define M88EC018_EPSCR_DOWNSHIFT_COUNTER_1X    0x0000
2805ee04022a21764a12e29eee144b72344ebfe0a55cAuke Kok#define M88EC018_EPSCR_DOWNSHIFT_COUNTER_2X    0x0200
2806ee04022a21764a12e29eee144b72344ebfe0a55cAuke Kok#define M88EC018_EPSCR_DOWNSHIFT_COUNTER_3X    0x0400
2807ee04022a21764a12e29eee144b72344ebfe0a55cAuke Kok#define M88EC018_EPSCR_DOWNSHIFT_COUNTER_4X    0x0600
2808ee04022a21764a12e29eee144b72344ebfe0a55cAuke Kok#define M88EC018_EPSCR_DOWNSHIFT_COUNTER_5X    0x0800
2809ee04022a21764a12e29eee144b72344ebfe0a55cAuke Kok#define M88EC018_EPSCR_DOWNSHIFT_COUNTER_6X    0x0A00
2810ee04022a21764a12e29eee144b72344ebfe0a55cAuke Kok#define M88EC018_EPSCR_DOWNSHIFT_COUNTER_7X    0x0C00
2811ee04022a21764a12e29eee144b72344ebfe0a55cAuke Kok#define M88EC018_EPSCR_DOWNSHIFT_COUNTER_8X    0x0E00
2812ee04022a21764a12e29eee144b72344ebfe0a55cAuke Kok
28131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IGP01E1000 Specific Port Config Register - R/W */
28141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSCFR_AUTO_MDIX_PAR_DETECT  0x0010
28151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSCFR_PRE_EN                0x0020
28161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSCFR_SMART_SPEED           0x0080
28171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSCFR_DISABLE_TPLOOPBACK    0x0100
28181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSCFR_DISABLE_JABBER        0x0400
28191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSCFR_DISABLE_TRANSMIT      0x2000
28201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IGP01E1000 Specific Port Status Register - R/O */
2822120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_PSSR_AUTONEG_FAILED         0x0001	/* RO LH SC */
28231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSSR_POLARITY_REVERSED      0x0002
28241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSSR_CABLE_LENGTH           0x007C
28251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSSR_FULL_DUPLEX            0x0200
28261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSSR_LINK_UP                0x0400
28271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSSR_MDIX                   0x0800
2828120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_PSSR_SPEED_MASK             0xC000	/* speed bits mask */
28291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSSR_SPEED_10MBPS           0x4000
28301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSSR_SPEED_100MBPS          0x8000
28311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSSR_SPEED_1000MBPS         0xC000
2832120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_PSSR_CABLE_LENGTH_SHIFT     0x0002	/* shift right 2 */
2833120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_PSSR_MDIX_SHIFT             0x000B	/* shift right 11 */
28341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IGP01E1000 Specific Port Control Register - R/W */
28361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSCR_TP_LOOPBACK            0x0010
28371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSCR_CORRECT_NC_SCMBLR      0x0200
28381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSCR_TEN_CRS_SELECT         0x0400
28391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSCR_FLIP_CHIP              0x0800
28401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PSCR_AUTO_MDIX              0x1000
2841120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_PSCR_FORCE_MDI_MDIX         0x2000	/* 0-MDI, 1-MDIX */
28421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IGP01E1000 Specific Port Link Health Register */
28441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PLHR_SS_DOWNGRADE           0x8000
28451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PLHR_GIG_SCRAMBLER_ERROR    0x4000
28461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PLHR_MASTER_FAULT           0x2000
28471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PLHR_MASTER_RESOLUTION      0x1000
2848120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_PLHR_GIG_REM_RCVR_NOK       0x0800	/* LH */
2849120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_PLHR_IDLE_ERROR_CNT_OFLOW   0x0400	/* LH */
2850120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_PLHR_DATA_ERR_1             0x0200	/* LH */
28511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PLHR_DATA_ERR_0             0x0100
28521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PLHR_AUTONEG_FAULT          0x0040
28531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PLHR_AUTONEG_ACTIVE         0x0010
28541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PLHR_VALID_CHANNEL_D        0x0008
28551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PLHR_VALID_CHANNEL_C        0x0004
28561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PLHR_VALID_CHANNEL_B        0x0002
28571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PLHR_VALID_CHANNEL_A        0x0001
28581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IGP01E1000 Channel Quality Register */
28601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_MSE_CHANNEL_D        0x000F
28611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_MSE_CHANNEL_C        0x00F0
28621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_MSE_CHANNEL_B        0x0F00
28631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_MSE_CHANNEL_A        0xF000
28641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2865120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP02E1000_PM_SPD                         0x0001	/* Smart Power Down */
2866120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP02E1000_PM_D3_LPLU                     0x0004	/* Enable LPLU in non-D0a modes */
2867120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP02E1000_PM_D0_LPLU                     0x0002	/* Enable LPLU in D0a mode */
28682d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
28691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IGP01E1000 DSP reset macros */
28701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DSP_RESET_ENABLE     0x0
28711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DSP_RESET_DISABLE    0x2
28721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_MAX_DSP_RESETS 10
28731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28742d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* IGP01E1000 & IGP02E1000 AGC Registers */
28751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2876120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_AGC_LENGTH_SHIFT 7	/* Coarse - 13:11, Fine - 10:7 */
2877120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP02E1000_AGC_LENGTH_SHIFT 9	/* Coarse - 15:13, Fine - 12:9 */
28782d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
28792d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* IGP02E1000 AGC Register Length 9-bit mask */
28802d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define IGP02E1000_AGC_LENGTH_MASK  0x7F
28811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 7 bits (3 Coarse + 4 Fine) --> 128 optional values */
28831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_AGC_LENGTH_TABLE_SIZE 128
2884868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define IGP02E1000_AGC_LENGTH_TABLE_SIZE 113
28851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28862d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala/* The precision error of the cable length is +/- 10 meters */
28871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_AGC_RANGE    10
2888868d5309942927dc86f57009420c5d366ec05daaMallikarjuna R Chilakala#define IGP02E1000_AGC_RANGE    15
28891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IGP01E1000 PCS Initialization register */
28911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* bits 3:6 in the PCS registers stores the channels polarity */
28921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_PHY_POLARITY_MASK    0x0078
28931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IGP01E1000 GMII FIFO Register */
2895120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_GMII_FLEX_SPD               0x10	/* Enable flexible speed
2896120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg							 * on Link-Up */
2897120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP01E1000_GMII_SPD                    0x20	/* Enable SPD */
28981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IGP01E1000 Analog Register */
29001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_ANALOG_SPARE_FUSE_STATUS       0x20D1
29011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_ANALOG_FUSE_STATUS             0x20D0
29021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_ANALOG_FUSE_CONTROL            0x20DC
29031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_ANALOG_FUSE_BYPASS             0x20DE
29041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_ANALOG_FUSE_POLY_MASK            0xF000
29061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_ANALOG_FUSE_FINE_MASK            0x0F80
29071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_ANALOG_FUSE_COARSE_MASK          0x0070
29081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_ANALOG_SPARE_FUSE_ENABLED        0x0100
29091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_ANALOG_FUSE_ENABLE_SW_CONTROL    0x0002
29101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_ANALOG_FUSE_COARSE_THRESH        0x0040
29121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_ANALOG_FUSE_COARSE_10            0x0010
29131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_ANALOG_FUSE_FINE_1               0x0080
29141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_ANALOG_FUSE_FINE_10              0x0500
29151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Bit definitions for valid PHY IDs. */
29171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* I = Integrated
29181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * E = External
29191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
29202a88c17371c3c263c28330093a4cd21bbeceb677Jeff Kirsher#define M88_VENDOR         0x0141
29211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_E_PHY_ID  0x01410C50
29221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_I_PHY_ID  0x01410C30
29231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1011_I_PHY_ID  0x01410C20
29241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IGP01E1000_I_PHY_ID  0x02A80380
29251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_12_PHY_ID M88E1000_E_PHY_ID
29261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1000_14_PHY_ID M88E1000_E_PHY_ID
29271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define M88E1011_I_REV_4   0x04
29282d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define M88E1111_I_PHY_ID  0x01410CC0
2929cf8e09b06d7ac05de4b6a3f1ee563979e36a46edFlorian Fainelli#define M88E1118_E_PHY_ID  0x01410E40
29302d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define L1LXT971A_PHY_ID   0x001378E0
29311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29325377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define RTL8211B_PHY_ID    0x001CC910
29335377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define RTL8201N_PHY_ID    0x8200
29345377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define RTL_PHY_CTRL_FD    0x0100 /* Full duplex.0=half; 1=full */
29355377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define RTL_PHY_CTRL_SPD_100    0x200000 /* Force 100Mb */
29365377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie
2937d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok/* Bits...
2938d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok * 15-5: page
2939d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok * 4-0: register offset
2940d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok */
2941d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define PHY_PAGE_SHIFT        5
2942d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define PHY_REG(page, reg)    \
2943d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok        (((page) << PHY_PAGE_SHIFT) | ((reg) & MAX_PHY_REG_ADDRESS))
2944d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
2945d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_PHY_PORT_CTRL           \
2946120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg        PHY_REG(769, 17)	/* Port General Configuration */
2947d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_PHY_RATE_ADAPT_CTRL \
2948120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg        PHY_REG(769, 25)	/* Rate Adapter Control Register */
2949d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
2950d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_KMRN_FIFO_CTRL_STATS \
2951120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg        PHY_REG(770, 16)	/* KMRN FIFO's control/status register */
2952d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_KMRN_POWER_MNG_CTRL \
2953120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg        PHY_REG(770, 17)	/* KMRN Power Management Control Register */
2954d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_KMRN_INBAND_CTRL \
2955120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg        PHY_REG(770, 18)	/* KMRN Inband Control Register */
2956d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_KMRN_DIAG \
2957120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg        PHY_REG(770, 19)	/* KMRN Diagnostic register */
2958120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP3_KMRN_DIAG_PCS_LOCK_LOSS 0x0002	/* RX PCS is not synced */
2959d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_KMRN_ACK_TIMEOUT \
2960120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg        PHY_REG(770, 20)	/* KMRN Acknowledge Timeouts register */
2961d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
2962d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_VR_CTRL \
2963120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg        PHY_REG(776, 18)	/* Voltage regulator control register */
2964120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP3_VR_CTRL_MODE_SHUT       0x0200	/* Enter powerdown, shutdown VRs */
2965120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP3_VR_CTRL_MODE_MASK       0x0300	/* Shutdown VR Mask */
2966d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
2967d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_CAPABILITY \
2968120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg        PHY_REG(776, 19)	/* IGP3 Capability Register */
2969d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
2970d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok/* Capabilities for SKU Control  */
2971120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP3_CAP_INITIATE_TEAM       0x0001	/* Able to initiate a team */
2972120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP3_CAP_WFM                 0x0002	/* Support WoL and PXE */
2973120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP3_CAP_ASF                 0x0004	/* Support ASF */
2974120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP3_CAP_LPLU                0x0008	/* Support Low Power Link Up */
2975120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP3_CAP_DC_AUTO_SPEED       0x0010	/* Support AC/DC Auto Link Speed */
2976120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP3_CAP_SPD                 0x0020	/* Support Smart Power Down */
2977120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP3_CAP_MULT_QUEUE          0x0040	/* Support 2 tx & 2 rx queues */
2978120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP3_CAP_RSS                 0x0080	/* Support RSS */
2979120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP3_CAP_8021PQ              0x0100	/* Support 802.1Q & 802.1p */
2980120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP3_CAP_AMT_CB              0x0200	/* Support active manageability and circuit breaker */
2981d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
2982d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_PPC_JORDAN_EN           0x0001
2983d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_PPC_JORDAN_GIGA_SPEED   0x0002
2984d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
2985d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_KMRN_PMC_EE_IDLE_LINK_DIS         0x0001
2986d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_KMRN_PMC_K0S_ENTRY_LATENCY_MASK   0x001E
2987d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_KMRN_PMC_K0S_MODE1_EN_GIGA        0x0020
2988d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_KMRN_PMC_K0S_MODE1_EN_100         0x0040
2989d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
2990120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP3E1000_PHY_MISC_CTRL                0x1B	/* Misc. Ctrl register */
2991120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IGP3_PHY_MISC_DUPLEX_MANUAL_SET        0x1000	/* Duplex Manual Set */
2992d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
2993d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_KMRN_EXT_CTRL  PHY_REG(770, 18)
2994d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP3_KMRN_EC_DIS_INBAND    0x0080
2995d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
2996d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IGP03E1000_E_PHY_ID  0x02A80390
2997120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_E_PHY_ID         0x02A80330	/* 10/100 PHY */
2998d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IFE_PLUS_E_PHY_ID    0x02A80320
2999d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IFE_C_E_PHY_ID       0x02A80310
3000d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
3001120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHY_EXTENDED_STATUS_CONTROL   0x10	/* 100BaseTx Extended Status, Control and Address */
3002120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHY_SPECIAL_CONTROL           0x11	/* 100BaseTx PHY special control register */
3003120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHY_RCV_FALSE_CARRIER         0x13	/* 100BaseTx Receive False Carrier Counter */
3004120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHY_RCV_DISCONNECT            0x14	/* 100BaseTx Receive Disconnect Counter */
3005120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHY_RCV_ERROT_FRAME           0x15	/* 100BaseTx Receive Error Frame Counter */
3006120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHY_RCV_SYMBOL_ERR            0x16	/* Receive Symbol Error Counter */
3007120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHY_PREM_EOF_ERR              0x17	/* 100BaseTx Receive Premature End Of Frame Error Counter */
3008120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHY_RCV_EOF_ERR               0x18	/* 10BaseT Receive End Of Frame Error Counter */
3009120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHY_TX_JABBER_DETECT          0x19	/* 10BaseT Transmit Jabber Detect Counter */
3010120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHY_EQUALIZER                 0x1A	/* PHY Equalizer Control and Status */
3011120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHY_SPECIAL_CONTROL_LED       0x1B	/* PHY special control and LED configuration */
3012120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHY_MDIX_CONTROL              0x1C	/* MDI/MDI-X Control register */
3013120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHY_HWI_CONTROL               0x1D	/* Hardware Integrity Control (HWI) */
3014120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg
3015120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PESC_REDUCED_POWER_DOWN_DISABLE  0x2000	/* Default 1 = Disable auto reduced power down */
3016120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PESC_100BTX_POWER_DOWN           0x0400	/* Indicates the power state of 100BASE-TX */
3017120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PESC_10BTX_POWER_DOWN            0x0200	/* Indicates the power state of 10BASE-T */
3018120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PESC_POLARITY_REVERSED           0x0100	/* Indicates 10BASE-T polarity */
3019120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PESC_PHY_ADDR_MASK               0x007C	/* Bit 6:2 for sampled PHY address */
3020120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PESC_SPEED                       0x0002	/* Auto-negotiation speed result 1=100Mbs, 0=10Mbs */
3021120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PESC_DUPLEX                      0x0001	/* Auto-negotiation duplex result 1=Full, 0=Half */
3022d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IFE_PESC_POLARITY_REVERSED_SHIFT     8
3023d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
3024120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PSC_DISABLE_DYNAMIC_POWER_DOWN   0x0100	/* 1 = Dynamic Power Down disabled */
3025120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PSC_FORCE_POLARITY               0x0020	/* 1=Reversed Polarity, 0=Normal */
3026120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PSC_AUTO_POLARITY_DISABLE        0x0010	/* 1=Auto Polarity Disabled, 0=Enabled */
3027120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PSC_JABBER_FUNC_DISABLE          0x0001	/* 1=Jabber Disabled, 0=Normal Jabber Operation */
3028d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IFE_PSC_FORCE_POLARITY_SHIFT         5
3029d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IFE_PSC_AUTO_POLARITY_DISABLE_SHIFT  4
3030d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
3031120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PMC_AUTO_MDIX                    0x0080	/* 1=enable MDI/MDI-X feature, default 0=disabled */
3032120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PMC_FORCE_MDIX                   0x0040	/* 1=force MDIX-X, 0=force MDI */
3033120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PMC_MDIX_STATUS                  0x0020	/* 1=MDI-X, 0=MDI */
3034120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PMC_AUTO_MDIX_COMPLETE           0x0010	/* Resolution algorithm is completed */
3035d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok#define IFE_PMC_MDIX_MODE_SHIFT              6
3036120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHC_MDIX_RESET_ALL_MASK          0x0000	/* Disable auto MDI-X */
3037120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg
3038120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHC_HWI_ENABLE                   0x8000	/* Enable the HWI feature */
3039120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHC_ABILITY_CHECK                0x4000	/* 1= Test Passed, 0=failed */
3040120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHC_TEST_EXEC                    0x2000	/* PHY launch test pulses on the wire */
3041120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHC_HIGHZ                        0x0200	/* 1 = Open Circuit */
3042120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHC_LOWZ                         0x0400	/* 1 = Short Circuit */
3043120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHC_LOW_HIGH_Z_MASK              0x0600	/* Mask for indication type of problem on the line */
3044120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHC_DISTANCE_MASK                0x01FF	/* Mask for distance to the cable problem, in 80cm granularity */
3045120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PHC_RESET_ALL_MASK               0x0000	/* Disable HWI */
3046120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PSCL_PROBE_MODE                  0x0020	/* LED Probe mode */
3047120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PSCL_PROBE_LEDS_OFF              0x0006	/* Force LEDs 0 and 2 off */
3048120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define IFE_PSCL_PROBE_LEDS_ON               0x0007	/* Force LEDs 0 and 2 on */
3049120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg
3050120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define ICH_FLASH_COMMAND_TIMEOUT            5000	/* 5000 uSecs - adjusted */
3051120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define ICH_FLASH_ERASE_TIMEOUT              3000000	/* Up to 3 seconds - worst case */
3052120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define ICH_FLASH_CYCLE_REPEAT_COUNT         10	/* 10 cycles */
30532df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_SEG_SIZE_256               256
30542df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_SEG_SIZE_4K                4096
30552df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_SEG_SIZE_64K               65536
30562df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher
30572df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_CYCLE_READ                       0x0
30582df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_CYCLE_RESERVED                   0x1
30592df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_CYCLE_WRITE                      0x2
30602df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_CYCLE_ERASE                      0x3
30612df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher
30622df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_GFPREG   0x0000
30632df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_HSFSTS   0x0004
30642df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_HSFCTL   0x0006
30652df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_FADDR    0x0008
30662df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_FDATA0   0x0010
30672df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_FRACC    0x0050
30682df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_FREG0    0x0054
30692df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_FREG1    0x0058
30702df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_FREG2    0x005C
30712df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_FREG3    0x0060
30722df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_FPR0     0x0074
30732df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_FPR1     0x0078
30742df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_SSFSTS   0x0090
30752df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_SSFCTL   0x0092
30762df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_PREOP    0x0094
30772df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_OPTYPE   0x0096
30782df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_OPMENU   0x0098
30792df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher
30802df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_REG_MAPSIZE      0x00A0
30812df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_SECTOR_SIZE      4096
30822df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_GFPREG_BASE_MASK       0x1FFF
30832df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define ICH_FLASH_LINEAR_ADDR_MASK 0x00FFFFFF
3084d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
30851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Miscellaneous PHY bit definitions. */
30861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PHY_PREAMBLE        0xFFFFFFFF
30871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PHY_SOF             0x01
30881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PHY_OP_READ         0x02
30891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PHY_OP_WRITE        0x01
30901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PHY_TURNAROUND      0x02
30911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PHY_PREAMBLE_SIZE   32
30921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MII_CR_SPEED_1000   0x0040
30931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MII_CR_SPEED_100    0x2000
30941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MII_CR_SPEED_10     0x0000
30951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_PHY_ADDRESS   0x01
3096120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_AUTO_NEG_TIME   45	/* 4.5 Seconds */
3097120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define PHY_FORCE_TIME      20	/* 2.0 Seconds */
30981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PHY_REVISION_MASK   0xFFFFFFF0
3099120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define DEVICE_SPEED_MASK   0x00000300	/* Device Ctrl Reg Speed Mask */
31001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG4_SPEED_MASK     0x01E0
31011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REG9_SPEED_MASK     0x0300
31021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ADVERTISE_10_HALF   0x0001
31031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ADVERTISE_10_FULL   0x0002
31041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ADVERTISE_100_HALF  0x0004
31051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ADVERTISE_100_FULL  0x0008
31061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ADVERTISE_1000_HALF 0x0010
31071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ADVERTISE_1000_FULL 0x0020
3108120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define AUTONEG_ADVERTISE_SPEED_DEFAULT 0x002F	/* Everything but 1000-Half */
3109120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define AUTONEG_ADVERTISE_10_100_ALL    0x000F	/* All 10/100 speeds */
3110120a5d0d588c9a4d47574fcfdab8454817c8586cJesse Brandeburg#define AUTONEG_ADVERTISE_10_ALL        0x0003	/* 10Mbps Full & Half speeds */
31111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
31121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* _E1000_HW_H_ */
3113