ea51db6e49012245a7420394d7fad920e0767b4a
[people/pcmattman/gpxe.git] / src / drivers / net / e1000 / e1000.h
1 /*******************************************************************************
2
3   Intel PRO/1000 Linux driver
4   Copyright(c) 1999 - 2006 Intel Corporation.
5
6   This program is free software; you can redistribute it and/or modify it
7   under the terms and conditions of the GNU General Public License,
8   version 2, as published by the Free Software Foundation.
9
10   This program is distributed in the hope it will be useful, but WITHOUT
11   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13   more details.
14
15   You should have received a copy of the GNU General Public License along with
16   this program; if not, write to the Free Software Foundation, Inc.,
17   51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
18
19   The full GNU General Public License is included in this distribution in
20   the file called "COPYING".
21
22   Contact Information:
23   Linux NICS <linux.nics@intel.com>
24   e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
25   Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
26
27 *******************************************************************************/
28
29 FILE_LICENCE ( GPL2_ONLY );
30
31 /* Linux PRO/1000 Ethernet Driver main header file */
32
33 #ifndef _E1000_H_
34 #define _E1000_H_
35
36 #include <stdint.h>
37 #include <stdlib.h>
38 #include <stdio.h>
39 #include <string.h>
40 #include <gpxe/io.h>
41 #include <errno.h>
42 #include <byteswap.h>
43 #include <gpxe/pci.h>
44 #include <gpxe/malloc.h>
45 #include <gpxe/if_ether.h>
46 #include <gpxe/ethernet.h>
47 #include <gpxe/iobuf.h>
48 #include <gpxe/netdevice.h>
49
50 #define BAR_0           0
51 #define BAR_1           1
52 #define BAR_5           5
53
54 struct e1000_adapter;
55
56 #include "e1000_hw.h"
57
58 /* Supported Rx Buffer Sizes */
59 #define E1000_RXBUFFER_128   128    /* Used for packet split */
60 #define E1000_RXBUFFER_256   256    /* Used for packet split */
61 #define E1000_RXBUFFER_512   512
62 #define E1000_RXBUFFER_1024  1024
63 #define E1000_RXBUFFER_2048  2048
64 #define E1000_RXBUFFER_4096  4096
65 #define E1000_RXBUFFER_8192  8192
66 #define E1000_RXBUFFER_16384 16384
67
68 /* SmartSpeed delimiters */
69 #define E1000_SMARTSPEED_DOWNSHIFT 3
70 #define E1000_SMARTSPEED_MAX       15
71
72 /* Packet Buffer allocations */
73 #define E1000_PBA_BYTES_SHIFT 0xA
74 #define E1000_TX_HEAD_ADDR_SHIFT 7
75 #define E1000_PBA_TX_MASK 0xFFFF0000
76
77 /* Flow Control Watermarks */
78 #define E1000_FC_HIGH_DIFF 0x1638  /* High: 5688 bytes below Rx FIFO size */
79 #define E1000_FC_LOW_DIFF 0x1640   /* Low:  5696 bytes below Rx FIFO size */
80
81 #define E1000_FC_PAUSE_TIME 0x0680 /* 858 usec */
82
83 /* this is the size past which hardware will drop packets when setting LPE=0 */
84 #define MAXIMUM_ETHERNET_VLAN_SIZE 1522
85
86 /* How many Tx Descriptors do we need to call netif_wake_queue ? */
87 #define E1000_TX_QUEUE_WAKE     16
88 /* How many Rx Buffers do we bundle into one write to the hardware ? */
89 #define E1000_RX_BUFFER_WRITE   16      /* Must be power of 2 */
90
91 #define AUTO_ALL_MODES            0
92 #define E1000_EEPROM_82544_APM    0x0004
93 #define E1000_EEPROM_ICH8_APME    0x0004
94 #define E1000_EEPROM_APME         0x0400
95
96 #ifndef E1000_MASTER_SLAVE
97 /* Switch to override PHY master/slave setting */
98 #define E1000_MASTER_SLAVE      e1000_ms_hw_default
99 #endif
100
101 /* wrapper around a pointer to a socket buffer,
102  * so a DMA handle can be stored along with the buffer */
103 struct e1000_buffer {
104         struct sk_buff *skb;
105         unsigned long time_stamp;
106         uint16_t length;
107         uint16_t next_to_watch;
108 };
109
110 struct e1000_tx_ring {
111         /* pointer to the descriptor ring memory */
112         void *desc;
113         /* length of descriptor ring in bytes */
114         unsigned int size;
115         /* number of descriptors in the ring */
116         unsigned int count;
117         /* next descriptor to associate a buffer with */
118         unsigned int next_to_use;
119         /* next descriptor to check for DD status bit */
120         unsigned int next_to_clean;
121         /* array of buffer information structs */
122         struct e1000_buffer *buffer_info;
123
124         uint16_t tdh;
125         uint16_t tdt;
126         boolean_t last_tx_tso;
127 };
128
129 struct e1000_rx_ring {
130         /* pointer to the descriptor ring memory */
131         void *desc;
132         /* length of descriptor ring in bytes */
133         unsigned int size;
134         /* number of descriptors in the ring */
135         unsigned int count;
136         /* next descriptor to associate a buffer with */
137         unsigned int next_to_use;
138         /* next descriptor to check for DD status bit */
139         unsigned int next_to_clean;
140         /* array of buffer information structs */
141         struct e1000_buffer *buffer_info;
142         /* arrays of page information for packet split */
143         struct e1000_ps_page *ps_page;
144         struct e1000_ps_page_dma *ps_page_dma;
145
146         /* cpu for rx queue */
147         int cpu;
148
149         uint16_t rdh;
150         uint16_t rdt;
151 };
152
153 #define E1000_DESC_UNUSED(R) \
154         ((((R)->next_to_clean > (R)->next_to_use) ? 0 : (R)->count) + \
155         (R)->next_to_clean - (R)->next_to_use - 1)
156
157 #define E1000_RX_DESC_PS(R, i)      \
158         (&(((union e1000_rx_desc_packet_split *)((R).desc))[i]))
159 #define E1000_RX_DESC_EXT(R, i)     \
160         (&(((union e1000_rx_desc_extended *)((R).desc))[i]))
161 #define E1000_GET_DESC(R, i, type)      (&(((struct type *)((R).desc))[i]))
162 #define E1000_RX_DESC(R, i)             E1000_GET_DESC(R, i, e1000_rx_desc)
163 #define E1000_TX_DESC(R, i)             E1000_GET_DESC(R, i, e1000_tx_desc)
164 #define E1000_CONTEXT_DESC(R, i)        E1000_GET_DESC(R, i, e1000_context_desc)
165
166 /* board specific private data structure */
167
168 struct e1000_adapter {
169         struct vlan_group *vlgrp;
170         uint16_t mng_vlan_id;
171         uint32_t bd_number;
172         uint32_t rx_buffer_len;
173         uint32_t wol;
174         uint32_t smartspeed;
175         uint32_t en_mng_pt;
176         uint16_t link_speed;
177         uint16_t link_duplex;
178
179         unsigned int total_tx_bytes;
180         unsigned int total_tx_packets;
181         unsigned int total_rx_bytes;
182         unsigned int total_rx_packets;
183         /* Interrupt Throttle Rate */
184         uint32_t itr;
185         uint32_t itr_setting;
186         uint16_t tx_itr;
187         uint16_t rx_itr;
188
189         uint8_t fc_autoneg;
190
191         unsigned long led_status;
192
193         /* TX */
194         struct e1000_tx_ring *tx_ring;      /* One per active queue */
195         unsigned int restart_queue;
196         unsigned long tx_queue_len;
197         uint32_t txd_cmd;
198         uint32_t tx_int_delay;
199         uint32_t tx_abs_int_delay;
200         uint32_t gotcl;
201         uint64_t gotcl_old;
202         uint64_t tpt_old;
203         uint64_t colc_old;
204         uint32_t tx_timeout_count;
205         uint32_t tx_fifo_head;
206         uint32_t tx_head_addr;
207         uint32_t tx_fifo_size;
208         uint8_t  tx_timeout_factor;
209         boolean_t pcix_82544;
210         boolean_t detect_tx_hung;
211
212         /* RX */
213         boolean_t (*clean_rx) (struct e1000_adapter *adapter,
214                                struct e1000_rx_ring *rx_ring);
215         void (*alloc_rx_buf) (struct e1000_adapter *adapter,
216                               struct e1000_rx_ring *rx_ring,
217                                 int cleaned_count);
218         struct e1000_rx_ring *rx_ring;      /* One per active queue */
219         int num_tx_queues;
220         int num_rx_queues;
221
222         uint64_t hw_csum_err;
223         uint64_t hw_csum_good;
224         uint64_t rx_hdr_split;
225         uint32_t alloc_rx_buff_failed;
226         uint32_t rx_int_delay;
227         uint32_t rx_abs_int_delay;
228         boolean_t rx_csum;
229         unsigned int rx_ps_pages;
230         uint32_t gorcl;
231         uint64_t gorcl_old;
232         uint16_t rx_ps_bsize0;
233
234
235         /* OS defined structs */
236         struct net_device *netdev;
237         struct pci_device *pdev;
238         struct net_device_stats net_stats;
239
240         /* structs defined in e1000_hw.h */
241         struct e1000_hw hw;
242         struct e1000_hw_stats stats;
243         struct e1000_phy_info phy_info;
244         struct e1000_phy_stats phy_stats;
245
246         uint32_t test_icr;
247         struct e1000_tx_ring test_tx_ring;
248         struct e1000_rx_ring test_rx_ring;
249
250         int msg_enable;
251         boolean_t have_msi;
252
253         /* to not mess up cache alignment, always add to the bottom */
254         boolean_t tso_force;
255         boolean_t smart_power_down;     /* phy smart power down */
256         boolean_t quad_port_a;
257         unsigned long flags;
258         uint32_t eeprom_wol;
259         
260 #define NUM_TX_DESC     8
261 #define NUM_RX_DESC     8
262
263         struct io_buffer *tx_iobuf[NUM_TX_DESC];
264         struct io_buffer *rx_iobuf[NUM_RX_DESC];
265
266         struct e1000_tx_desc *tx_base;
267         struct e1000_rx_desc *rx_base;
268         
269         uint32_t tx_ring_size;
270         uint32_t rx_ring_size;
271
272         uint32_t tx_head;
273         uint32_t tx_tail;
274         uint32_t tx_fill_ctr;
275         
276         uint32_t rx_curr;
277
278         uint32_t ioaddr;
279         uint32_t irqno;
280
281 };
282
283 enum e1000_state_t {
284         __E1000_TESTING,
285         __E1000_RESETTING,
286         __E1000_DOWN
287 };
288
289 #define E1000_MNG2HOST_PORT_623 (1 << 5)
290 #define E1000_MNG2HOST_PORT_664 (1 << 6)
291
292 #define E1000_ERT_2048 0x100
293
294 #define IORESOURCE_IO           0x00000100
295 #define IORESOURCE_MEM          0x00000200
296 #define IORESOURCE_PREFETCH     0x00001000
297
298 #endif /* _E1000_H_ */
299
300 /*
301  * Local variables:
302  *  c-basic-offset: 8
303  *  c-indent-level: 8
304  *  tab-width: 8
305  * End:
306  */