aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ntb/ntb_hw.c
diff options
context:
space:
mode:
authorJon Mason <jon.mason@intel.com>2014-04-07 13:55:47 -0400
committerJon Mason <jdmason@kudzu.us>2014-10-17 07:08:50 -0400
commit6465d02ee15f7a45339b7e7859d0a0f22100ca87 (patch)
treeb0554823791bb6b366734c16d241783d6ecf3149 /drivers/ntb/ntb_hw.c
parentbfe01a5ba2490f299e1d2d5508cbbbadd897bbe9 (diff)
NTB: debugfs device entry
Create a debugfs entry for the NTB device to log the basic device info, as well as display the error count on a number of registers. Signed-off-by: Jon Mason <jon.mason@intel.com>
Diffstat (limited to 'drivers/ntb/ntb_hw.c')
-rw-r--r--drivers/ntb/ntb_hw.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/drivers/ntb/ntb_hw.c b/drivers/ntb/ntb_hw.c
index 372e08c4ffef..a3990363a171 100644
--- a/drivers/ntb/ntb_hw.c
+++ b/drivers/ntb/ntb_hw.c
@@ -1344,6 +1344,101 @@ static void ntb_free_callbacks(struct ntb_device *ndev)
1344 kfree(ndev->db_cb); 1344 kfree(ndev->db_cb);
1345} 1345}
1346 1346
1347static ssize_t ntb_debugfs_read(struct file *filp, char __user *ubuf,
1348 size_t count, loff_t *offp)
1349{
1350 struct ntb_device *ndev;
1351 char *buf;
1352 ssize_t ret, offset, out_count;
1353
1354 out_count = 500;
1355
1356 buf = kmalloc(out_count, GFP_KERNEL);
1357 if (!buf)
1358 return -ENOMEM;
1359
1360 ndev = filp->private_data;
1361 offset = 0;
1362 offset += snprintf(buf + offset, out_count - offset,
1363 "NTB Device Information:\n");
1364 offset += snprintf(buf + offset, out_count - offset,
1365 "Connection Type - \t\t%s\n",
1366 ndev->conn_type == NTB_CONN_TRANSPARENT ?
1367 "Transparent" : (ndev->conn_type == NTB_CONN_B2B) ?
1368 "Back to back" : "Root Port");
1369 offset += snprintf(buf + offset, out_count - offset,
1370 "Device Type - \t\t\t%s\n",
1371 ndev->dev_type == NTB_DEV_USD ?
1372 "DSD/USP" : "USD/DSP");
1373 offset += snprintf(buf + offset, out_count - offset,
1374 "Max Number of Callbacks - \t%u\n",
1375 ntb_max_cbs(ndev));
1376 offset += snprintf(buf + offset, out_count - offset,
1377 "Link Status - \t\t\t%s\n",
1378 ntb_hw_link_status(ndev) ? "Up" : "Down");
1379 if (ntb_hw_link_status(ndev)) {
1380 offset += snprintf(buf + offset, out_count - offset,
1381 "Link Speed - \t\t\tPCI-E Gen %u\n",
1382 ndev->link_speed);
1383 offset += snprintf(buf + offset, out_count - offset,
1384 "Link Width - \t\t\tx%u\n",
1385 ndev->link_width);
1386 }
1387
1388 if (ndev->hw_type != BWD_HW) {
1389 u32 status32;
1390 u16 status16;
1391 int rc;
1392
1393 offset += snprintf(buf + offset, out_count - offset,
1394 "\nNTB Device Statistics:\n");
1395 offset += snprintf(buf + offset, out_count - offset,
1396 "Upstream Memory Miss - \t%u\n",
1397 readw(ndev->reg_base +
1398 SNB_USMEMMISS_OFFSET));
1399
1400 offset += snprintf(buf + offset, out_count - offset,
1401 "\nNTB Hardware Errors:\n");
1402
1403 rc = pci_read_config_word(ndev->pdev, SNB_DEVSTS_OFFSET,
1404 &status16);
1405 if (!rc)
1406 offset += snprintf(buf + offset, out_count - offset,
1407 "DEVSTS - \t%#06x\n", status16);
1408
1409 rc = pci_read_config_word(ndev->pdev, SNB_LINK_STATUS_OFFSET,
1410 &status16);
1411 if (!rc)
1412 offset += snprintf(buf + offset, out_count - offset,
1413 "LNKSTS - \t%#06x\n", status16);
1414
1415 rc = pci_read_config_dword(ndev->pdev, SNB_UNCERRSTS_OFFSET,
1416 &status32);
1417 if (!rc)
1418 offset += snprintf(buf + offset, out_count - offset,
1419 "UNCERRSTS - \t%#010x\n", status32);
1420
1421 rc = pci_read_config_dword(ndev->pdev, SNB_CORERRSTS_OFFSET,
1422 &status32);
1423 if (!rc)
1424 offset += snprintf(buf + offset, out_count - offset,
1425 "CORERRSTS - \t%#010x\n", status32);
1426 }
1427
1428 if (offset > out_count)
1429 offset = out_count;
1430
1431 ret = simple_read_from_buffer(ubuf, count, offp, buf, offset);
1432 kfree(buf);
1433 return ret;
1434}
1435
1436static const struct file_operations ntb_debugfs_info = {
1437 .owner = THIS_MODULE,
1438 .open = simple_open,
1439 .read = ntb_debugfs_read,
1440};
1441
1347static void ntb_setup_debugfs(struct ntb_device *ndev) 1442static void ntb_setup_debugfs(struct ntb_device *ndev)
1348{ 1443{
1349 if (!debugfs_initialized()) 1444 if (!debugfs_initialized())
@@ -1354,6 +1449,11 @@ static void ntb_setup_debugfs(struct ntb_device *ndev)
1354 1449
1355 ndev->debugfs_dir = debugfs_create_dir(pci_name(ndev->pdev), 1450 ndev->debugfs_dir = debugfs_create_dir(pci_name(ndev->pdev),
1356 debugfs_dir); 1451 debugfs_dir);
1452 if (ndev->debugfs_dir)
1453 ndev->debugfs_info = debugfs_create_file("info", S_IRUSR,
1454 ndev->debugfs_dir,
1455 ndev,
1456 &ntb_debugfs_info);
1357} 1457}
1358 1458
1359static void ntb_free_debugfs(struct ntb_device *ndev) 1459static void ntb_free_debugfs(struct ntb_device *ndev)
@@ -1542,4 +1642,5 @@ static struct pci_driver ntb_pci_driver = {
1542 .probe = ntb_pci_probe, 1642 .probe = ntb_pci_probe,
1543 .remove = ntb_pci_remove, 1643 .remove = ntb_pci_remove,
1544}; 1644};
1645
1545module_pci_driver(ntb_pci_driver); 1646module_pci_driver(ntb_pci_driver);