Files
@ 2ee8c8344ccb
Branch filter:
Location: vmkdrivers/vmkdrivers/src_9/drivers/net/tg3/tg3_vmware.h - annotation
2ee8c8344ccb
7.1 KiB
text/x-chdr
ESXi-6.0-U1a
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 | 95e39e5412bd 95e39e5412bd 0d186246d211 0d186246d211 0d186246d211 0d186246d211 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 0d186246d211 95e39e5412bd d6b9b2ac5869 d6b9b2ac5869 d6b9b2ac5869 d6b9b2ac5869 d6b9b2ac5869 1efda0e3054b 0d186246d211 1efda0e3054b 1efda0e3054b 95e39e5412bd 95e39e5412bd 91e0d39c9812 0d186246d211 1efda0e3054b 1efda0e3054b 0d186246d211 95e39e5412bd 95e39e5412bd 95e39e5412bd 1efda0e3054b 0d186246d211 2ee8c8344ccb 1efda0e3054b 1efda0e3054b 2ee8c8344ccb 0d186246d211 1efda0e3054b 1efda0e3054b 1efda0e3054b 0d186246d211 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 0d186246d211 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 0d186246d211 0d186246d211 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 95e39e5412bd 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 91e0d39c9812 91e0d39c9812 91e0d39c9812 95e39e5412bd 95e39e5412bd 95e39e5412bd 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 91e0d39c9812 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 95e39e5412bd 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 1efda0e3054b 0d186246d211 0d186246d211 0d186246d211 0d186246d211 0d186246d211 0d186246d211 95e39e5412bd 95e39e5412bd | /* Copyright (C) 2010 - 2013 Broadcom Corporation.
* Portions Copyright (C) VMware, Inc. 2007-2013. All Rights Reserved.
*/
struct tg3;
#define TG3_MSG_HW 0x0010000 /* was: NETIF_MSG_HW */
#define TG3_MSG_NETQ 0x0400000
#define TG3_MSG_NETQ_VERBOSE 0x0800000
/* regular debug print for VMware specific code */
#define DP(__mask, fmt, ...) \
do { \
if (unlikely(tp->msg_enable & (__mask))) \
netdev_info(tp->dev, "[%s:%d]" fmt, \
__func__, __LINE__, \
##__VA_ARGS__); \
} while (0)
/* for errors (never masked) */
#define DP_ERR(fmt, ...) \
do { \
netdev_err(tp->dev, "[%s:%d]" fmt, \
__func__, __LINE__, \
##__VA_ARGS__); \
} while (0)
/*
* On ESX the wmb() instruction is defined to only a compiler barrier.
* The macro wmb() needs to be overridden to properly synchronize memory.
*/
#if defined(__VMKLNX__)
#undef wmb
#define wmb() asm volatile("sfence" ::: "memory")
#endif
static int disable_tso;
module_param(disable_tso, int, 0);
MODULE_PARM_DESC(disable_tso, "Setting the variable to 1 to disable HW TSO "
"functionality on the driver level. Value of "
"0 will enable HW TSO which is the default.");
static int psod_on_tx_timeout = 0;
module_param(psod_on_tx_timeout, int, 0);
MODULE_PARM_DESC(psod_on_tx_timeout, "For debugging purposes, crash the system "
" when a tx timeout occurs");
#define TG3_MAX_NIC 32
#ifndef TG3_VMWARE_NETQ_DISABLE
#define TG3_VMWARE_NETQ_ENABLE
#define TG3_NETQ_MAX_MACADDR 24
#define TG3_NETQ_MAX_VLAN 32
#define TG3_OPTION_UNSET -1
/* PR 1392928. Disable netq on tg3 by default */
static unsigned int __devinitdata tg3_netq_index;
static int __devinitdata tg3_netq_force[TG3_MAX_NIC+1] =
{ [0 ... TG3_MAX_NIC] = 0 };
module_param_array_named(force_netq, tg3_netq_force, int, NULL, 0);
MODULE_PARM_DESC(force_netq,
"Force the maximum number of NetQueues available per port (NetQueue capable devices only)");
static int multi_rx_filters = -1;
module_param(multi_rx_filters, int, 0);
MODULE_PARM_DESC(multi_rx_filters, "Define the number of RX filters per "
"NetQueue: (allowed values: -1 to "
"Max # of RX filters per NetQueue, "
"-1: use the default number of RX filters; "
"0: Disable use of multiple RX filters; "
"1..Max # the number of RX filters "
"per NetQueue: will force the number "
"of RX filters to use for NetQueue");
static const struct {
const char string[ETH_GSTRING_LEN];
} tg3_vmware_ethtool_stats_keys[] = {
{ "[0]: rx_packets (sw)" },
{ "[0]: rx_packets (hw)" },
{ "[0]: rx_bytes (sw)" },
{ "[0]: rx_bytes (hw)" },
{ "[0]: rx_errors (sw)" },
{ "[0]: rx_errors (hw)" },
{ "[0]: rx_crc_errors" },
{ "[0]: rx_frame_errors" },
{ "[0]: tx_bytes" },
{ "[0]: tx_ucast_packets" },
{ "[0]: tx_mcast_packets" },
{ "[0]: tx_bcast_packets" },
};
/*
* Pack this structure so that we don't get an extra 8 bytes
* should this driver be built for a 128-bit CPU. :)
*/
struct tg3_netq_stats {
u64 rx_packets_sw;
u64 rx_packets_hw;
u64 rx_bytes_sw;
u64 rx_bytes_hw;
u64 rx_errors_sw;
u64 rx_errors_hw;
u64 rx_crc_errors;
u64 rx_frame_errors;
u64 tx_bytes;
u64 tx_ucast_packets;
u64 tx_mcast_packets;
u64 tx_bcast_packets;
} __attribute__((packed));
#define TG3_NETQ_NUM_STATS (sizeof(struct tg3_netq_stats)/sizeof(u64))
struct tg3_netq_napi {
u32 flags;
#define TG3_NETQ_TXQ_ALLOCATED 0x0001
#define TG3_NETQ_RXQ_ALLOCATED 0x0002
#define TG3_NETQ_RXQ_ENABLED 0x0008
#define TG3_NETQ_TXQ_FREE_STATE 0x0010
#define TG3_NETQ_RXQ_FREE_STATE 0x0020
struct tg3_netq_stats stats;
struct net_device_stats net_stats;
int num_rx_filters;
u8 filter_bitmap;
#define VRQMAP_PTA (1<<0)
#define VRQMAP_PTB (1<<1)
#define VRQMAP_PTC (1<<2)
#define VRQMAP_PTD (1<<3)
u8 reserved;
u16 reserved1;
};
struct netq_rx_filter {
struct list_head link;
u8 fid;
u8 qid;
u8 sid;
u8 reserved;
u32 type;
u16 vlan;
u8 mac[ETH_ALEN];
};
struct tg3_vmware_netq {
u16 n_tx_queues_allocated;
u16 n_rx_queues_allocated;
u32 index;
u8 rx_filters_per_q;
u8 total_rx_filters;
u16 reserved2;
struct netq_rx_filter rx_filters[TG3_NETQ_MAX_MACADDR];
struct list_head free_filters_list;
};
static void tg3_vmware_fetch_stats(struct tg3 *tp);
static void tg3_disable_prod_rcbs(struct tg3 *tp, u32 ring);
static void tg3_setup_prod_mboxes(struct tg3 *tp, u32 ring);
static void tg3_netq_init(struct tg3 *tp);
static void tg3_netq_free_all_qs(struct tg3 *tp);
static void tg3_netq_invalidate_state(struct tg3 *tp);
static void tg3_netq_restore(struct tg3 *tp);
static void tg3_netq_limit_dflt_queue_counts(struct tg3 *tp);
static u32 tg3_netq_tune_vector_count(struct tg3 *tp);
static int tg3_netq_stats_size(struct tg3 *tp);
static void tg3_netq_stats_get_strings(struct tg3 *tp, u8 *buf);
static void tg3_netq_stats_get(struct tg3 *tp, u64 *tmp_stats);
static void tg3_netq_stats_clear(struct tg3 *tp);
#endif /* TG3_VMWARE_NETQ_ENABLE */
#if (defined(__VMKLNX__) && VMWARE_ESX_DDK_VERSION >= 55000)
#define FWDMP_REG_DUMP 0
#define FWDMP_APE_DUMP 1
#define FWDMP_SCRATCHPAD_DUMP 2
#define FWDMP_PHY_DUMP 3
#define FWDMP_LEGACY_REG_DUMP 4
#define TG3_FWDMP_SIZE (170 * 1024)
#define STR2MARKER(x) ((x[3]<<24)+(x[2]<<16)+(x[1]<<8)+(x[0]))
#define FWDMP_MARKER STR2MARKER("TG3")
#define FWDMP_END_MARKER STR2MARKER("END")
struct fw_dmp_hdr {
u32 ver;
u32 len;
#define NIC_NAME_SIZE (sizeof(((struct net_device *)0)->name))
char name[NIC_NAME_SIZE];
void *tp;
u32 chip_id;
u32 dmp_size; /*actual firmware/chip dump size */
u32 flags;
u32 reserved1;
};
struct chip_core_dmp_t {
struct fw_dmp_hdr fw_hdr;
u32 fw_dmp_buf[(TG3_FWDMP_SIZE -
sizeof(struct fw_dmp_hdr) + 10)/4];
/* add few words for temporary overflow */
} chip_core_dmp_t;
#include <vmklinux_9/vmklinux_dump.h>
#define TG3_DUMPNAME "tg3_fwdmp"
static vmklnx_DumpFileHandle tg3_fwdmp_dh;
static void *tg3_fwdmp_va_ptr;
static struct tg3 *fwdmp_tp_ptr[TG3_MAX_NIC+1] =
{ [0 ... TG3_MAX_NIC] = NULL };
static VMK_ReturnStatus tg3_fwdmp_callback(void *cookie, vmk_Bool liveDump);
#endif /* defined(__VMKLNX__) && (VMWARE_ESX_DDK_VERSION >= 55000) */
struct tg3_vmware {
u32 rx_mode_reset_counter;
#ifdef TG3_VMWARE_NETQ_ENABLE
struct tg3_vmware_netq netq;
#endif
struct mutex netq_lock;
};
#if !defined(TG3_VMWARE_BMAPILNX_DISABLE)
#include "esx_ioctl.h"
static int
tg3_vmware_ioctl_cim(struct net_device *dev, struct ifreq *ifr);
#endif /* !TG3_VMWARE_BMAPILNX_DISABLED */
static void tg3_vmware_timer(struct tg3 *tp);
static netdev_features_t tg3_vmware_tune_tso(struct tg3 *tp,
netdev_features_t features);
|