299 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/* Copyright(c) 2009 - 2018 Intel Corporation. */3 4/* Linux PRO/1000 Ethernet Driver main header file */5 6#ifndef _IGBVF_H_7#define _IGBVF_H_8 9#include <linux/types.h>10#include <linux/timer.h>11#include <linux/io.h>12#include <linux/netdevice.h>13#include <linux/if_vlan.h>14 15#include "vf.h"16 17/* Forward declarations */18struct igbvf_info;19struct igbvf_adapter;20 21/* Interrupt defines */22#define IGBVF_START_ITR 488 /* ~8000 ints/sec */23#define IGBVF_4K_ITR 98024#define IGBVF_20K_ITR 19625#define IGBVF_70K_ITR 5626 27enum latency_range {28 lowest_latency = 0,29 low_latency = 1,30 bulk_latency = 2,31 latency_invalid = 25532};33 34/* Interrupt modes, as used by the IntMode parameter */35#define IGBVF_INT_MODE_LEGACY 036#define IGBVF_INT_MODE_MSI 137#define IGBVF_INT_MODE_MSIX 238 39/* Tx/Rx descriptor defines */40#define IGBVF_DEFAULT_TXD 25641#define IGBVF_MAX_TXD 409642#define IGBVF_MIN_TXD 6443 44#define IGBVF_DEFAULT_RXD 25645#define IGBVF_MAX_RXD 409646#define IGBVF_MIN_RXD 6447 48#define IGBVF_MIN_ITR_USECS 10 /* 100000 irq/sec */49#define IGBVF_MAX_ITR_USECS 10000 /* 100 irq/sec */50 51/* RX descriptor control thresholds.52 * PTHRESH - MAC will consider prefetch if it has fewer than this number of53 * descriptors available in its onboard memory.54 * Setting this to 0 disables RX descriptor prefetch.55 * HTHRESH - MAC will only prefetch if there are at least this many descriptors56 * available in host memory.57 * If PTHRESH is 0, this should also be 0.58 * WTHRESH - RX descriptor writeback threshold - MAC will delay writing back59 * descriptors until either it has this many to write back, or the60 * ITR timer expires.61 */62#define IGBVF_RX_PTHRESH 1663#define IGBVF_RX_HTHRESH 864#define IGBVF_RX_WTHRESH 165 66/* this is the size past which hardware will drop packets when setting LPE=0 */67#define MAXIMUM_ETHERNET_VLAN_SIZE 152268 69#define IGBVF_FC_PAUSE_TIME 0x0680 /* 858 usec */70 71/* How many Tx Descriptors do we need to call netif_wake_queue ? */72#define IGBVF_TX_QUEUE_WAKE 3273/* How many Rx Buffers do we bundle into one write to the hardware ? */74#define IGBVF_RX_BUFFER_WRITE 16 /* Must be power of 2 */75 76#define AUTO_ALL_MODES 077#define IGBVF_EEPROM_APME 0x040078 79#define IGBVF_MNG_VLAN_NONE (-1)80 81#define IGBVF_MAX_MAC_FILTERS 382 83/* Number of packet split data buffers (not including the header buffer) */84#define PS_PAGE_BUFFERS (MAX_PS_BUFFERS - 1)85 86enum igbvf_boards {87 board_vf,88 board_i350_vf,89};90 91struct igbvf_queue_stats {92 u64 packets;93 u64 bytes;94};95 96/* wrappers around a pointer to a socket buffer,97 * so a DMA handle can be stored along with the buffer98 */99struct igbvf_buffer {100 dma_addr_t dma;101 struct sk_buff *skb;102 union {103 /* Tx */104 struct {105 unsigned long time_stamp;106 union e1000_adv_tx_desc *next_to_watch;107 u16 length;108 u16 mapped_as_page;109 };110 /* Rx */111 struct {112 struct page *page;113 u64 page_dma;114 unsigned int page_offset;115 };116 };117};118 119union igbvf_desc {120 union e1000_adv_rx_desc rx_desc;121 union e1000_adv_tx_desc tx_desc;122 struct e1000_adv_tx_context_desc tx_context_desc;123};124 125struct igbvf_ring {126 struct igbvf_adapter *adapter; /* backlink */127 union igbvf_desc *desc; /* pointer to ring memory */128 dma_addr_t dma; /* phys address of ring */129 unsigned int size; /* length of ring in bytes */130 unsigned int count; /* number of desc. in ring */131 132 u16 next_to_use;133 u16 next_to_clean;134 135 u16 head;136 u16 tail;137 138 /* array of buffer information structs */139 struct igbvf_buffer *buffer_info;140 struct napi_struct napi;141 142 char name[IFNAMSIZ + 5];143 u32 eims_value;144 u32 itr_val;145 enum latency_range itr_range;146 u16 itr_register;147 int set_itr;148 149 struct sk_buff *rx_skb_top;150 151 struct igbvf_queue_stats stats;152};153 154/* board specific private data structure */155struct igbvf_adapter {156 struct timer_list watchdog_timer;157 struct timer_list blink_timer;158 159 struct work_struct reset_task;160 struct work_struct watchdog_task;161 162 const struct igbvf_info *ei;163 164 unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)];165 u32 bd_number;166 u32 rx_buffer_len;167 u32 polling_interval;168 u16 mng_vlan_id;169 u16 link_speed;170 u16 link_duplex;171 172 spinlock_t tx_queue_lock; /* prevent concurrent tail updates */173 174 /* track device up/down/testing state */175 unsigned long state;176 177 /* Interrupt Throttle Rate */178 u32 requested_itr; /* ints/sec or adaptive */179 u32 current_itr; /* Actual ITR register value, not ints/sec */180 181 /* Tx */182 struct igbvf_ring *tx_ring /* One per active queue */183 ____cacheline_aligned_in_smp;184 185 unsigned int restart_queue;186 u32 txd_cmd;187 188 u32 tx_int_delay;189 u32 tx_abs_int_delay;190 191 unsigned int total_tx_bytes;192 unsigned int total_tx_packets;193 unsigned int total_rx_bytes;194 unsigned int total_rx_packets;195 196 /* Tx stats */197 u32 tx_timeout_count;198 u32 tx_fifo_head;199 u32 tx_head_addr;200 u32 tx_fifo_size;201 u32 tx_dma_failed;202 203 /* Rx */204 struct igbvf_ring *rx_ring;205 206 u32 rx_int_delay;207 u32 rx_abs_int_delay;208 209 /* Rx stats */210 u64 hw_csum_err;211 u64 hw_csum_good;212 u64 rx_hdr_split;213 u32 alloc_rx_buff_failed;214 u32 rx_dma_failed;215 216 unsigned int rx_ps_hdr_size;217 u32 max_frame_size;218 u32 min_frame_size;219 220 /* OS defined structs */221 struct net_device *netdev;222 struct pci_dev *pdev;223 spinlock_t stats_lock; /* prevent concurrent stats updates */224 225 /* structs defined in e1000_hw.h */226 struct e1000_hw hw;227 228 /* The VF counters don't clear on read so we have to get a base229 * count on driver start up and always subtract that base on230 * the first update, thus the flag..231 */232 struct e1000_vf_stats stats;233 u64 zero_base;234 235 struct igbvf_ring test_tx_ring;236 struct igbvf_ring test_rx_ring;237 u32 test_icr;238 239 u32 msg_enable;240 struct msix_entry *msix_entries;241 int int_mode;242 u32 eims_enable_mask;243 u32 eims_other;244 u32 int_counter0;245 u32 int_counter1;246 247 u32 eeprom_wol;248 u32 wol;249 u32 pba;250 251 bool fc_autoneg;252 253 unsigned long led_status;254 255 unsigned int flags;256 unsigned long last_reset;257};258 259struct igbvf_info {260 enum e1000_mac_type mac;261 unsigned int flags;262 u32 pba;263 void (*init_ops)(struct e1000_hw *);264 s32 (*get_variants)(struct igbvf_adapter *);265};266 267/* hardware capability, feature, and workaround flags */268#define IGBVF_FLAG_RX_CSUM_DISABLED BIT(0)269#define IGBVF_FLAG_RX_LB_VLAN_BSWAP BIT(1)270#define IGBVF_RX_DESC_ADV(R, i) \271 (&((((R).desc))[i].rx_desc))272#define IGBVF_TX_DESC_ADV(R, i) \273 (&((((R).desc))[i].tx_desc))274#define IGBVF_TX_CTXTDESC_ADV(R, i) \275 (&((((R).desc))[i].tx_context_desc))276 277enum igbvf_state_t {278 __IGBVF_TESTING,279 __IGBVF_RESETTING,280 __IGBVF_DOWN281};282 283extern char igbvf_driver_name[];284 285void igbvf_set_ethtool_ops(struct net_device *);286 287int igbvf_up(struct igbvf_adapter *);288void igbvf_down(struct igbvf_adapter *);289void igbvf_reinit_locked(struct igbvf_adapter *);290int igbvf_setup_rx_resources(struct igbvf_adapter *, struct igbvf_ring *);291int igbvf_setup_tx_resources(struct igbvf_adapter *, struct igbvf_ring *);292void igbvf_free_rx_resources(struct igbvf_ring *);293void igbvf_free_tx_resources(struct igbvf_ring *);294void igbvf_update_stats(struct igbvf_adapter *);295 296extern unsigned int copybreak;297 298#endif /* _IGBVF_H_ */299