source: bootcd/isolinux/syslinux-6.03/gpxe/src/drivers/net/e1000/e1000.h

Last change on this file was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 8.0 KB
Line 
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
29FILE_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
54struct 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 */
103struct e1000_buffer {
104        struct sk_buff *skb;
105        unsigned long time_stamp;
106        uint16_t length;
107        uint16_t next_to_watch;
108};
109
110struct 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
129struct 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
168struct 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
283enum 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 */
Note: See TracBrowser for help on using the repository browser.