]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
PCI: Add pci_speed_string()
authorBjorn Helgaas <bhelgaas@google.com>
Fri, 28 Feb 2020 21:02:03 +0000 (15:02 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 10 Mar 2020 19:05:33 +0000 (14:05 -0500)
Add pci_speed_string() to return a text description of the supplied bus or
link speed.  The slot code previously used the private
pci_bus_speed_strings[] array for this purpose, but adding this interface
will enable us to consolidate similar code elsewhere.

Export pcie_link_speed[] and pci_speed_string() so they can be used by
modules.

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/pci.h
drivers/pci/probe.c
drivers/pci/slot.c
include/linux/pci.h

index f65912e0f30dac67307096e41db6d1c3e93c0d44..809753b10fad25a083b3130d8bf2562ece682659 100644 (file)
@@ -310,6 +310,7 @@ void pci_bus_put(struct pci_bus *bus);
         (speed) == PCIE_SPEED_2_5GT  ?  2500*8/10 : \
         0)
 
+const char *pci_speed_string(enum pci_bus_speed speed);
 enum pci_bus_speed pcie_get_speed_cap(struct pci_dev *dev);
 enum pcie_link_width pcie_get_width_cap(struct pci_dev *dev);
 u32 pcie_bandwidth_capable(struct pci_dev *dev, enum pci_bus_speed *speed,
index 512cb4312dddc3c2fd267b29fb5c52f869ab0b81..4fc41b71cc95ea4dbb1e95ba2aebec8e0dc315c7 100644 (file)
@@ -640,6 +640,7 @@ void pci_free_host_bridge(struct pci_host_bridge *bridge)
 }
 EXPORT_SYMBOL(pci_free_host_bridge);
 
+/* Indexed by PCI_X_SSTATUS_FREQ (secondary bus mode and frequency) */
 static const unsigned char pcix_bus_speed[] = {
        PCI_SPEED_UNKNOWN,              /* 0 */
        PCI_SPEED_66MHz_PCIX,           /* 1 */
@@ -659,6 +660,7 @@ static const unsigned char pcix_bus_speed[] = {
        PCI_SPEED_133MHz_PCIX_533       /* F */
 };
 
+/* Indexed by PCI_EXP_LNKCAP_SLS, PCI_EXP_LNKSTA_CLS */
 const unsigned char pcie_link_speed[] = {
        PCI_SPEED_UNKNOWN,              /* 0 */
        PCIE_SPEED_2_5GT,               /* 1 */
@@ -677,6 +679,44 @@ const unsigned char pcie_link_speed[] = {
        PCI_SPEED_UNKNOWN,              /* E */
        PCI_SPEED_UNKNOWN               /* F */
 };
+EXPORT_SYMBOL_GPL(pcie_link_speed);
+
+const char *pci_speed_string(enum pci_bus_speed speed)
+{
+       /* Indexed by the pci_bus_speed enum */
+       static const char *speed_strings[] = {
+           "33 MHz PCI",               /* 0x00 */
+           "66 MHz PCI",               /* 0x01 */
+           "66 MHz PCI-X",             /* 0x02 */
+           "100 MHz PCI-X",            /* 0x03 */
+           "133 MHz PCI-X",            /* 0x04 */
+           NULL,                       /* 0x05 */
+           NULL,                       /* 0x06 */
+           NULL,                       /* 0x07 */
+           NULL,                       /* 0x08 */
+           "66 MHz PCI-X 266",         /* 0x09 */
+           "100 MHz PCI-X 266",        /* 0x0a */
+           "133 MHz PCI-X 266",        /* 0x0b */
+           "Unknown AGP",              /* 0x0c */
+           "1x AGP",                   /* 0x0d */
+           "2x AGP",                   /* 0x0e */
+           "4x AGP",                   /* 0x0f */
+           "8x AGP",                   /* 0x10 */
+           "66 MHz PCI-X 533",         /* 0x11 */
+           "100 MHz PCI-X 533",        /* 0x12 */
+           "133 MHz PCI-X 533",        /* 0x13 */
+           "2.5 GT/s PCIe",            /* 0x14 */
+           "5.0 GT/s PCIe",            /* 0x15 */
+           "8.0 GT/s PCIe",            /* 0x16 */
+           "16.0 GT/s PCIe",           /* 0x17 */
+           "32.0 GT/s PCIe",           /* 0x18 */
+       };
+
+       if (speed < ARRAY_SIZE(speed_strings))
+               return speed_strings[speed];
+       return "Unknown";
+}
+EXPORT_SYMBOL_GPL(pci_speed_string);
 
 void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
 {
index ae4aa0e1f2f42580b6c05fb5979fe9bf1f04a69b..cc386ef2fa122a39ba1433749e7da33c3aa68e62 100644 (file)
@@ -49,45 +49,9 @@ static ssize_t address_read_file(struct pci_slot *slot, char *buf)
                                slot->number);
 }
 
-/* these strings match up with the values in pci_bus_speed */
-static const char *pci_bus_speed_strings[] = {
-       "33 MHz PCI",           /* 0x00 */
-       "66 MHz PCI",           /* 0x01 */
-       "66 MHz PCI-X",         /* 0x02 */
-       "100 MHz PCI-X",        /* 0x03 */
-       "133 MHz PCI-X",        /* 0x04 */
-       NULL,                   /* 0x05 */
-       NULL,                   /* 0x06 */
-       NULL,                   /* 0x07 */
-       NULL,                   /* 0x08 */
-       "66 MHz PCI-X 266",     /* 0x09 */
-       "100 MHz PCI-X 266",    /* 0x0a */
-       "133 MHz PCI-X 266",    /* 0x0b */
-       "Unknown AGP",          /* 0x0c */
-       "1x AGP",               /* 0x0d */
-       "2x AGP",               /* 0x0e */
-       "4x AGP",               /* 0x0f */
-       "8x AGP",               /* 0x10 */
-       "66 MHz PCI-X 533",     /* 0x11 */
-       "100 MHz PCI-X 533",    /* 0x12 */
-       "133 MHz PCI-X 533",    /* 0x13 */
-       "2.5 GT/s PCIe",        /* 0x14 */
-       "5.0 GT/s PCIe",        /* 0x15 */
-       "8.0 GT/s PCIe",        /* 0x16 */
-       "16.0 GT/s PCIe",       /* 0x17 */
-       "32.0 GT/s PCIe",       /* 0x18 */
-};
-
 static ssize_t bus_speed_read(enum pci_bus_speed speed, char *buf)
 {
-       const char *speed_string;
-
-       if (speed < ARRAY_SIZE(pci_bus_speed_strings))
-               speed_string = pci_bus_speed_strings[speed];
-       else
-               speed_string = "Unknown";
-
-       return sprintf(buf, "%s\n", speed_string);
+       return sprintf(buf, "%s\n", pci_speed_string(speed));
 }
 
 static ssize_t max_speed_read_file(struct pci_slot *slot, char *buf)
index 3840a541a9de521aa69755f859776c48c36543e2..76f4806a154c30a9c8a95ee2a7b6032999ef7315 100644 (file)
@@ -236,7 +236,7 @@ enum pcie_link_width {
        PCIE_LNK_WIDTH_UNKNOWN  = 0xff,
 };
 
-/* Based on the PCI Hotplug Spec, but some values are made up by us */
+/* See matching string table in pci_speed_string() */
 enum pci_bus_speed {
        PCI_SPEED_33MHz                 = 0x00,
        PCI_SPEED_66MHz                 = 0x01,