linux-bk/drivers/net/e1000/e1000.h
<<
>>
Prefs
   1/*******************************************************************************
   2
   3  
   4  Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved.
   5  
   6  This program is free software; you can redistribute it and/or modify it 
   7  under the terms of the GNU General Public License as published by the Free 
   8  Software Foundation; either version 2 of the License, or (at your option) 
   9  any later version.
  10  
  11  This program is distributed in the hope that it will be useful, but WITHOUT 
  12  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
  13  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
  14  more details.
  15  
  16  You should have received a copy of the GNU General Public License along with
  17  this program; if not, write to the Free Software Foundation, Inc., 59 
  18  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  19  
  20  The full GNU General Public License is included in this distribution in the
  21  file called LICENSE.
  22  
  23  Contact Information:
  24  Linux NICS <linux.nics@intel.com>
  25  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  26
  27*******************************************************************************/
  28
  29
  30/* Linux PRO/1000 Ethernet Driver main header file */
  31
  32#ifndef _E1000_H_
  33#define _E1000_H_
  34
  35#include <linux/stddef.h>
  36#include <linux/config.h>
  37#include <linux/module.h>
  38#include <linux/types.h>
  39#include <asm/byteorder.h>
  40#include <linux/init.h>
  41#include <linux/mm.h>
  42#include <linux/errno.h>
  43#include <linux/ioport.h>
  44#include <linux/pci.h>
  45#include <linux/kernel.h>
  46#include <linux/netdevice.h>
  47#include <linux/etherdevice.h>
  48#include <linux/skbuff.h>
  49#include <linux/delay.h>
  50#include <linux/timer.h>
  51#include <linux/slab.h>
  52#include <linux/interrupt.h>
  53#include <linux/string.h>
  54#include <linux/pagemap.h>
  55#include <asm/bitops.h>
  56#include <asm/io.h>
  57#include <asm/irq.h>
  58#include <linux/capability.h>
  59#include <linux/in.h>
  60#include <linux/ip.h>
  61#include <linux/tcp.h>
  62#include <linux/udp.h>
  63#include <net/pkt_sched.h>
  64#include <linux/list.h>
  65#include <linux/reboot.h>
  66#ifdef NETIF_F_TSO
  67#include <net/checksum.h>
  68#endif
  69#include <linux/workqueue.h>
  70#include <linux/mii.h>
  71#include <linux/ethtool.h>
  72#include <linux/if_vlan.h>
  73
  74#define BAR_0           0
  75#define BAR_1           1
  76#define BAR_5           5
  77#define PCI_DMA_64BIT   0xffffffffffffffffULL
  78#define PCI_DMA_32BIT   0x00000000ffffffffULL
  79
  80
  81struct e1000_adapter;
  82
  83#include "e1000_hw.h"
  84
  85#if DBG
  86#define E1000_DBG(args...) printk(KERN_DEBUG "e1000: " args)
  87#else
  88#define E1000_DBG(args...)
  89#endif
  90
  91#define E1000_ERR(args...) printk(KERN_ERR "e1000: " args)
  92
  93#define E1000_MAX_INTR 10
  94
  95/* How many descriptors for TX and RX ? */
  96#define E1000_DEFAULT_TXD                  256
  97#define E1000_MAX_TXD                      256
  98#define E1000_MIN_TXD                       80
  99#define E1000_MAX_82544_TXD               4096
 100#define E1000_DEFAULT_RXD                  256
 101#define E1000_MAX_RXD                      256
 102#define E1000_MIN_RXD                       80
 103#define E1000_MAX_82544_RXD               4096
 104
 105/* Supported Rx Buffer Sizes */
 106#define E1000_RXBUFFER_2048  2048
 107#define E1000_RXBUFFER_4096  4096
 108#define E1000_RXBUFFER_8192  8192
 109#define E1000_RXBUFFER_16384 16384
 110
 111/* SmartSpeed delimiters */
 112#define E1000_SMARTSPEED_DOWNSHIFT 3
 113#define E1000_SMARTSPEED_MAX       15
 114
 115/* Packet Buffer allocations */
 116#define E1000_PBA_BYTES_SHIFT 0xA
 117#define E1000_TX_HEAD_ADDR_SHIFT 7
 118#define E1000_PBA_TX_MASK 0xFFFF0000
 119
 120/* Flow Control High-Watermark: 5688 bytes below Rx FIFO size */
 121#define E1000_FC_HIGH_DIFF 0x1638
 122
 123/* Flow Control Low-Watermark: 5696 bytes below Rx FIFO size */
 124#define E1000_FC_LOW_DIFF 0x1640
 125
 126/* Flow Control Pause Time: 858 usec */
 127#define E1000_FC_PAUSE_TIME 0x0680
 128
 129/* How many Tx Descriptors do we need to call netif_wake_queue ? */
 130#define E1000_TX_QUEUE_WAKE     16
 131/* How many Rx Buffers do we bundle into one write to the hardware ? */
 132#define E1000_RX_BUFFER_WRITE   16      /* Must be power of 2 */
 133
 134#define AUTO_ALL_MODES       0
 135#define E1000_EEPROM_APME    0x0400
 136
 137#ifndef E1000_MASTER_SLAVE
 138/* Switch to override PHY master/slave setting */
 139#define E1000_MASTER_SLAVE      e1000_ms_hw_default
 140#endif
 141
 142/* only works for sizes that are powers of 2 */
 143#define E1000_ROUNDUP(i, size) ((i) = (((i) + (size) - 1) & ~((size) - 1)))
 144
 145/* wrapper around a pointer to a socket buffer,
 146 * so a DMA handle can be stored along with the buffer */
 147struct e1000_buffer {
 148        struct sk_buff *skb;
 149        uint64_t dma;
 150        unsigned long length;
 151        unsigned long time_stamp;
 152        unsigned int next_to_watch;
 153};
 154
 155struct e1000_desc_ring {
 156        /* pointer to the descriptor ring memory */
 157        void *desc;
 158        /* physical address of the descriptor ring */
 159        dma_addr_t dma;
 160        /* length of descriptor ring in bytes */
 161        unsigned int size;
 162        /* number of descriptors in the ring */
 163        unsigned int count;
 164        /* next descriptor to associate a buffer with */
 165        unsigned int next_to_use;
 166        /* next descriptor to check for DD status bit */
 167        unsigned int next_to_clean;
 168        /* array of buffer information structs */
 169        struct e1000_buffer *buffer_info;
 170};
 171
 172#define E1000_DESC_UNUSED(R) \
 173        ((((R)->next_to_clean > (R)->next_to_use) ? 0 : (R)->count) + \
 174        (R)->next_to_clean - (R)->next_to_use - 1)
 175
 176#define E1000_GET_DESC(R, i, type)      (&(((struct type *)((R).desc))[i]))
 177#define E1000_RX_DESC(R, i)             E1000_GET_DESC(R, i, e1000_rx_desc)
 178#define E1000_TX_DESC(R, i)             E1000_GET_DESC(R, i, e1000_tx_desc)
 179#define E1000_CONTEXT_DESC(R, i)        E1000_GET_DESC(R, i, e1000_context_desc)
 180
 181/* board specific private data structure */
 182
 183struct e1000_adapter {
 184        struct timer_list tx_fifo_stall_timer;
 185        struct timer_list watchdog_timer;
 186        struct timer_list phy_info_timer;
 187        struct vlan_group *vlgrp;
 188        uint32_t bd_number;
 189        uint32_t rx_buffer_len;
 190        uint32_t part_num;
 191        uint32_t wol;
 192        uint32_t smartspeed;
 193        uint16_t link_speed;
 194        uint16_t link_duplex;
 195        spinlock_t stats_lock;
 196        atomic_t irq_sem;
 197        struct work_struct tx_timeout_task;
 198        uint8_t fc_autoneg;
 199
 200        struct timer_list blink_timer;
 201        unsigned long led_status;
 202
 203        /* TX */
 204        struct e1000_desc_ring tx_ring;
 205        spinlock_t tx_lock;
 206        uint32_t txd_cmd;
 207        uint32_t tx_int_delay;
 208        uint32_t tx_abs_int_delay;
 209        uint32_t gotcl;
 210        uint64_t gotcl_old;
 211        uint64_t tpt_old;
 212        uint64_t colc_old;
 213        uint32_t tx_fifo_head;
 214        uint32_t tx_head_addr;
 215        uint32_t tx_fifo_size;
 216        atomic_t tx_fifo_stall;
 217        boolean_t pcix_82544;
 218
 219        /* RX */
 220        struct e1000_desc_ring rx_ring;
 221        uint64_t hw_csum_err;
 222        uint64_t hw_csum_good;
 223        uint32_t rx_int_delay;
 224        uint32_t rx_abs_int_delay;
 225        boolean_t rx_csum;
 226        uint32_t gorcl;
 227        uint64_t gorcl_old;
 228
 229        /* Interrupt Throttle Rate */
 230        uint32_t itr;
 231
 232        /* OS defined structs */
 233        struct net_device *netdev;
 234        struct pci_dev *pdev;
 235        struct net_device_stats net_stats;
 236
 237        /* structs defined in e1000_hw.h */
 238        struct e1000_hw hw;
 239        struct e1000_hw_stats stats;
 240        struct e1000_phy_info phy_info;
 241        struct e1000_phy_stats phy_stats;
 242
 243        uint32_t test_icr;
 244        struct e1000_desc_ring test_tx_ring;
 245        struct e1000_desc_ring test_rx_ring;
 246
 247
 248        uint32_t pci_state[16];
 249};
 250#endif /* _E1000_H_ */
 251
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.