|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
|
- * Copyright IBM Corp. 2012
|
|
|
+ * Copyright IBM Corp. 2012,2015
|
|
|
*
|
|
|
* Author(s):
|
|
|
* Jan Glauber <jang@linux.vnet.ibm.com>
|
|
@@ -23,22 +23,45 @@ EXPORT_SYMBOL_GPL(pci_debug_msg_id);
|
|
|
debug_info_t *pci_debug_err_id;
|
|
|
EXPORT_SYMBOL_GPL(pci_debug_err_id);
|
|
|
|
|
|
-static char *pci_perf_names[] = {
|
|
|
- /* hardware counters */
|
|
|
+static char *pci_common_names[] = {
|
|
|
"Load operations",
|
|
|
"Store operations",
|
|
|
"Store block operations",
|
|
|
"Refresh operations",
|
|
|
+};
|
|
|
+
|
|
|
+static char *pci_fmt0_names[] = {
|
|
|
"DMA read bytes",
|
|
|
"DMA write bytes",
|
|
|
};
|
|
|
|
|
|
+static char *pci_fmt1_names[] = {
|
|
|
+ "Received bytes",
|
|
|
+ "Received packets",
|
|
|
+ "Transmitted bytes",
|
|
|
+ "Transmitted packets",
|
|
|
+};
|
|
|
+
|
|
|
+static char *pci_fmt2_names[] = {
|
|
|
+ "Consumed work units",
|
|
|
+ "Maximum work units",
|
|
|
+};
|
|
|
+
|
|
|
static char *pci_sw_names[] = {
|
|
|
"Allocated pages",
|
|
|
"Mapped pages",
|
|
|
"Unmapped pages",
|
|
|
};
|
|
|
|
|
|
+static void pci_fmb_show(struct seq_file *m, char *name[], int length,
|
|
|
+ u64 *data)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+
|
|
|
+ for (i = 0; i < length; i++, data++)
|
|
|
+ seq_printf(m, "%26s:\t%llu\n", name[i], *data);
|
|
|
+}
|
|
|
+
|
|
|
static void pci_sw_counter_show(struct seq_file *m)
|
|
|
{
|
|
|
struct zpci_dev *zdev = m->private;
|
|
@@ -53,8 +76,6 @@ static void pci_sw_counter_show(struct seq_file *m)
|
|
|
static int pci_perf_show(struct seq_file *m, void *v)
|
|
|
{
|
|
|
struct zpci_dev *zdev = m->private;
|
|
|
- u64 *stat;
|
|
|
- int i;
|
|
|
|
|
|
if (!zdev)
|
|
|
return 0;
|
|
@@ -72,15 +93,27 @@ static int pci_perf_show(struct seq_file *m, void *v)
|
|
|
seq_printf(m, "Samples: %u\n", zdev->fmb->samples);
|
|
|
seq_printf(m, "Last update TOD: %Lx\n", zdev->fmb->last_update);
|
|
|
|
|
|
- /* hardware counters */
|
|
|
- stat = (u64 *) &zdev->fmb->ld_ops;
|
|
|
- for (i = 0; i < 4; i++)
|
|
|
- seq_printf(m, "%26s:\t%llu\n",
|
|
|
- pci_perf_names[i], *(stat + i));
|
|
|
- if (zdev->fmb->dma_valid)
|
|
|
- for (i = 4; i < 6; i++)
|
|
|
- seq_printf(m, "%26s:\t%llu\n",
|
|
|
- pci_perf_names[i], *(stat + i));
|
|
|
+ pci_fmb_show(m, pci_common_names, ARRAY_SIZE(pci_common_names),
|
|
|
+ &zdev->fmb->ld_ops);
|
|
|
+
|
|
|
+ switch (zdev->fmb->format) {
|
|
|
+ case 0:
|
|
|
+ if (!(zdev->fmb->fmt_ind & ZPCI_FMB_DMA_COUNTER_VALID))
|
|
|
+ break;
|
|
|
+ pci_fmb_show(m, pci_fmt0_names, ARRAY_SIZE(pci_fmt0_names),
|
|
|
+ &zdev->fmb->fmt0.dma_rbytes);
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ pci_fmb_show(m, pci_fmt1_names, ARRAY_SIZE(pci_fmt1_names),
|
|
|
+ &zdev->fmb->fmt1.rx_bytes);
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ pci_fmb_show(m, pci_fmt2_names, ARRAY_SIZE(pci_fmt2_names),
|
|
|
+ &zdev->fmb->fmt2.consumed_work_units);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ seq_puts(m, "Unknown format\n");
|
|
|
+ }
|
|
|
|
|
|
pci_sw_counter_show(m);
|
|
|
mutex_unlock(&zdev->lock);
|