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