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