cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

i40e_debugfs.c (60071B)


      1// SPDX-License-Identifier: GPL-2.0
      2/* Copyright(c) 2013 - 2018 Intel Corporation. */
      3
      4#ifdef CONFIG_DEBUG_FS
      5
      6#include <linux/fs.h>
      7#include <linux/debugfs.h>
      8
      9#include "i40e.h"
     10
     11static struct dentry *i40e_dbg_root;
     12
     13enum ring_type {
     14	RING_TYPE_RX,
     15	RING_TYPE_TX,
     16	RING_TYPE_XDP
     17};
     18
     19/**
     20 * i40e_dbg_find_vsi - searches for the vsi with the given seid
     21 * @pf: the PF structure to search for the vsi
     22 * @seid: seid of the vsi it is searching for
     23 **/
     24static struct i40e_vsi *i40e_dbg_find_vsi(struct i40e_pf *pf, int seid)
     25{
     26	int i;
     27
     28	if (seid < 0)
     29		dev_info(&pf->pdev->dev, "%d: bad seid\n", seid);
     30	else
     31		for (i = 0; i < pf->num_alloc_vsi; i++)
     32			if (pf->vsi[i] && (pf->vsi[i]->seid == seid))
     33				return pf->vsi[i];
     34
     35	return NULL;
     36}
     37
     38/**
     39 * i40e_dbg_find_veb - searches for the veb with the given seid
     40 * @pf: the PF structure to search for the veb
     41 * @seid: seid of the veb it is searching for
     42 **/
     43static struct i40e_veb *i40e_dbg_find_veb(struct i40e_pf *pf, int seid)
     44{
     45	int i;
     46
     47	for (i = 0; i < I40E_MAX_VEB; i++)
     48		if (pf->veb[i] && pf->veb[i]->seid == seid)
     49			return pf->veb[i];
     50	return NULL;
     51}
     52
     53/**************************************************************
     54 * command
     55 * The command entry in debugfs is for giving the driver commands
     56 * to be executed - these may be for changing the internal switch
     57 * setup, adding or removing filters, or other things.  Many of
     58 * these will be useful for some forms of unit testing.
     59 **************************************************************/
     60static char i40e_dbg_command_buf[256] = "";
     61
     62/**
     63 * i40e_dbg_command_read - read for command datum
     64 * @filp: the opened file
     65 * @buffer: where to write the data for the user to read
     66 * @count: the size of the user's buffer
     67 * @ppos: file position offset
     68 **/
     69static ssize_t i40e_dbg_command_read(struct file *filp, char __user *buffer,
     70				     size_t count, loff_t *ppos)
     71{
     72	struct i40e_pf *pf = filp->private_data;
     73	int bytes_not_copied;
     74	int buf_size = 256;
     75	char *buf;
     76	int len;
     77
     78	/* don't allow partial reads */
     79	if (*ppos != 0)
     80		return 0;
     81	if (count < buf_size)
     82		return -ENOSPC;
     83
     84	buf = kzalloc(buf_size, GFP_KERNEL);
     85	if (!buf)
     86		return -ENOSPC;
     87
     88	len = snprintf(buf, buf_size, "%s: %s\n",
     89		       pf->vsi[pf->lan_vsi]->netdev->name,
     90		       i40e_dbg_command_buf);
     91
     92	bytes_not_copied = copy_to_user(buffer, buf, len);
     93	kfree(buf);
     94
     95	if (bytes_not_copied)
     96		return -EFAULT;
     97
     98	*ppos = len;
     99	return len;
    100}
    101
    102static char *i40e_filter_state_string[] = {
    103	"INVALID",
    104	"NEW",
    105	"ACTIVE",
    106	"FAILED",
    107	"REMOVE",
    108};
    109
    110/**
    111 * i40e_dbg_dump_vsi_seid - handles dump vsi seid write into command datum
    112 * @pf: the i40e_pf created in command write
    113 * @seid: the seid the user put in
    114 **/
    115static void i40e_dbg_dump_vsi_seid(struct i40e_pf *pf, int seid)
    116{
    117	struct rtnl_link_stats64 *nstat;
    118	struct i40e_mac_filter *f;
    119	struct i40e_vsi *vsi;
    120	int i, bkt;
    121
    122	vsi = i40e_dbg_find_vsi(pf, seid);
    123	if (!vsi) {
    124		dev_info(&pf->pdev->dev,
    125			 "dump %d: seid not found\n", seid);
    126		return;
    127	}
    128	dev_info(&pf->pdev->dev, "vsi seid %d\n", seid);
    129	if (vsi->netdev) {
    130		struct net_device *nd = vsi->netdev;
    131
    132		dev_info(&pf->pdev->dev, "    netdev: name = %s, state = %lu, flags = 0x%08x\n",
    133			 nd->name, nd->state, nd->flags);
    134		dev_info(&pf->pdev->dev, "        features      = 0x%08lx\n",
    135			 (unsigned long int)nd->features);
    136		dev_info(&pf->pdev->dev, "        hw_features   = 0x%08lx\n",
    137			 (unsigned long int)nd->hw_features);
    138		dev_info(&pf->pdev->dev, "        vlan_features = 0x%08lx\n",
    139			 (unsigned long int)nd->vlan_features);
    140	}
    141	dev_info(&pf->pdev->dev,
    142		 "    flags = 0x%08lx, netdev_registered = %i, current_netdev_flags = 0x%04x\n",
    143		 vsi->flags, vsi->netdev_registered, vsi->current_netdev_flags);
    144	for (i = 0; i < BITS_TO_LONGS(__I40E_VSI_STATE_SIZE__); i++)
    145		dev_info(&pf->pdev->dev,
    146			 "    state[%d] = %08lx\n",
    147			 i, vsi->state[i]);
    148	if (vsi == pf->vsi[pf->lan_vsi])
    149		dev_info(&pf->pdev->dev, "    MAC address: %pM SAN MAC: %pM Port MAC: %pM\n",
    150			 pf->hw.mac.addr,
    151			 pf->hw.mac.san_addr,
    152			 pf->hw.mac.port_addr);
    153	hash_for_each(vsi->mac_filter_hash, bkt, f, hlist) {
    154		dev_info(&pf->pdev->dev,
    155			 "    mac_filter_hash: %pM vid=%d, state %s\n",
    156			 f->macaddr, f->vlan,
    157			 i40e_filter_state_string[f->state]);
    158	}
    159	dev_info(&pf->pdev->dev, "    active_filters %u, promisc_threshold %u, overflow promisc %s\n",
    160		 vsi->active_filters, vsi->promisc_threshold,
    161		 (test_bit(__I40E_VSI_OVERFLOW_PROMISC, vsi->state) ?
    162		  "ON" : "OFF"));
    163	nstat = i40e_get_vsi_stats_struct(vsi);
    164	dev_info(&pf->pdev->dev,
    165		 "    net_stats: rx_packets = %lu, rx_bytes = %lu, rx_errors = %lu, rx_dropped = %lu\n",
    166		 (unsigned long int)nstat->rx_packets,
    167		 (unsigned long int)nstat->rx_bytes,
    168		 (unsigned long int)nstat->rx_errors,
    169		 (unsigned long int)nstat->rx_dropped);
    170	dev_info(&pf->pdev->dev,
    171		 "    net_stats: tx_packets = %lu, tx_bytes = %lu, tx_errors = %lu, tx_dropped = %lu\n",
    172		 (unsigned long int)nstat->tx_packets,
    173		 (unsigned long int)nstat->tx_bytes,
    174		 (unsigned long int)nstat->tx_errors,
    175		 (unsigned long int)nstat->tx_dropped);
    176	dev_info(&pf->pdev->dev,
    177		 "    net_stats: multicast = %lu, collisions = %lu\n",
    178		 (unsigned long int)nstat->multicast,
    179		 (unsigned long int)nstat->collisions);
    180	dev_info(&pf->pdev->dev,
    181		 "    net_stats: rx_length_errors = %lu, rx_over_errors = %lu, rx_crc_errors = %lu\n",
    182		 (unsigned long int)nstat->rx_length_errors,
    183		 (unsigned long int)nstat->rx_over_errors,
    184		 (unsigned long int)nstat->rx_crc_errors);
    185	dev_info(&pf->pdev->dev,
    186		 "    net_stats: rx_frame_errors = %lu, rx_fifo_errors = %lu, rx_missed_errors = %lu\n",
    187		 (unsigned long int)nstat->rx_frame_errors,
    188		 (unsigned long int)nstat->rx_fifo_errors,
    189		 (unsigned long int)nstat->rx_missed_errors);
    190	dev_info(&pf->pdev->dev,
    191		 "    net_stats: tx_aborted_errors = %lu, tx_carrier_errors = %lu, tx_fifo_errors = %lu\n",
    192		 (unsigned long int)nstat->tx_aborted_errors,
    193		 (unsigned long int)nstat->tx_carrier_errors,
    194		 (unsigned long int)nstat->tx_fifo_errors);
    195	dev_info(&pf->pdev->dev,
    196		 "    net_stats: tx_heartbeat_errors = %lu, tx_window_errors = %lu\n",
    197		 (unsigned long int)nstat->tx_heartbeat_errors,
    198		 (unsigned long int)nstat->tx_window_errors);
    199	dev_info(&pf->pdev->dev,
    200		 "    net_stats: rx_compressed = %lu, tx_compressed = %lu\n",
    201		 (unsigned long int)nstat->rx_compressed,
    202		 (unsigned long int)nstat->tx_compressed);
    203	dev_info(&pf->pdev->dev,
    204		 "    net_stats_offsets: rx_packets = %lu, rx_bytes = %lu, rx_errors = %lu, rx_dropped = %lu\n",
    205		 (unsigned long int)vsi->net_stats_offsets.rx_packets,
    206		 (unsigned long int)vsi->net_stats_offsets.rx_bytes,
    207		 (unsigned long int)vsi->net_stats_offsets.rx_errors,
    208		 (unsigned long int)vsi->net_stats_offsets.rx_dropped);
    209	dev_info(&pf->pdev->dev,
    210		 "    net_stats_offsets: tx_packets = %lu, tx_bytes = %lu, tx_errors = %lu, tx_dropped = %lu\n",
    211		 (unsigned long int)vsi->net_stats_offsets.tx_packets,
    212		 (unsigned long int)vsi->net_stats_offsets.tx_bytes,
    213		 (unsigned long int)vsi->net_stats_offsets.tx_errors,
    214		 (unsigned long int)vsi->net_stats_offsets.tx_dropped);
    215	dev_info(&pf->pdev->dev,
    216		 "    net_stats_offsets: multicast = %lu, collisions = %lu\n",
    217		 (unsigned long int)vsi->net_stats_offsets.multicast,
    218		 (unsigned long int)vsi->net_stats_offsets.collisions);
    219	dev_info(&pf->pdev->dev,
    220		 "    net_stats_offsets: rx_length_errors = %lu, rx_over_errors = %lu, rx_crc_errors = %lu\n",
    221		 (unsigned long int)vsi->net_stats_offsets.rx_length_errors,
    222		 (unsigned long int)vsi->net_stats_offsets.rx_over_errors,
    223		 (unsigned long int)vsi->net_stats_offsets.rx_crc_errors);
    224	dev_info(&pf->pdev->dev,
    225		 "    net_stats_offsets: rx_frame_errors = %lu, rx_fifo_errors = %lu, rx_missed_errors = %lu\n",
    226		 (unsigned long int)vsi->net_stats_offsets.rx_frame_errors,
    227		 (unsigned long int)vsi->net_stats_offsets.rx_fifo_errors,
    228		 (unsigned long int)vsi->net_stats_offsets.rx_missed_errors);
    229	dev_info(&pf->pdev->dev,
    230		 "    net_stats_offsets: tx_aborted_errors = %lu, tx_carrier_errors = %lu, tx_fifo_errors = %lu\n",
    231		 (unsigned long int)vsi->net_stats_offsets.tx_aborted_errors,
    232		 (unsigned long int)vsi->net_stats_offsets.tx_carrier_errors,
    233		 (unsigned long int)vsi->net_stats_offsets.tx_fifo_errors);
    234	dev_info(&pf->pdev->dev,
    235		 "    net_stats_offsets: tx_heartbeat_errors = %lu, tx_window_errors = %lu\n",
    236		 (unsigned long int)vsi->net_stats_offsets.tx_heartbeat_errors,
    237		 (unsigned long int)vsi->net_stats_offsets.tx_window_errors);
    238	dev_info(&pf->pdev->dev,
    239		 "    net_stats_offsets: rx_compressed = %lu, tx_compressed = %lu\n",
    240		 (unsigned long int)vsi->net_stats_offsets.rx_compressed,
    241		 (unsigned long int)vsi->net_stats_offsets.tx_compressed);
    242	dev_info(&pf->pdev->dev,
    243		 "    tx_restart = %llu, tx_busy = %llu, rx_buf_failed = %llu, rx_page_failed = %llu\n",
    244		 vsi->tx_restart, vsi->tx_busy,
    245		 vsi->rx_buf_failed, vsi->rx_page_failed);
    246	rcu_read_lock();
    247	for (i = 0; i < vsi->num_queue_pairs; i++) {
    248		struct i40e_ring *rx_ring = READ_ONCE(vsi->rx_rings[i]);
    249
    250		if (!rx_ring)
    251			continue;
    252
    253		dev_info(&pf->pdev->dev,
    254			 "    rx_rings[%i]: state = %lu, queue_index = %d, reg_idx = %d\n",
    255			 i, *rx_ring->state,
    256			 rx_ring->queue_index,
    257			 rx_ring->reg_idx);
    258		dev_info(&pf->pdev->dev,
    259			 "    rx_rings[%i]: rx_buf_len = %d\n",
    260			 i, rx_ring->rx_buf_len);
    261		dev_info(&pf->pdev->dev,
    262			 "    rx_rings[%i]: next_to_use = %d, next_to_clean = %d, ring_active = %i\n",
    263			 i,
    264			 rx_ring->next_to_use,
    265			 rx_ring->next_to_clean,
    266			 rx_ring->ring_active);
    267		dev_info(&pf->pdev->dev,
    268			 "    rx_rings[%i]: rx_stats: packets = %lld, bytes = %lld, non_eop_descs = %lld\n",
    269			 i, rx_ring->stats.packets,
    270			 rx_ring->stats.bytes,
    271			 rx_ring->rx_stats.non_eop_descs);
    272		dev_info(&pf->pdev->dev,
    273			 "    rx_rings[%i]: rx_stats: alloc_page_failed = %lld, alloc_buff_failed = %lld\n",
    274			 i,
    275			 rx_ring->rx_stats.alloc_page_failed,
    276			 rx_ring->rx_stats.alloc_buff_failed);
    277		dev_info(&pf->pdev->dev,
    278			 "    rx_rings[%i]: rx_stats: realloc_count = 0, page_reuse_count = %lld\n",
    279			 i,
    280			 rx_ring->rx_stats.page_reuse_count);
    281		dev_info(&pf->pdev->dev,
    282			 "    rx_rings[%i]: size = %i\n",
    283			 i, rx_ring->size);
    284		dev_info(&pf->pdev->dev,
    285			 "    rx_rings[%i]: itr_setting = %d (%s)\n",
    286			 i, rx_ring->itr_setting,
    287			 ITR_IS_DYNAMIC(rx_ring->itr_setting) ? "dynamic" : "fixed");
    288	}
    289	for (i = 0; i < vsi->num_queue_pairs; i++) {
    290		struct i40e_ring *tx_ring = READ_ONCE(vsi->tx_rings[i]);
    291
    292		if (!tx_ring)
    293			continue;
    294
    295		dev_info(&pf->pdev->dev,
    296			 "    tx_rings[%i]: state = %lu, queue_index = %d, reg_idx = %d\n",
    297			 i, *tx_ring->state,
    298			 tx_ring->queue_index,
    299			 tx_ring->reg_idx);
    300		dev_info(&pf->pdev->dev,
    301			 "    tx_rings[%i]: next_to_use = %d, next_to_clean = %d, ring_active = %i\n",
    302			 i,
    303			 tx_ring->next_to_use,
    304			 tx_ring->next_to_clean,
    305			 tx_ring->ring_active);
    306		dev_info(&pf->pdev->dev,
    307			 "    tx_rings[%i]: tx_stats: packets = %lld, bytes = %lld, restart_queue = %lld\n",
    308			 i, tx_ring->stats.packets,
    309			 tx_ring->stats.bytes,
    310			 tx_ring->tx_stats.restart_queue);
    311		dev_info(&pf->pdev->dev,
    312			 "    tx_rings[%i]: tx_stats: tx_busy = %lld, tx_done_old = %lld, tx_stopped = %lld\n",
    313			 i,
    314			 tx_ring->tx_stats.tx_busy,
    315			 tx_ring->tx_stats.tx_done_old,
    316			 tx_ring->tx_stats.tx_stopped);
    317		dev_info(&pf->pdev->dev,
    318			 "    tx_rings[%i]: size = %i\n",
    319			 i, tx_ring->size);
    320		dev_info(&pf->pdev->dev,
    321			 "    tx_rings[%i]: DCB tc = %d\n",
    322			 i, tx_ring->dcb_tc);
    323		dev_info(&pf->pdev->dev,
    324			 "    tx_rings[%i]: itr_setting = %d (%s)\n",
    325			 i, tx_ring->itr_setting,
    326			 ITR_IS_DYNAMIC(tx_ring->itr_setting) ? "dynamic" : "fixed");
    327	}
    328	if (i40e_enabled_xdp_vsi(vsi)) {
    329		for (i = 0; i < vsi->num_queue_pairs; i++) {
    330			struct i40e_ring *xdp_ring = READ_ONCE(vsi->xdp_rings[i]);
    331
    332			if (!xdp_ring)
    333				continue;
    334
    335			dev_info(&pf->pdev->dev,
    336				 "    xdp_rings[%i]: state = %lu, queue_index = %d, reg_idx = %d\n",
    337				 i, *xdp_ring->state,
    338				 xdp_ring->queue_index,
    339				 xdp_ring->reg_idx);
    340			dev_info(&pf->pdev->dev,
    341				 "    xdp_rings[%i]: next_to_use = %d, next_to_clean = %d, ring_active = %i\n",
    342				 i,
    343				 xdp_ring->next_to_use,
    344				 xdp_ring->next_to_clean,
    345				 xdp_ring->ring_active);
    346			dev_info(&pf->pdev->dev,
    347				 "    xdp_rings[%i]: tx_stats: packets = %lld, bytes = %lld, restart_queue = %lld\n",
    348				 i, xdp_ring->stats.packets,
    349				 xdp_ring->stats.bytes,
    350				 xdp_ring->tx_stats.restart_queue);
    351			dev_info(&pf->pdev->dev,
    352				 "    xdp_rings[%i]: tx_stats: tx_busy = %lld, tx_done_old = %lld\n",
    353				 i,
    354				 xdp_ring->tx_stats.tx_busy,
    355				 xdp_ring->tx_stats.tx_done_old);
    356			dev_info(&pf->pdev->dev,
    357				 "    xdp_rings[%i]: size = %i\n",
    358				 i, xdp_ring->size);
    359			dev_info(&pf->pdev->dev,
    360				 "    xdp_rings[%i]: DCB tc = %d\n",
    361				 i, xdp_ring->dcb_tc);
    362			dev_info(&pf->pdev->dev,
    363				 "    xdp_rings[%i]: itr_setting = %d (%s)\n",
    364				 i, xdp_ring->itr_setting,
    365				 ITR_IS_DYNAMIC(xdp_ring->itr_setting) ?
    366				 "dynamic" : "fixed");
    367		}
    368	}
    369	rcu_read_unlock();
    370	dev_info(&pf->pdev->dev,
    371		 "    work_limit = %d\n",
    372		 vsi->work_limit);
    373	dev_info(&pf->pdev->dev,
    374		 "    max_frame = %d, rx_buf_len = %d dtype = %d\n",
    375		 vsi->max_frame, vsi->rx_buf_len, 0);
    376	dev_info(&pf->pdev->dev,
    377		 "    num_q_vectors = %i, base_vector = %i\n",
    378		 vsi->num_q_vectors, vsi->base_vector);
    379	dev_info(&pf->pdev->dev,
    380		 "    seid = %d, id = %d, uplink_seid = %d\n",
    381		 vsi->seid, vsi->id, vsi->uplink_seid);
    382	dev_info(&pf->pdev->dev,
    383		 "    base_queue = %d, num_queue_pairs = %d, num_tx_desc = %d, num_rx_desc = %d\n",
    384		 vsi->base_queue, vsi->num_queue_pairs, vsi->num_tx_desc,
    385		 vsi->num_rx_desc);
    386	dev_info(&pf->pdev->dev, "    type = %i\n", vsi->type);
    387	if (vsi->type == I40E_VSI_SRIOV)
    388		dev_info(&pf->pdev->dev, "    VF ID = %i\n", vsi->vf_id);
    389	dev_info(&pf->pdev->dev,
    390		 "    info: valid_sections = 0x%04x, switch_id = 0x%04x\n",
    391		 vsi->info.valid_sections, vsi->info.switch_id);
    392	dev_info(&pf->pdev->dev,
    393		 "    info: sw_reserved[] = 0x%02x 0x%02x\n",
    394		 vsi->info.sw_reserved[0], vsi->info.sw_reserved[1]);
    395	dev_info(&pf->pdev->dev,
    396		 "    info: sec_flags = 0x%02x, sec_reserved = 0x%02x\n",
    397		 vsi->info.sec_flags, vsi->info.sec_reserved);
    398	dev_info(&pf->pdev->dev,
    399		 "    info: pvid = 0x%04x, fcoe_pvid = 0x%04x, port_vlan_flags = 0x%02x\n",
    400		 vsi->info.pvid, vsi->info.fcoe_pvid,
    401		 vsi->info.port_vlan_flags);
    402	dev_info(&pf->pdev->dev,
    403		 "    info: pvlan_reserved[] = 0x%02x 0x%02x 0x%02x\n",
    404		 vsi->info.pvlan_reserved[0], vsi->info.pvlan_reserved[1],
    405		 vsi->info.pvlan_reserved[2]);
    406	dev_info(&pf->pdev->dev,
    407		 "    info: ingress_table = 0x%08x, egress_table = 0x%08x\n",
    408		 vsi->info.ingress_table, vsi->info.egress_table);
    409	dev_info(&pf->pdev->dev,
    410		 "    info: cas_pv_stag = 0x%04x, cas_pv_flags= 0x%02x, cas_pv_reserved = 0x%02x\n",
    411		 vsi->info.cas_pv_tag, vsi->info.cas_pv_flags,
    412		 vsi->info.cas_pv_reserved);
    413	dev_info(&pf->pdev->dev,
    414		 "    info: queue_mapping[0..7 ] = 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n",
    415		 vsi->info.queue_mapping[0], vsi->info.queue_mapping[1],
    416		 vsi->info.queue_mapping[2], vsi->info.queue_mapping[3],
    417		 vsi->info.queue_mapping[4], vsi->info.queue_mapping[5],
    418		 vsi->info.queue_mapping[6], vsi->info.queue_mapping[7]);
    419	dev_info(&pf->pdev->dev,
    420		 "    info: queue_mapping[8..15] = 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n",
    421		 vsi->info.queue_mapping[8], vsi->info.queue_mapping[9],
    422		 vsi->info.queue_mapping[10], vsi->info.queue_mapping[11],
    423		 vsi->info.queue_mapping[12], vsi->info.queue_mapping[13],
    424		 vsi->info.queue_mapping[14], vsi->info.queue_mapping[15]);
    425	dev_info(&pf->pdev->dev,
    426		 "    info: tc_mapping[] = 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n",
    427		 vsi->info.tc_mapping[0], vsi->info.tc_mapping[1],
    428		 vsi->info.tc_mapping[2], vsi->info.tc_mapping[3],
    429		 vsi->info.tc_mapping[4], vsi->info.tc_mapping[5],
    430		 vsi->info.tc_mapping[6], vsi->info.tc_mapping[7]);
    431	dev_info(&pf->pdev->dev,
    432		 "    info: queueing_opt_flags = 0x%02x  queueing_opt_reserved[0..2] = 0x%02x 0x%02x 0x%02x\n",
    433		 vsi->info.queueing_opt_flags,
    434		 vsi->info.queueing_opt_reserved[0],
    435		 vsi->info.queueing_opt_reserved[1],
    436		 vsi->info.queueing_opt_reserved[2]);
    437	dev_info(&pf->pdev->dev,
    438		 "    info: up_enable_bits = 0x%02x\n",
    439		 vsi->info.up_enable_bits);
    440	dev_info(&pf->pdev->dev,
    441		 "    info: sched_reserved = 0x%02x, outer_up_table = 0x%04x\n",
    442		 vsi->info.sched_reserved, vsi->info.outer_up_table);
    443	dev_info(&pf->pdev->dev,
    444		 "    info: cmd_reserved[] = 0x%02x 0x%02x 0x%02x 0x0%02x 0x%02x 0x%02x 0x%02x 0x0%02x\n",
    445		 vsi->info.cmd_reserved[0], vsi->info.cmd_reserved[1],
    446		 vsi->info.cmd_reserved[2], vsi->info.cmd_reserved[3],
    447		 vsi->info.cmd_reserved[4], vsi->info.cmd_reserved[5],
    448		 vsi->info.cmd_reserved[6], vsi->info.cmd_reserved[7]);
    449	dev_info(&pf->pdev->dev,
    450		 "    info: qs_handle[] = 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n",
    451		 vsi->info.qs_handle[0], vsi->info.qs_handle[1],
    452		 vsi->info.qs_handle[2], vsi->info.qs_handle[3],
    453		 vsi->info.qs_handle[4], vsi->info.qs_handle[5],
    454		 vsi->info.qs_handle[6], vsi->info.qs_handle[7]);
    455	dev_info(&pf->pdev->dev,
    456		 "    info: stat_counter_idx = 0x%04x, sched_id = 0x%04x\n",
    457		 vsi->info.stat_counter_idx, vsi->info.sched_id);
    458	dev_info(&pf->pdev->dev,
    459		 "    info: resp_reserved[] = 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n",
    460		 vsi->info.resp_reserved[0], vsi->info.resp_reserved[1],
    461		 vsi->info.resp_reserved[2], vsi->info.resp_reserved[3],
    462		 vsi->info.resp_reserved[4], vsi->info.resp_reserved[5],
    463		 vsi->info.resp_reserved[6], vsi->info.resp_reserved[7],
    464		 vsi->info.resp_reserved[8], vsi->info.resp_reserved[9],
    465		 vsi->info.resp_reserved[10], vsi->info.resp_reserved[11]);
    466	dev_info(&pf->pdev->dev, "    idx = %d\n", vsi->idx);
    467	dev_info(&pf->pdev->dev,
    468		 "    tc_config: numtc = %d, enabled_tc = 0x%x\n",
    469		 vsi->tc_config.numtc, vsi->tc_config.enabled_tc);
    470	for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
    471		dev_info(&pf->pdev->dev,
    472			 "    tc_config: tc = %d, qoffset = %d, qcount = %d, netdev_tc = %d\n",
    473			 i, vsi->tc_config.tc_info[i].qoffset,
    474			 vsi->tc_config.tc_info[i].qcount,
    475			 vsi->tc_config.tc_info[i].netdev_tc);
    476	}
    477	dev_info(&pf->pdev->dev,
    478		 "    bw: bw_limit = %d, bw_max_quanta = %d\n",
    479		 vsi->bw_limit, vsi->bw_max_quanta);
    480	for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
    481		dev_info(&pf->pdev->dev,
    482			 "    bw[%d]: ets_share_credits = %d, ets_limit_credits = %d, max_quanta = %d\n",
    483			 i, vsi->bw_ets_share_credits[i],
    484			 vsi->bw_ets_limit_credits[i],
    485			 vsi->bw_ets_max_quanta[i]);
    486	}
    487}
    488
    489/**
    490 * i40e_dbg_dump_aq_desc - handles dump aq_desc write into command datum
    491 * @pf: the i40e_pf created in command write
    492 **/
    493static void i40e_dbg_dump_aq_desc(struct i40e_pf *pf)
    494{
    495	struct i40e_adminq_ring *ring;
    496	struct i40e_hw *hw = &pf->hw;
    497	char hdr[32];
    498	int i;
    499
    500	snprintf(hdr, sizeof(hdr), "%s %s:         ",
    501		 dev_driver_string(&pf->pdev->dev),
    502		 dev_name(&pf->pdev->dev));
    503
    504	/* first the send (command) ring, then the receive (event) ring */
    505	dev_info(&pf->pdev->dev, "AdminQ Tx Ring\n");
    506	ring = &(hw->aq.asq);
    507	for (i = 0; i < ring->count; i++) {
    508		struct i40e_aq_desc *d = I40E_ADMINQ_DESC(*ring, i);
    509
    510		dev_info(&pf->pdev->dev,
    511			 "   at[%02d] flags=0x%04x op=0x%04x dlen=0x%04x ret=0x%04x cookie_h=0x%08x cookie_l=0x%08x\n",
    512			 i, d->flags, d->opcode, d->datalen, d->retval,
    513			 d->cookie_high, d->cookie_low);
    514		print_hex_dump(KERN_INFO, hdr, DUMP_PREFIX_NONE,
    515			       16, 1, d->params.raw, 16, 0);
    516	}
    517
    518	dev_info(&pf->pdev->dev, "AdminQ Rx Ring\n");
    519	ring = &(hw->aq.arq);
    520	for (i = 0; i < ring->count; i++) {
    521		struct i40e_aq_desc *d = I40E_ADMINQ_DESC(*ring, i);
    522
    523		dev_info(&pf->pdev->dev,
    524			 "   ar[%02d] flags=0x%04x op=0x%04x dlen=0x%04x ret=0x%04x cookie_h=0x%08x cookie_l=0x%08x\n",
    525			 i, d->flags, d->opcode, d->datalen, d->retval,
    526			 d->cookie_high, d->cookie_low);
    527		print_hex_dump(KERN_INFO, hdr, DUMP_PREFIX_NONE,
    528			       16, 1, d->params.raw, 16, 0);
    529	}
    530}
    531
    532/**
    533 * i40e_dbg_dump_desc - handles dump desc write into command datum
    534 * @cnt: number of arguments that the user supplied
    535 * @vsi_seid: vsi id entered by user
    536 * @ring_id: ring id entered by user
    537 * @desc_n: descriptor number entered by user
    538 * @pf: the i40e_pf created in command write
    539 * @type: enum describing whether ring is RX, TX or XDP
    540 **/
    541static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,
    542			       struct i40e_pf *pf, enum ring_type type)
    543{
    544	bool is_rx_ring = type == RING_TYPE_RX;
    545	struct i40e_tx_desc *txd;
    546	union i40e_rx_desc *rxd;
    547	struct i40e_ring *ring;
    548	struct i40e_vsi *vsi;
    549	int i;
    550
    551	vsi = i40e_dbg_find_vsi(pf, vsi_seid);
    552	if (!vsi) {
    553		dev_info(&pf->pdev->dev, "vsi %d not found\n", vsi_seid);
    554		return;
    555	}
    556	if (vsi->type != I40E_VSI_MAIN &&
    557	    vsi->type != I40E_VSI_FDIR &&
    558	    vsi->type != I40E_VSI_VMDQ2) {
    559		dev_info(&pf->pdev->dev,
    560			 "vsi %d type %d descriptor rings not available\n",
    561			 vsi_seid, vsi->type);
    562		return;
    563	}
    564	if (type == RING_TYPE_XDP && !i40e_enabled_xdp_vsi(vsi)) {
    565		dev_info(&pf->pdev->dev, "XDP not enabled on VSI %d\n", vsi_seid);
    566		return;
    567	}
    568	if (ring_id >= vsi->num_queue_pairs || ring_id < 0) {
    569		dev_info(&pf->pdev->dev, "ring %d not found\n", ring_id);
    570		return;
    571	}
    572	if (!vsi->tx_rings || !vsi->tx_rings[0]->desc) {
    573		dev_info(&pf->pdev->dev,
    574			 "descriptor rings have not been allocated for vsi %d\n",
    575			 vsi_seid);
    576		return;
    577	}
    578
    579	switch (type) {
    580	case RING_TYPE_RX:
    581		ring = kmemdup(vsi->rx_rings[ring_id], sizeof(*ring), GFP_KERNEL);
    582		break;
    583	case RING_TYPE_TX:
    584		ring = kmemdup(vsi->tx_rings[ring_id], sizeof(*ring), GFP_KERNEL);
    585		break;
    586	case RING_TYPE_XDP:
    587		ring = kmemdup(vsi->xdp_rings[ring_id], sizeof(*ring), GFP_KERNEL);
    588		break;
    589	default:
    590		ring = NULL;
    591		break;
    592	}
    593	if (!ring)
    594		return;
    595
    596	if (cnt == 2) {
    597		switch (type) {
    598		case RING_TYPE_RX:
    599			dev_info(&pf->pdev->dev, "VSI = %02i Rx ring = %02i\n", vsi_seid, ring_id);
    600			break;
    601		case RING_TYPE_TX:
    602			dev_info(&pf->pdev->dev, "VSI = %02i Tx ring = %02i\n", vsi_seid, ring_id);
    603			break;
    604		case RING_TYPE_XDP:
    605			dev_info(&pf->pdev->dev, "VSI = %02i XDP ring = %02i\n", vsi_seid, ring_id);
    606			break;
    607		}
    608		for (i = 0; i < ring->count; i++) {
    609			if (!is_rx_ring) {
    610				txd = I40E_TX_DESC(ring, i);
    611				dev_info(&pf->pdev->dev,
    612					 "   d[%03x] = 0x%016llx 0x%016llx\n",
    613					 i, txd->buffer_addr,
    614					 txd->cmd_type_offset_bsz);
    615			} else {
    616				rxd = I40E_RX_DESC(ring, i);
    617				dev_info(&pf->pdev->dev,
    618					 "   d[%03x] = 0x%016llx 0x%016llx\n",
    619					 i, rxd->read.pkt_addr,
    620					 rxd->read.hdr_addr);
    621			}
    622		}
    623	} else if (cnt == 3) {
    624		if (desc_n >= ring->count || desc_n < 0) {
    625			dev_info(&pf->pdev->dev,
    626				 "descriptor %d not found\n", desc_n);
    627			goto out;
    628		}
    629		if (!is_rx_ring) {
    630			txd = I40E_TX_DESC(ring, desc_n);
    631			dev_info(&pf->pdev->dev,
    632				 "vsi = %02i tx ring = %02i d[%03x] = 0x%016llx 0x%016llx\n",
    633				 vsi_seid, ring_id, desc_n,
    634				 txd->buffer_addr, txd->cmd_type_offset_bsz);
    635		} else {
    636			rxd = I40E_RX_DESC(ring, desc_n);
    637			dev_info(&pf->pdev->dev,
    638				 "vsi = %02i rx ring = %02i d[%03x] = 0x%016llx 0x%016llx\n",
    639				 vsi_seid, ring_id, desc_n,
    640				 rxd->read.pkt_addr, rxd->read.hdr_addr);
    641		}
    642	} else {
    643		dev_info(&pf->pdev->dev, "dump desc rx/tx/xdp <vsi_seid> <ring_id> [<desc_n>]\n");
    644	}
    645
    646out:
    647	kfree(ring);
    648}
    649
    650/**
    651 * i40e_dbg_dump_vsi_no_seid - handles dump vsi write into command datum
    652 * @pf: the i40e_pf created in command write
    653 **/
    654static void i40e_dbg_dump_vsi_no_seid(struct i40e_pf *pf)
    655{
    656	int i;
    657
    658	for (i = 0; i < pf->num_alloc_vsi; i++)
    659		if (pf->vsi[i])
    660			dev_info(&pf->pdev->dev, "dump vsi[%d]: %d\n",
    661				 i, pf->vsi[i]->seid);
    662}
    663
    664/**
    665 * i40e_dbg_dump_eth_stats - handles dump stats write into command datum
    666 * @pf: the i40e_pf created in command write
    667 * @estats: the eth stats structure to be dumped
    668 **/
    669static void i40e_dbg_dump_eth_stats(struct i40e_pf *pf,
    670				    struct i40e_eth_stats *estats)
    671{
    672	dev_info(&pf->pdev->dev, "  ethstats:\n");
    673	dev_info(&pf->pdev->dev,
    674		 "    rx_bytes = \t%lld \trx_unicast = \t\t%lld \trx_multicast = \t%lld\n",
    675		estats->rx_bytes, estats->rx_unicast, estats->rx_multicast);
    676	dev_info(&pf->pdev->dev,
    677		 "    rx_broadcast = \t%lld \trx_discards = \t\t%lld\n",
    678		 estats->rx_broadcast, estats->rx_discards);
    679	dev_info(&pf->pdev->dev,
    680		 "    rx_unknown_protocol = \t%lld \ttx_bytes = \t%lld\n",
    681		 estats->rx_unknown_protocol, estats->tx_bytes);
    682	dev_info(&pf->pdev->dev,
    683		 "    tx_unicast = \t%lld \ttx_multicast = \t\t%lld \ttx_broadcast = \t%lld\n",
    684		 estats->tx_unicast, estats->tx_multicast, estats->tx_broadcast);
    685	dev_info(&pf->pdev->dev,
    686		 "    tx_discards = \t%lld \ttx_errors = \t\t%lld\n",
    687		 estats->tx_discards, estats->tx_errors);
    688}
    689
    690/**
    691 * i40e_dbg_dump_veb_seid - handles dump stats of a single given veb
    692 * @pf: the i40e_pf created in command write
    693 * @seid: the seid the user put in
    694 **/
    695static void i40e_dbg_dump_veb_seid(struct i40e_pf *pf, int seid)
    696{
    697	struct i40e_veb *veb;
    698
    699	veb = i40e_dbg_find_veb(pf, seid);
    700	if (!veb) {
    701		dev_info(&pf->pdev->dev, "can't find veb %d\n", seid);
    702		return;
    703	}
    704	dev_info(&pf->pdev->dev,
    705		 "veb idx=%d,%d stats_ic=%d  seid=%d uplink=%d mode=%s\n",
    706		 veb->idx, veb->veb_idx, veb->stats_idx, veb->seid,
    707		 veb->uplink_seid,
    708		 veb->bridge_mode == BRIDGE_MODE_VEPA ? "VEPA" : "VEB");
    709	i40e_dbg_dump_eth_stats(pf, &veb->stats);
    710}
    711
    712/**
    713 * i40e_dbg_dump_veb_all - dumps all known veb's stats
    714 * @pf: the i40e_pf created in command write
    715 **/
    716static void i40e_dbg_dump_veb_all(struct i40e_pf *pf)
    717{
    718	struct i40e_veb *veb;
    719	int i;
    720
    721	for (i = 0; i < I40E_MAX_VEB; i++) {
    722		veb = pf->veb[i];
    723		if (veb)
    724			i40e_dbg_dump_veb_seid(pf, veb->seid);
    725	}
    726}
    727
    728/**
    729 * i40e_dbg_dump_vf - dump VF info
    730 * @pf: the i40e_pf created in command write
    731 * @vf_id: the vf_id from the user
    732 **/
    733static void i40e_dbg_dump_vf(struct i40e_pf *pf, int vf_id)
    734{
    735	struct i40e_vf *vf;
    736	struct i40e_vsi *vsi;
    737
    738	if (!pf->num_alloc_vfs) {
    739		dev_info(&pf->pdev->dev, "no VFs allocated\n");
    740	} else if ((vf_id >= 0) && (vf_id < pf->num_alloc_vfs)) {
    741		vf = &pf->vf[vf_id];
    742		vsi = pf->vsi[vf->lan_vsi_idx];
    743		dev_info(&pf->pdev->dev, "vf %2d: VSI id=%d, seid=%d, qps=%d\n",
    744			 vf_id, vf->lan_vsi_id, vsi->seid, vf->num_queue_pairs);
    745		dev_info(&pf->pdev->dev, "       num MDD=%lld\n",
    746			 vf->num_mdd_events);
    747	} else {
    748		dev_info(&pf->pdev->dev, "invalid VF id %d\n", vf_id);
    749	}
    750}
    751
    752/**
    753 * i40e_dbg_dump_vf_all - dump VF info for all VFs
    754 * @pf: the i40e_pf created in command write
    755 **/
    756static void i40e_dbg_dump_vf_all(struct i40e_pf *pf)
    757{
    758	int i;
    759
    760	if (!pf->num_alloc_vfs)
    761		dev_info(&pf->pdev->dev, "no VFs enabled!\n");
    762	else
    763		for (i = 0; i < pf->num_alloc_vfs; i++)
    764			i40e_dbg_dump_vf(pf, i);
    765}
    766
    767/**
    768 * i40e_dbg_command_write - write into command datum
    769 * @filp: the opened file
    770 * @buffer: where to find the user's data
    771 * @count: the length of the user's data
    772 * @ppos: file position offset
    773 **/
    774static ssize_t i40e_dbg_command_write(struct file *filp,
    775				      const char __user *buffer,
    776				      size_t count, loff_t *ppos)
    777{
    778	struct i40e_pf *pf = filp->private_data;
    779	char *cmd_buf, *cmd_buf_tmp;
    780	int bytes_not_copied;
    781	struct i40e_vsi *vsi;
    782	int vsi_seid;
    783	int veb_seid;
    784	int vf_id;
    785	int cnt;
    786
    787	/* don't allow partial writes */
    788	if (*ppos != 0)
    789		return 0;
    790
    791	cmd_buf = kzalloc(count + 1, GFP_KERNEL);
    792	if (!cmd_buf)
    793		return count;
    794	bytes_not_copied = copy_from_user(cmd_buf, buffer, count);
    795	if (bytes_not_copied) {
    796		kfree(cmd_buf);
    797		return -EFAULT;
    798	}
    799	cmd_buf[count] = '\0';
    800
    801	cmd_buf_tmp = strchr(cmd_buf, '\n');
    802	if (cmd_buf_tmp) {
    803		*cmd_buf_tmp = '\0';
    804		count = cmd_buf_tmp - cmd_buf + 1;
    805	}
    806
    807	if (strncmp(cmd_buf, "add vsi", 7) == 0) {
    808		vsi_seid = -1;
    809		cnt = sscanf(&cmd_buf[7], "%i", &vsi_seid);
    810		if (cnt == 0) {
    811			/* default to PF VSI */
    812			vsi_seid = pf->vsi[pf->lan_vsi]->seid;
    813		} else if (vsi_seid < 0) {
    814			dev_info(&pf->pdev->dev, "add VSI %d: bad vsi seid\n",
    815				 vsi_seid);
    816			goto command_write_done;
    817		}
    818
    819		/* By default we are in VEPA mode, if this is the first VF/VMDq
    820		 * VSI to be added switch to VEB mode.
    821		 */
    822		if (!(pf->flags & I40E_FLAG_VEB_MODE_ENABLED)) {
    823			pf->flags |= I40E_FLAG_VEB_MODE_ENABLED;
    824			i40e_do_reset_safe(pf, I40E_PF_RESET_FLAG);
    825		}
    826
    827		vsi = i40e_vsi_setup(pf, I40E_VSI_VMDQ2, vsi_seid, 0);
    828		if (vsi)
    829			dev_info(&pf->pdev->dev, "added VSI %d to relay %d\n",
    830				 vsi->seid, vsi->uplink_seid);
    831		else
    832			dev_info(&pf->pdev->dev, "'%s' failed\n", cmd_buf);
    833
    834	} else if (strncmp(cmd_buf, "del vsi", 7) == 0) {
    835		cnt = sscanf(&cmd_buf[7], "%i", &vsi_seid);
    836		if (cnt != 1) {
    837			dev_info(&pf->pdev->dev,
    838				 "del vsi: bad command string, cnt=%d\n",
    839				 cnt);
    840			goto command_write_done;
    841		}
    842		vsi = i40e_dbg_find_vsi(pf, vsi_seid);
    843		if (!vsi) {
    844			dev_info(&pf->pdev->dev, "del VSI %d: seid not found\n",
    845				 vsi_seid);
    846			goto command_write_done;
    847		}
    848
    849		dev_info(&pf->pdev->dev, "deleting VSI %d\n", vsi_seid);
    850		i40e_vsi_release(vsi);
    851
    852	} else if (strncmp(cmd_buf, "add relay", 9) == 0) {
    853		struct i40e_veb *veb;
    854		int uplink_seid, i;
    855
    856		cnt = sscanf(&cmd_buf[9], "%i %i", &uplink_seid, &vsi_seid);
    857		if (cnt != 2) {
    858			dev_info(&pf->pdev->dev,
    859				 "add relay: bad command string, cnt=%d\n",
    860				 cnt);
    861			goto command_write_done;
    862		} else if (uplink_seid < 0) {
    863			dev_info(&pf->pdev->dev,
    864				 "add relay %d: bad uplink seid\n",
    865				 uplink_seid);
    866			goto command_write_done;
    867		}
    868
    869		vsi = i40e_dbg_find_vsi(pf, vsi_seid);
    870		if (!vsi) {
    871			dev_info(&pf->pdev->dev,
    872				 "add relay: VSI %d not found\n", vsi_seid);
    873			goto command_write_done;
    874		}
    875
    876		for (i = 0; i < I40E_MAX_VEB; i++)
    877			if (pf->veb[i] && pf->veb[i]->seid == uplink_seid)
    878				break;
    879		if (i >= I40E_MAX_VEB && uplink_seid != 0 &&
    880		    uplink_seid != pf->mac_seid) {
    881			dev_info(&pf->pdev->dev,
    882				 "add relay: relay uplink %d not found\n",
    883				 uplink_seid);
    884			goto command_write_done;
    885		}
    886
    887		veb = i40e_veb_setup(pf, 0, uplink_seid, vsi_seid,
    888				     vsi->tc_config.enabled_tc);
    889		if (veb)
    890			dev_info(&pf->pdev->dev, "added relay %d\n", veb->seid);
    891		else
    892			dev_info(&pf->pdev->dev, "add relay failed\n");
    893
    894	} else if (strncmp(cmd_buf, "del relay", 9) == 0) {
    895		int i;
    896		cnt = sscanf(&cmd_buf[9], "%i", &veb_seid);
    897		if (cnt != 1) {
    898			dev_info(&pf->pdev->dev,
    899				 "del relay: bad command string, cnt=%d\n",
    900				 cnt);
    901			goto command_write_done;
    902		} else if (veb_seid < 0) {
    903			dev_info(&pf->pdev->dev,
    904				 "del relay %d: bad relay seid\n", veb_seid);
    905			goto command_write_done;
    906		}
    907
    908		/* find the veb */
    909		for (i = 0; i < I40E_MAX_VEB; i++)
    910			if (pf->veb[i] && pf->veb[i]->seid == veb_seid)
    911				break;
    912		if (i >= I40E_MAX_VEB) {
    913			dev_info(&pf->pdev->dev,
    914				 "del relay: relay %d not found\n", veb_seid);
    915			goto command_write_done;
    916		}
    917
    918		dev_info(&pf->pdev->dev, "deleting relay %d\n", veb_seid);
    919		i40e_veb_release(pf->veb[i]);
    920	} else if (strncmp(cmd_buf, "add pvid", 8) == 0) {
    921		i40e_status ret;
    922		u16 vid;
    923		unsigned int v;
    924
    925		cnt = sscanf(&cmd_buf[8], "%i %u", &vsi_seid, &v);
    926		if (cnt != 2) {
    927			dev_info(&pf->pdev->dev,
    928				 "add pvid: bad command string, cnt=%d\n", cnt);
    929			goto command_write_done;
    930		}
    931
    932		vsi = i40e_dbg_find_vsi(pf, vsi_seid);
    933		if (!vsi) {
    934			dev_info(&pf->pdev->dev, "add pvid: VSI %d not found\n",
    935				 vsi_seid);
    936			goto command_write_done;
    937		}
    938
    939		vid = v;
    940		ret = i40e_vsi_add_pvid(vsi, vid);
    941		if (!ret)
    942			dev_info(&pf->pdev->dev,
    943				 "add pvid: %d added to VSI %d\n",
    944				 vid, vsi_seid);
    945		else
    946			dev_info(&pf->pdev->dev,
    947				 "add pvid: %d to VSI %d failed, ret=%d\n",
    948				 vid, vsi_seid, ret);
    949
    950	} else if (strncmp(cmd_buf, "del pvid", 8) == 0) {
    951
    952		cnt = sscanf(&cmd_buf[8], "%i", &vsi_seid);
    953		if (cnt != 1) {
    954			dev_info(&pf->pdev->dev,
    955				 "del pvid: bad command string, cnt=%d\n",
    956				 cnt);
    957			goto command_write_done;
    958		}
    959
    960		vsi = i40e_dbg_find_vsi(pf, vsi_seid);
    961		if (!vsi) {
    962			dev_info(&pf->pdev->dev,
    963				 "del pvid: VSI %d not found\n", vsi_seid);
    964			goto command_write_done;
    965		}
    966
    967		i40e_vsi_remove_pvid(vsi);
    968		dev_info(&pf->pdev->dev,
    969			 "del pvid: removed from VSI %d\n", vsi_seid);
    970
    971	} else if (strncmp(cmd_buf, "dump", 4) == 0) {
    972		if (strncmp(&cmd_buf[5], "switch", 6) == 0) {
    973			i40e_fetch_switch_configuration(pf, true);
    974		} else if (strncmp(&cmd_buf[5], "vsi", 3) == 0) {
    975			cnt = sscanf(&cmd_buf[8], "%i", &vsi_seid);
    976			if (cnt > 0)
    977				i40e_dbg_dump_vsi_seid(pf, vsi_seid);
    978			else
    979				i40e_dbg_dump_vsi_no_seid(pf);
    980		} else if (strncmp(&cmd_buf[5], "veb", 3) == 0) {
    981			cnt = sscanf(&cmd_buf[8], "%i", &vsi_seid);
    982			if (cnt > 0)
    983				i40e_dbg_dump_veb_seid(pf, vsi_seid);
    984			else
    985				i40e_dbg_dump_veb_all(pf);
    986		} else if (strncmp(&cmd_buf[5], "vf", 2) == 0) {
    987			cnt = sscanf(&cmd_buf[7], "%i", &vf_id);
    988			if (cnt > 0)
    989				i40e_dbg_dump_vf(pf, vf_id);
    990			else
    991				i40e_dbg_dump_vf_all(pf);
    992		} else if (strncmp(&cmd_buf[5], "desc", 4) == 0) {
    993			int ring_id, desc_n;
    994			if (strncmp(&cmd_buf[10], "rx", 2) == 0) {
    995				cnt = sscanf(&cmd_buf[12], "%i %i %i",
    996					     &vsi_seid, &ring_id, &desc_n);
    997				i40e_dbg_dump_desc(cnt, vsi_seid, ring_id,
    998						   desc_n, pf, RING_TYPE_RX);
    999			} else if (strncmp(&cmd_buf[10], "tx", 2)
   1000					== 0) {
   1001				cnt = sscanf(&cmd_buf[12], "%i %i %i",
   1002					     &vsi_seid, &ring_id, &desc_n);
   1003				i40e_dbg_dump_desc(cnt, vsi_seid, ring_id,
   1004						   desc_n, pf, RING_TYPE_TX);
   1005			} else if (strncmp(&cmd_buf[10], "xdp", 3)
   1006					== 0) {
   1007				cnt = sscanf(&cmd_buf[13], "%i %i %i",
   1008					     &vsi_seid, &ring_id, &desc_n);
   1009				i40e_dbg_dump_desc(cnt, vsi_seid, ring_id,
   1010						   desc_n, pf, RING_TYPE_XDP);
   1011			} else if (strncmp(&cmd_buf[10], "aq", 2) == 0) {
   1012				i40e_dbg_dump_aq_desc(pf);
   1013			} else {
   1014				dev_info(&pf->pdev->dev,
   1015					 "dump desc tx <vsi_seid> <ring_id> [<desc_n>]\n");
   1016				dev_info(&pf->pdev->dev,
   1017					 "dump desc rx <vsi_seid> <ring_id> [<desc_n>]\n");
   1018				dev_info(&pf->pdev->dev,
   1019					 "dump desc xdp <vsi_seid> <ring_id> [<desc_n>]\n");
   1020				dev_info(&pf->pdev->dev, "dump desc aq\n");
   1021			}
   1022		} else if (strncmp(&cmd_buf[5], "reset stats", 11) == 0) {
   1023			dev_info(&pf->pdev->dev,
   1024				 "core reset count: %d\n", pf->corer_count);
   1025			dev_info(&pf->pdev->dev,
   1026				 "global reset count: %d\n", pf->globr_count);
   1027			dev_info(&pf->pdev->dev,
   1028				 "emp reset count: %d\n", pf->empr_count);
   1029			dev_info(&pf->pdev->dev,
   1030				 "pf reset count: %d\n", pf->pfr_count);
   1031			dev_info(&pf->pdev->dev,
   1032				 "pf tx sluggish count: %d\n",
   1033				 pf->tx_sluggish_count);
   1034		} else if (strncmp(&cmd_buf[5], "port", 4) == 0) {
   1035			struct i40e_aqc_query_port_ets_config_resp *bw_data;
   1036			struct i40e_dcbx_config *cfg =
   1037						&pf->hw.local_dcbx_config;
   1038			struct i40e_dcbx_config *r_cfg =
   1039						&pf->hw.remote_dcbx_config;
   1040			int i, ret;
   1041			u16 switch_id;
   1042
   1043			bw_data = kzalloc(sizeof(
   1044				    struct i40e_aqc_query_port_ets_config_resp),
   1045					  GFP_KERNEL);
   1046			if (!bw_data) {
   1047				ret = -ENOMEM;
   1048				goto command_write_done;
   1049			}
   1050
   1051			vsi = pf->vsi[pf->lan_vsi];
   1052			switch_id =
   1053				le16_to_cpu(vsi->info.switch_id) &
   1054					    I40E_AQ_VSI_SW_ID_MASK;
   1055
   1056			ret = i40e_aq_query_port_ets_config(&pf->hw,
   1057							    switch_id,
   1058							    bw_data, NULL);
   1059			if (ret) {
   1060				dev_info(&pf->pdev->dev,
   1061					 "Query Port ETS Config AQ command failed =0x%x\n",
   1062					 pf->hw.aq.asq_last_status);
   1063				kfree(bw_data);
   1064				bw_data = NULL;
   1065				goto command_write_done;
   1066			}
   1067			dev_info(&pf->pdev->dev,
   1068				 "port bw: tc_valid=0x%x tc_strict_prio=0x%x, tc_bw_max=0x%04x,0x%04x\n",
   1069				 bw_data->tc_valid_bits,
   1070				 bw_data->tc_strict_priority_bits,
   1071				 le16_to_cpu(bw_data->tc_bw_max[0]),
   1072				 le16_to_cpu(bw_data->tc_bw_max[1]));
   1073			for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
   1074				dev_info(&pf->pdev->dev, "port bw: tc_bw_share=%d tc_bw_limit=%d\n",
   1075					 bw_data->tc_bw_share_credits[i],
   1076					 le16_to_cpu(bw_data->tc_bw_limits[i]));
   1077			}
   1078
   1079			kfree(bw_data);
   1080			bw_data = NULL;
   1081
   1082			dev_info(&pf->pdev->dev,
   1083				 "port dcbx_mode=%d\n", cfg->dcbx_mode);
   1084			dev_info(&pf->pdev->dev,
   1085				 "port ets_cfg: willing=%d cbs=%d, maxtcs=%d\n",
   1086				 cfg->etscfg.willing, cfg->etscfg.cbs,
   1087				 cfg->etscfg.maxtcs);
   1088			for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
   1089				dev_info(&pf->pdev->dev, "port ets_cfg: %d prio_tc=%d tcbw=%d tctsa=%d\n",
   1090					 i, cfg->etscfg.prioritytable[i],
   1091					 cfg->etscfg.tcbwtable[i],
   1092					 cfg->etscfg.tsatable[i]);
   1093			}
   1094			for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
   1095				dev_info(&pf->pdev->dev, "port ets_rec: %d prio_tc=%d tcbw=%d tctsa=%d\n",
   1096					 i, cfg->etsrec.prioritytable[i],
   1097					 cfg->etsrec.tcbwtable[i],
   1098					 cfg->etsrec.tsatable[i]);
   1099			}
   1100			dev_info(&pf->pdev->dev,
   1101				 "port pfc_cfg: willing=%d mbc=%d, pfccap=%d pfcenable=0x%x\n",
   1102				 cfg->pfc.willing, cfg->pfc.mbc,
   1103				 cfg->pfc.pfccap, cfg->pfc.pfcenable);
   1104			dev_info(&pf->pdev->dev,
   1105				 "port app_table: num_apps=%d\n", cfg->numapps);
   1106			for (i = 0; i < cfg->numapps; i++) {
   1107				dev_info(&pf->pdev->dev, "port app_table: %d prio=%d selector=%d protocol=0x%x\n",
   1108					 i, cfg->app[i].priority,
   1109					 cfg->app[i].selector,
   1110					 cfg->app[i].protocolid);
   1111			}
   1112			/* Peer TLV DCBX data */
   1113			dev_info(&pf->pdev->dev,
   1114				 "remote port ets_cfg: willing=%d cbs=%d, maxtcs=%d\n",
   1115				 r_cfg->etscfg.willing,
   1116				 r_cfg->etscfg.cbs, r_cfg->etscfg.maxtcs);
   1117			for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
   1118				dev_info(&pf->pdev->dev, "remote port ets_cfg: %d prio_tc=%d tcbw=%d tctsa=%d\n",
   1119					 i, r_cfg->etscfg.prioritytable[i],
   1120					 r_cfg->etscfg.tcbwtable[i],
   1121					 r_cfg->etscfg.tsatable[i]);
   1122			}
   1123			for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
   1124				dev_info(&pf->pdev->dev, "remote port ets_rec: %d prio_tc=%d tcbw=%d tctsa=%d\n",
   1125					 i, r_cfg->etsrec.prioritytable[i],
   1126					 r_cfg->etsrec.tcbwtable[i],
   1127					 r_cfg->etsrec.tsatable[i]);
   1128			}
   1129			dev_info(&pf->pdev->dev,
   1130				 "remote port pfc_cfg: willing=%d mbc=%d, pfccap=%d pfcenable=0x%x\n",
   1131				 r_cfg->pfc.willing,
   1132				 r_cfg->pfc.mbc,
   1133				 r_cfg->pfc.pfccap,
   1134				 r_cfg->pfc.pfcenable);
   1135			dev_info(&pf->pdev->dev,
   1136				 "remote port app_table: num_apps=%d\n",
   1137				 r_cfg->numapps);
   1138			for (i = 0; i < r_cfg->numapps; i++) {
   1139				dev_info(&pf->pdev->dev, "remote port app_table: %d prio=%d selector=%d protocol=0x%x\n",
   1140					 i, r_cfg->app[i].priority,
   1141					 r_cfg->app[i].selector,
   1142					 r_cfg->app[i].protocolid);
   1143			}
   1144		} else if (strncmp(&cmd_buf[5], "debug fwdata", 12) == 0) {
   1145			int cluster_id, table_id;
   1146			int index, ret;
   1147			u16 buff_len = 4096;
   1148			u32 next_index;
   1149			u8 next_table;
   1150			u8 *buff;
   1151			u16 rlen;
   1152
   1153			cnt = sscanf(&cmd_buf[18], "%i %i %i",
   1154				     &cluster_id, &table_id, &index);
   1155			if (cnt != 3) {
   1156				dev_info(&pf->pdev->dev,
   1157					 "dump debug fwdata <cluster_id> <table_id> <index>\n");
   1158				goto command_write_done;
   1159			}
   1160
   1161			dev_info(&pf->pdev->dev,
   1162				 "AQ debug dump fwdata params %x %x %x %x\n",
   1163				 cluster_id, table_id, index, buff_len);
   1164			buff = kzalloc(buff_len, GFP_KERNEL);
   1165			if (!buff)
   1166				goto command_write_done;
   1167
   1168			ret = i40e_aq_debug_dump(&pf->hw, cluster_id, table_id,
   1169						 index, buff_len, buff, &rlen,
   1170						 &next_table, &next_index,
   1171						 NULL);
   1172			if (ret) {
   1173				dev_info(&pf->pdev->dev,
   1174					 "debug dump fwdata AQ Failed %d 0x%x\n",
   1175					 ret, pf->hw.aq.asq_last_status);
   1176				kfree(buff);
   1177				buff = NULL;
   1178				goto command_write_done;
   1179			}
   1180			dev_info(&pf->pdev->dev,
   1181				 "AQ debug dump fwdata rlen=0x%x next_table=0x%x next_index=0x%x\n",
   1182				 rlen, next_table, next_index);
   1183			print_hex_dump(KERN_INFO, "AQ buffer WB: ",
   1184				       DUMP_PREFIX_OFFSET, 16, 1,
   1185				       buff, rlen, true);
   1186			kfree(buff);
   1187			buff = NULL;
   1188		} else {
   1189			dev_info(&pf->pdev->dev,
   1190				 "dump desc tx <vsi_seid> <ring_id> [<desc_n>], dump desc rx <vsi_seid> <ring_id> [<desc_n>], dump desc xdp <vsi_seid> <ring_id> [<desc_n>],\n");
   1191			dev_info(&pf->pdev->dev, "dump switch\n");
   1192			dev_info(&pf->pdev->dev, "dump vsi [seid]\n");
   1193			dev_info(&pf->pdev->dev, "dump reset stats\n");
   1194			dev_info(&pf->pdev->dev, "dump port\n");
   1195			dev_info(&pf->pdev->dev, "dump vf [vf_id]\n");
   1196			dev_info(&pf->pdev->dev,
   1197				 "dump debug fwdata <cluster_id> <table_id> <index>\n");
   1198		}
   1199	} else if (strncmp(cmd_buf, "pfr", 3) == 0) {
   1200		dev_info(&pf->pdev->dev, "debugfs: forcing PFR\n");
   1201		i40e_do_reset_safe(pf, BIT(__I40E_PF_RESET_REQUESTED));
   1202
   1203	} else if (strncmp(cmd_buf, "corer", 5) == 0) {
   1204		dev_info(&pf->pdev->dev, "debugfs: forcing CoreR\n");
   1205		i40e_do_reset_safe(pf, BIT(__I40E_CORE_RESET_REQUESTED));
   1206
   1207	} else if (strncmp(cmd_buf, "globr", 5) == 0) {
   1208		dev_info(&pf->pdev->dev, "debugfs: forcing GlobR\n");
   1209		i40e_do_reset_safe(pf, BIT(__I40E_GLOBAL_RESET_REQUESTED));
   1210
   1211	} else if (strncmp(cmd_buf, "read", 4) == 0) {
   1212		u32 address;
   1213		u32 value;
   1214
   1215		cnt = sscanf(&cmd_buf[4], "%i", &address);
   1216		if (cnt != 1) {
   1217			dev_info(&pf->pdev->dev, "read <reg>\n");
   1218			goto command_write_done;
   1219		}
   1220
   1221		/* check the range on address */
   1222		if (address > (pf->ioremap_len - sizeof(u32))) {
   1223			dev_info(&pf->pdev->dev, "read reg address 0x%08x too large, max=0x%08lx\n",
   1224				 address, (unsigned long int)(pf->ioremap_len - sizeof(u32)));
   1225			goto command_write_done;
   1226		}
   1227
   1228		value = rd32(&pf->hw, address);
   1229		dev_info(&pf->pdev->dev, "read: 0x%08x = 0x%08x\n",
   1230			 address, value);
   1231
   1232	} else if (strncmp(cmd_buf, "write", 5) == 0) {
   1233		u32 address, value;
   1234
   1235		cnt = sscanf(&cmd_buf[5], "%i %i", &address, &value);
   1236		if (cnt != 2) {
   1237			dev_info(&pf->pdev->dev, "write <reg> <value>\n");
   1238			goto command_write_done;
   1239		}
   1240
   1241		/* check the range on address */
   1242		if (address > (pf->ioremap_len - sizeof(u32))) {
   1243			dev_info(&pf->pdev->dev, "write reg address 0x%08x too large, max=0x%08lx\n",
   1244				 address, (unsigned long int)(pf->ioremap_len - sizeof(u32)));
   1245			goto command_write_done;
   1246		}
   1247		wr32(&pf->hw, address, value);
   1248		value = rd32(&pf->hw, address);
   1249		dev_info(&pf->pdev->dev, "write: 0x%08x = 0x%08x\n",
   1250			 address, value);
   1251	} else if (strncmp(cmd_buf, "clear_stats", 11) == 0) {
   1252		if (strncmp(&cmd_buf[12], "vsi", 3) == 0) {
   1253			cnt = sscanf(&cmd_buf[15], "%i", &vsi_seid);
   1254			if (cnt == 0) {
   1255				int i;
   1256
   1257				for (i = 0; i < pf->num_alloc_vsi; i++)
   1258					i40e_vsi_reset_stats(pf->vsi[i]);
   1259				dev_info(&pf->pdev->dev, "vsi clear stats called for all vsi's\n");
   1260			} else if (cnt == 1) {
   1261				vsi = i40e_dbg_find_vsi(pf, vsi_seid);
   1262				if (!vsi) {
   1263					dev_info(&pf->pdev->dev,
   1264						 "clear_stats vsi: bad vsi %d\n",
   1265						 vsi_seid);
   1266					goto command_write_done;
   1267				}
   1268				i40e_vsi_reset_stats(vsi);
   1269				dev_info(&pf->pdev->dev,
   1270					 "vsi clear stats called for vsi %d\n",
   1271					 vsi_seid);
   1272			} else {
   1273				dev_info(&pf->pdev->dev, "clear_stats vsi [seid]\n");
   1274			}
   1275		} else if (strncmp(&cmd_buf[12], "port", 4) == 0) {
   1276			if (pf->hw.partition_id == 1) {
   1277				i40e_pf_reset_stats(pf);
   1278				dev_info(&pf->pdev->dev, "port stats cleared\n");
   1279			} else {
   1280				dev_info(&pf->pdev->dev, "clear port stats not allowed on this port partition\n");
   1281			}
   1282		} else {
   1283			dev_info(&pf->pdev->dev, "clear_stats vsi [seid] or clear_stats port\n");
   1284		}
   1285	} else if (strncmp(cmd_buf, "send aq_cmd", 11) == 0) {
   1286		struct i40e_aq_desc *desc;
   1287		i40e_status ret;
   1288
   1289		desc = kzalloc(sizeof(struct i40e_aq_desc), GFP_KERNEL);
   1290		if (!desc)
   1291			goto command_write_done;
   1292		cnt = sscanf(&cmd_buf[11],
   1293			     "%hi %hi %hi %hi %i %i %i %i %i %i",
   1294			     &desc->flags,
   1295			     &desc->opcode, &desc->datalen, &desc->retval,
   1296			     &desc->cookie_high, &desc->cookie_low,
   1297			     &desc->params.internal.param0,
   1298			     &desc->params.internal.param1,
   1299			     &desc->params.internal.param2,
   1300			     &desc->params.internal.param3);
   1301		if (cnt != 10) {
   1302			dev_info(&pf->pdev->dev,
   1303				 "send aq_cmd: bad command string, cnt=%d\n",
   1304				 cnt);
   1305			kfree(desc);
   1306			desc = NULL;
   1307			goto command_write_done;
   1308		}
   1309		ret = i40e_asq_send_command(&pf->hw, desc, NULL, 0, NULL);
   1310		if (!ret) {
   1311			dev_info(&pf->pdev->dev, "AQ command sent Status : Success\n");
   1312		} else if (ret == I40E_ERR_ADMIN_QUEUE_ERROR) {
   1313			dev_info(&pf->pdev->dev,
   1314				 "AQ command send failed Opcode %x AQ Error: %d\n",
   1315				 desc->opcode, pf->hw.aq.asq_last_status);
   1316		} else {
   1317			dev_info(&pf->pdev->dev,
   1318				 "AQ command send failed Opcode %x Status: %d\n",
   1319				 desc->opcode, ret);
   1320		}
   1321		dev_info(&pf->pdev->dev,
   1322			 "AQ desc WB 0x%04x 0x%04x 0x%04x 0x%04x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
   1323			 desc->flags, desc->opcode, desc->datalen, desc->retval,
   1324			 desc->cookie_high, desc->cookie_low,
   1325			 desc->params.internal.param0,
   1326			 desc->params.internal.param1,
   1327			 desc->params.internal.param2,
   1328			 desc->params.internal.param3);
   1329		kfree(desc);
   1330		desc = NULL;
   1331	} else if (strncmp(cmd_buf, "send indirect aq_cmd", 20) == 0) {
   1332		struct i40e_aq_desc *desc;
   1333		i40e_status ret;
   1334		u16 buffer_len;
   1335		u8 *buff;
   1336
   1337		desc = kzalloc(sizeof(struct i40e_aq_desc), GFP_KERNEL);
   1338		if (!desc)
   1339			goto command_write_done;
   1340		cnt = sscanf(&cmd_buf[20],
   1341			     "%hi %hi %hi %hi %i %i %i %i %i %i %hi",
   1342			     &desc->flags,
   1343			     &desc->opcode, &desc->datalen, &desc->retval,
   1344			     &desc->cookie_high, &desc->cookie_low,
   1345			     &desc->params.internal.param0,
   1346			     &desc->params.internal.param1,
   1347			     &desc->params.internal.param2,
   1348			     &desc->params.internal.param3,
   1349			     &buffer_len);
   1350		if (cnt != 11) {
   1351			dev_info(&pf->pdev->dev,
   1352				 "send indirect aq_cmd: bad command string, cnt=%d\n",
   1353				 cnt);
   1354			kfree(desc);
   1355			desc = NULL;
   1356			goto command_write_done;
   1357		}
   1358		/* Just stub a buffer big enough in case user messed up */
   1359		if (buffer_len == 0)
   1360			buffer_len = 1280;
   1361
   1362		buff = kzalloc(buffer_len, GFP_KERNEL);
   1363		if (!buff) {
   1364			kfree(desc);
   1365			desc = NULL;
   1366			goto command_write_done;
   1367		}
   1368		desc->flags |= cpu_to_le16((u16)I40E_AQ_FLAG_BUF);
   1369		ret = i40e_asq_send_command(&pf->hw, desc, buff,
   1370					    buffer_len, NULL);
   1371		if (!ret) {
   1372			dev_info(&pf->pdev->dev, "AQ command sent Status : Success\n");
   1373		} else if (ret == I40E_ERR_ADMIN_QUEUE_ERROR) {
   1374			dev_info(&pf->pdev->dev,
   1375				 "AQ command send failed Opcode %x AQ Error: %d\n",
   1376				 desc->opcode, pf->hw.aq.asq_last_status);
   1377		} else {
   1378			dev_info(&pf->pdev->dev,
   1379				 "AQ command send failed Opcode %x Status: %d\n",
   1380				 desc->opcode, ret);
   1381		}
   1382		dev_info(&pf->pdev->dev,
   1383			 "AQ desc WB 0x%04x 0x%04x 0x%04x 0x%04x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
   1384			 desc->flags, desc->opcode, desc->datalen, desc->retval,
   1385			 desc->cookie_high, desc->cookie_low,
   1386			 desc->params.internal.param0,
   1387			 desc->params.internal.param1,
   1388			 desc->params.internal.param2,
   1389			 desc->params.internal.param3);
   1390		print_hex_dump(KERN_INFO, "AQ buffer WB: ",
   1391			       DUMP_PREFIX_OFFSET, 16, 1,
   1392			       buff, buffer_len, true);
   1393		kfree(buff);
   1394		buff = NULL;
   1395		kfree(desc);
   1396		desc = NULL;
   1397	} else if (strncmp(cmd_buf, "fd current cnt", 14) == 0) {
   1398		dev_info(&pf->pdev->dev, "FD current total filter count for this interface: %d\n",
   1399			 i40e_get_current_fd_count(pf));
   1400	} else if (strncmp(cmd_buf, "lldp", 4) == 0) {
   1401		if (strncmp(&cmd_buf[5], "stop", 4) == 0) {
   1402			int ret;
   1403
   1404			ret = i40e_aq_stop_lldp(&pf->hw, false, false, NULL);
   1405			if (ret) {
   1406				dev_info(&pf->pdev->dev,
   1407					 "Stop LLDP AQ command failed =0x%x\n",
   1408					 pf->hw.aq.asq_last_status);
   1409				goto command_write_done;
   1410			}
   1411			ret = i40e_aq_add_rem_control_packet_filter(&pf->hw,
   1412						pf->hw.mac.addr,
   1413						ETH_P_LLDP, 0,
   1414						pf->vsi[pf->lan_vsi]->seid,
   1415						0, true, NULL, NULL);
   1416			if (ret) {
   1417				dev_info(&pf->pdev->dev,
   1418					"%s: Add Control Packet Filter AQ command failed =0x%x\n",
   1419					__func__, pf->hw.aq.asq_last_status);
   1420				goto command_write_done;
   1421			}
   1422#ifdef CONFIG_I40E_DCB
   1423			pf->dcbx_cap = DCB_CAP_DCBX_HOST |
   1424				       DCB_CAP_DCBX_VER_IEEE;
   1425#endif /* CONFIG_I40E_DCB */
   1426		} else if (strncmp(&cmd_buf[5], "start", 5) == 0) {
   1427			int ret;
   1428
   1429			ret = i40e_aq_add_rem_control_packet_filter(&pf->hw,
   1430						pf->hw.mac.addr,
   1431						ETH_P_LLDP, 0,
   1432						pf->vsi[pf->lan_vsi]->seid,
   1433						0, false, NULL, NULL);
   1434			if (ret) {
   1435				dev_info(&pf->pdev->dev,
   1436					"%s: Remove Control Packet Filter AQ command failed =0x%x\n",
   1437					__func__, pf->hw.aq.asq_last_status);
   1438				/* Continue and start FW LLDP anyways */
   1439			}
   1440
   1441			ret = i40e_aq_start_lldp(&pf->hw, false, NULL);
   1442			if (ret) {
   1443				dev_info(&pf->pdev->dev,
   1444					 "Start LLDP AQ command failed =0x%x\n",
   1445					 pf->hw.aq.asq_last_status);
   1446				goto command_write_done;
   1447			}
   1448#ifdef CONFIG_I40E_DCB
   1449			pf->dcbx_cap = DCB_CAP_DCBX_LLD_MANAGED |
   1450				       DCB_CAP_DCBX_VER_IEEE;
   1451#endif /* CONFIG_I40E_DCB */
   1452		} else if (strncmp(&cmd_buf[5],
   1453			   "get local", 9) == 0) {
   1454			u16 llen, rlen;
   1455			int ret;
   1456			u8 *buff;
   1457
   1458			buff = kzalloc(I40E_LLDPDU_SIZE, GFP_KERNEL);
   1459			if (!buff)
   1460				goto command_write_done;
   1461
   1462			ret = i40e_aq_get_lldp_mib(&pf->hw, 0,
   1463						   I40E_AQ_LLDP_MIB_LOCAL,
   1464						   buff, I40E_LLDPDU_SIZE,
   1465						   &llen, &rlen, NULL);
   1466			if (ret) {
   1467				dev_info(&pf->pdev->dev,
   1468					 "Get LLDP MIB (local) AQ command failed =0x%x\n",
   1469					 pf->hw.aq.asq_last_status);
   1470				kfree(buff);
   1471				buff = NULL;
   1472				goto command_write_done;
   1473			}
   1474			dev_info(&pf->pdev->dev, "LLDP MIB (local)\n");
   1475			print_hex_dump(KERN_INFO, "LLDP MIB (local): ",
   1476				       DUMP_PREFIX_OFFSET, 16, 1,
   1477				       buff, I40E_LLDPDU_SIZE, true);
   1478			kfree(buff);
   1479			buff = NULL;
   1480		} else if (strncmp(&cmd_buf[5], "get remote", 10) == 0) {
   1481			u16 llen, rlen;
   1482			int ret;
   1483			u8 *buff;
   1484
   1485			buff = kzalloc(I40E_LLDPDU_SIZE, GFP_KERNEL);
   1486			if (!buff)
   1487				goto command_write_done;
   1488
   1489			ret = i40e_aq_get_lldp_mib(&pf->hw,
   1490					I40E_AQ_LLDP_BRIDGE_TYPE_NEAREST_BRIDGE,
   1491					I40E_AQ_LLDP_MIB_REMOTE,
   1492					buff, I40E_LLDPDU_SIZE,
   1493					&llen, &rlen, NULL);
   1494			if (ret) {
   1495				dev_info(&pf->pdev->dev,
   1496					 "Get LLDP MIB (remote) AQ command failed =0x%x\n",
   1497					 pf->hw.aq.asq_last_status);
   1498				kfree(buff);
   1499				buff = NULL;
   1500				goto command_write_done;
   1501			}
   1502			dev_info(&pf->pdev->dev, "LLDP MIB (remote)\n");
   1503			print_hex_dump(KERN_INFO, "LLDP MIB (remote): ",
   1504				       DUMP_PREFIX_OFFSET, 16, 1,
   1505				       buff, I40E_LLDPDU_SIZE, true);
   1506			kfree(buff);
   1507			buff = NULL;
   1508		} else if (strncmp(&cmd_buf[5], "event on", 8) == 0) {
   1509			int ret;
   1510
   1511			ret = i40e_aq_cfg_lldp_mib_change_event(&pf->hw,
   1512								true, NULL);
   1513			if (ret) {
   1514				dev_info(&pf->pdev->dev,
   1515					 "Config LLDP MIB Change Event (on) AQ command failed =0x%x\n",
   1516					 pf->hw.aq.asq_last_status);
   1517				goto command_write_done;
   1518			}
   1519		} else if (strncmp(&cmd_buf[5], "event off", 9) == 0) {
   1520			int ret;
   1521
   1522			ret = i40e_aq_cfg_lldp_mib_change_event(&pf->hw,
   1523								false, NULL);
   1524			if (ret) {
   1525				dev_info(&pf->pdev->dev,
   1526					 "Config LLDP MIB Change Event (off) AQ command failed =0x%x\n",
   1527					 pf->hw.aq.asq_last_status);
   1528				goto command_write_done;
   1529			}
   1530		}
   1531	} else if (strncmp(cmd_buf, "nvm read", 8) == 0) {
   1532		u16 buffer_len, bytes;
   1533		u16 module;
   1534		u32 offset;
   1535		u16 *buff;
   1536		int ret;
   1537
   1538		cnt = sscanf(&cmd_buf[8], "%hx %x %hx",
   1539			     &module, &offset, &buffer_len);
   1540		if (cnt == 0) {
   1541			module = 0;
   1542			offset = 0;
   1543			buffer_len = 0;
   1544		} else if (cnt == 1) {
   1545			offset = 0;
   1546			buffer_len = 0;
   1547		} else if (cnt == 2) {
   1548			buffer_len = 0;
   1549		} else if (cnt > 3) {
   1550			dev_info(&pf->pdev->dev,
   1551				 "nvm read: bad command string, cnt=%d\n", cnt);
   1552			goto command_write_done;
   1553		}
   1554
   1555		/* set the max length */
   1556		buffer_len = min_t(u16, buffer_len, I40E_MAX_AQ_BUF_SIZE/2);
   1557
   1558		bytes = 2 * buffer_len;
   1559
   1560		/* read at least 1k bytes, no more than 4kB */
   1561		bytes = clamp(bytes, (u16)1024, (u16)I40E_MAX_AQ_BUF_SIZE);
   1562		buff = kzalloc(bytes, GFP_KERNEL);
   1563		if (!buff)
   1564			goto command_write_done;
   1565
   1566		ret = i40e_acquire_nvm(&pf->hw, I40E_RESOURCE_READ);
   1567		if (ret) {
   1568			dev_info(&pf->pdev->dev,
   1569				 "Failed Acquiring NVM resource for read err=%d status=0x%x\n",
   1570				 ret, pf->hw.aq.asq_last_status);
   1571			kfree(buff);
   1572			goto command_write_done;
   1573		}
   1574
   1575		ret = i40e_aq_read_nvm(&pf->hw, module, (2 * offset),
   1576				       bytes, (u8 *)buff, true, NULL);
   1577		i40e_release_nvm(&pf->hw);
   1578		if (ret) {
   1579			dev_info(&pf->pdev->dev,
   1580				 "Read NVM AQ failed err=%d status=0x%x\n",
   1581				 ret, pf->hw.aq.asq_last_status);
   1582		} else {
   1583			dev_info(&pf->pdev->dev,
   1584				 "Read NVM module=0x%x offset=0x%x words=%d\n",
   1585				 module, offset, buffer_len);
   1586			if (bytes)
   1587				print_hex_dump(KERN_INFO, "NVM Dump: ",
   1588					DUMP_PREFIX_OFFSET, 16, 2,
   1589					buff, bytes, true);
   1590		}
   1591		kfree(buff);
   1592		buff = NULL;
   1593	} else {
   1594		dev_info(&pf->pdev->dev, "unknown command '%s'\n", cmd_buf);
   1595		dev_info(&pf->pdev->dev, "available commands\n");
   1596		dev_info(&pf->pdev->dev, "  add vsi [relay_seid]\n");
   1597		dev_info(&pf->pdev->dev, "  del vsi [vsi_seid]\n");
   1598		dev_info(&pf->pdev->dev, "  add relay <uplink_seid> <vsi_seid>\n");
   1599		dev_info(&pf->pdev->dev, "  del relay <relay_seid>\n");
   1600		dev_info(&pf->pdev->dev, "  add pvid <vsi_seid> <vid>\n");
   1601		dev_info(&pf->pdev->dev, "  del pvid <vsi_seid>\n");
   1602		dev_info(&pf->pdev->dev, "  dump switch\n");
   1603		dev_info(&pf->pdev->dev, "  dump vsi [seid]\n");
   1604		dev_info(&pf->pdev->dev, "  dump desc tx <vsi_seid> <ring_id> [<desc_n>]\n");
   1605		dev_info(&pf->pdev->dev, "  dump desc rx <vsi_seid> <ring_id> [<desc_n>]\n");
   1606		dev_info(&pf->pdev->dev, "  dump desc xdp <vsi_seid> <ring_id> [<desc_n>]\n");
   1607		dev_info(&pf->pdev->dev, "  dump desc aq\n");
   1608		dev_info(&pf->pdev->dev, "  dump reset stats\n");
   1609		dev_info(&pf->pdev->dev, "  dump debug fwdata <cluster_id> <table_id> <index>\n");
   1610		dev_info(&pf->pdev->dev, "  read <reg>\n");
   1611		dev_info(&pf->pdev->dev, "  write <reg> <value>\n");
   1612		dev_info(&pf->pdev->dev, "  clear_stats vsi [seid]\n");
   1613		dev_info(&pf->pdev->dev, "  clear_stats port\n");
   1614		dev_info(&pf->pdev->dev, "  pfr\n");
   1615		dev_info(&pf->pdev->dev, "  corer\n");
   1616		dev_info(&pf->pdev->dev, "  globr\n");
   1617		dev_info(&pf->pdev->dev, "  send aq_cmd <flags> <opcode> <datalen> <retval> <cookie_h> <cookie_l> <param0> <param1> <param2> <param3>\n");
   1618		dev_info(&pf->pdev->dev, "  send indirect aq_cmd <flags> <opcode> <datalen> <retval> <cookie_h> <cookie_l> <param0> <param1> <param2> <param3> <buffer_len>\n");
   1619		dev_info(&pf->pdev->dev, "  fd current cnt");
   1620		dev_info(&pf->pdev->dev, "  lldp start\n");
   1621		dev_info(&pf->pdev->dev, "  lldp stop\n");
   1622		dev_info(&pf->pdev->dev, "  lldp get local\n");
   1623		dev_info(&pf->pdev->dev, "  lldp get remote\n");
   1624		dev_info(&pf->pdev->dev, "  lldp event on\n");
   1625		dev_info(&pf->pdev->dev, "  lldp event off\n");
   1626		dev_info(&pf->pdev->dev, "  nvm read [module] [word_offset] [word_count]\n");
   1627	}
   1628
   1629command_write_done:
   1630	kfree(cmd_buf);
   1631	cmd_buf = NULL;
   1632	return count;
   1633}
   1634
   1635static const struct file_operations i40e_dbg_command_fops = {
   1636	.owner = THIS_MODULE,
   1637	.open =  simple_open,
   1638	.read =  i40e_dbg_command_read,
   1639	.write = i40e_dbg_command_write,
   1640};
   1641
   1642/**************************************************************
   1643 * netdev_ops
   1644 * The netdev_ops entry in debugfs is for giving the driver commands
   1645 * to be executed from the netdev operations.
   1646 **************************************************************/
   1647static char i40e_dbg_netdev_ops_buf[256] = "";
   1648
   1649/**
   1650 * i40e_dbg_netdev_ops_read - read for netdev_ops datum
   1651 * @filp: the opened file
   1652 * @buffer: where to write the data for the user to read
   1653 * @count: the size of the user's buffer
   1654 * @ppos: file position offset
   1655 **/
   1656static ssize_t i40e_dbg_netdev_ops_read(struct file *filp, char __user *buffer,
   1657					size_t count, loff_t *ppos)
   1658{
   1659	struct i40e_pf *pf = filp->private_data;
   1660	int bytes_not_copied;
   1661	int buf_size = 256;
   1662	char *buf;
   1663	int len;
   1664
   1665	/* don't allow partal reads */
   1666	if (*ppos != 0)
   1667		return 0;
   1668	if (count < buf_size)
   1669		return -ENOSPC;
   1670
   1671	buf = kzalloc(buf_size, GFP_KERNEL);
   1672	if (!buf)
   1673		return -ENOSPC;
   1674
   1675	len = snprintf(buf, buf_size, "%s: %s\n",
   1676		       pf->vsi[pf->lan_vsi]->netdev->name,
   1677		       i40e_dbg_netdev_ops_buf);
   1678
   1679	bytes_not_copied = copy_to_user(buffer, buf, len);
   1680	kfree(buf);
   1681
   1682	if (bytes_not_copied)
   1683		return -EFAULT;
   1684
   1685	*ppos = len;
   1686	return len;
   1687}
   1688
   1689/**
   1690 * i40e_dbg_netdev_ops_write - write into netdev_ops datum
   1691 * @filp: the opened file
   1692 * @buffer: where to find the user's data
   1693 * @count: the length of the user's data
   1694 * @ppos: file position offset
   1695 **/
   1696static ssize_t i40e_dbg_netdev_ops_write(struct file *filp,
   1697					 const char __user *buffer,
   1698					 size_t count, loff_t *ppos)
   1699{
   1700	struct i40e_pf *pf = filp->private_data;
   1701	int bytes_not_copied;
   1702	struct i40e_vsi *vsi;
   1703	char *buf_tmp;
   1704	int vsi_seid;
   1705	int i, cnt;
   1706
   1707	/* don't allow partial writes */
   1708	if (*ppos != 0)
   1709		return 0;
   1710	if (count >= sizeof(i40e_dbg_netdev_ops_buf))
   1711		return -ENOSPC;
   1712
   1713	memset(i40e_dbg_netdev_ops_buf, 0, sizeof(i40e_dbg_netdev_ops_buf));
   1714	bytes_not_copied = copy_from_user(i40e_dbg_netdev_ops_buf,
   1715					  buffer, count);
   1716	if (bytes_not_copied)
   1717		return -EFAULT;
   1718	i40e_dbg_netdev_ops_buf[count] = '\0';
   1719
   1720	buf_tmp = strchr(i40e_dbg_netdev_ops_buf, '\n');
   1721	if (buf_tmp) {
   1722		*buf_tmp = '\0';
   1723		count = buf_tmp - i40e_dbg_netdev_ops_buf + 1;
   1724	}
   1725
   1726	if (strncmp(i40e_dbg_netdev_ops_buf, "change_mtu", 10) == 0) {
   1727		int mtu;
   1728
   1729		cnt = sscanf(&i40e_dbg_netdev_ops_buf[11], "%i %i",
   1730			     &vsi_seid, &mtu);
   1731		if (cnt != 2) {
   1732			dev_info(&pf->pdev->dev, "change_mtu <vsi_seid> <mtu>\n");
   1733			goto netdev_ops_write_done;
   1734		}
   1735		vsi = i40e_dbg_find_vsi(pf, vsi_seid);
   1736		if (!vsi) {
   1737			dev_info(&pf->pdev->dev,
   1738				 "change_mtu: VSI %d not found\n", vsi_seid);
   1739		} else if (!vsi->netdev) {
   1740			dev_info(&pf->pdev->dev, "change_mtu: no netdev for VSI %d\n",
   1741				 vsi_seid);
   1742		} else if (rtnl_trylock()) {
   1743			vsi->netdev->netdev_ops->ndo_change_mtu(vsi->netdev,
   1744								mtu);
   1745			rtnl_unlock();
   1746			dev_info(&pf->pdev->dev, "change_mtu called\n");
   1747		} else {
   1748			dev_info(&pf->pdev->dev, "Could not acquire RTNL - please try again\n");
   1749		}
   1750
   1751	} else if (strncmp(i40e_dbg_netdev_ops_buf, "set_rx_mode", 11) == 0) {
   1752		cnt = sscanf(&i40e_dbg_netdev_ops_buf[11], "%i", &vsi_seid);
   1753		if (cnt != 1) {
   1754			dev_info(&pf->pdev->dev, "set_rx_mode <vsi_seid>\n");
   1755			goto netdev_ops_write_done;
   1756		}
   1757		vsi = i40e_dbg_find_vsi(pf, vsi_seid);
   1758		if (!vsi) {
   1759			dev_info(&pf->pdev->dev,
   1760				 "set_rx_mode: VSI %d not found\n", vsi_seid);
   1761		} else if (!vsi->netdev) {
   1762			dev_info(&pf->pdev->dev, "set_rx_mode: no netdev for VSI %d\n",
   1763				 vsi_seid);
   1764		} else if (rtnl_trylock()) {
   1765			vsi->netdev->netdev_ops->ndo_set_rx_mode(vsi->netdev);
   1766			rtnl_unlock();
   1767			dev_info(&pf->pdev->dev, "set_rx_mode called\n");
   1768		} else {
   1769			dev_info(&pf->pdev->dev, "Could not acquire RTNL - please try again\n");
   1770		}
   1771
   1772	} else if (strncmp(i40e_dbg_netdev_ops_buf, "napi", 4) == 0) {
   1773		cnt = sscanf(&i40e_dbg_netdev_ops_buf[4], "%i", &vsi_seid);
   1774		if (cnt != 1) {
   1775			dev_info(&pf->pdev->dev, "napi <vsi_seid>\n");
   1776			goto netdev_ops_write_done;
   1777		}
   1778		vsi = i40e_dbg_find_vsi(pf, vsi_seid);
   1779		if (!vsi) {
   1780			dev_info(&pf->pdev->dev, "napi: VSI %d not found\n",
   1781				 vsi_seid);
   1782		} else if (!vsi->netdev) {
   1783			dev_info(&pf->pdev->dev, "napi: no netdev for VSI %d\n",
   1784				 vsi_seid);
   1785		} else {
   1786			for (i = 0; i < vsi->num_q_vectors; i++)
   1787				napi_schedule(&vsi->q_vectors[i]->napi);
   1788			dev_info(&pf->pdev->dev, "napi called\n");
   1789		}
   1790	} else {
   1791		dev_info(&pf->pdev->dev, "unknown command '%s'\n",
   1792			 i40e_dbg_netdev_ops_buf);
   1793		dev_info(&pf->pdev->dev, "available commands\n");
   1794		dev_info(&pf->pdev->dev, "  change_mtu <vsi_seid> <mtu>\n");
   1795		dev_info(&pf->pdev->dev, "  set_rx_mode <vsi_seid>\n");
   1796		dev_info(&pf->pdev->dev, "  napi <vsi_seid>\n");
   1797	}
   1798netdev_ops_write_done:
   1799	return count;
   1800}
   1801
   1802static const struct file_operations i40e_dbg_netdev_ops_fops = {
   1803	.owner = THIS_MODULE,
   1804	.open = simple_open,
   1805	.read = i40e_dbg_netdev_ops_read,
   1806	.write = i40e_dbg_netdev_ops_write,
   1807};
   1808
   1809/**
   1810 * i40e_dbg_pf_init - setup the debugfs directory for the PF
   1811 * @pf: the PF that is starting up
   1812 **/
   1813void i40e_dbg_pf_init(struct i40e_pf *pf)
   1814{
   1815	const char *name = pci_name(pf->pdev);
   1816
   1817	pf->i40e_dbg_pf = debugfs_create_dir(name, i40e_dbg_root);
   1818
   1819	debugfs_create_file("command", 0600, pf->i40e_dbg_pf, pf,
   1820			    &i40e_dbg_command_fops);
   1821
   1822	debugfs_create_file("netdev_ops", 0600, pf->i40e_dbg_pf, pf,
   1823			    &i40e_dbg_netdev_ops_fops);
   1824}
   1825
   1826/**
   1827 * i40e_dbg_pf_exit - clear out the PF's debugfs entries
   1828 * @pf: the PF that is stopping
   1829 **/
   1830void i40e_dbg_pf_exit(struct i40e_pf *pf)
   1831{
   1832	debugfs_remove_recursive(pf->i40e_dbg_pf);
   1833	pf->i40e_dbg_pf = NULL;
   1834}
   1835
   1836/**
   1837 * i40e_dbg_init - start up debugfs for the driver
   1838 **/
   1839void i40e_dbg_init(void)
   1840{
   1841	i40e_dbg_root = debugfs_create_dir(i40e_driver_name, NULL);
   1842	if (!i40e_dbg_root)
   1843		pr_info("init of debugfs failed\n");
   1844}
   1845
   1846/**
   1847 * i40e_dbg_exit - clean out the driver's debugfs entries
   1848 **/
   1849void i40e_dbg_exit(void)
   1850{
   1851	debugfs_remove_recursive(i40e_dbg_root);
   1852	i40e_dbg_root = NULL;
   1853}
   1854
   1855#endif /* CONFIG_DEBUG_FS */