Commit 37d1ade8 authored by Hans Zhang's avatar Hans Zhang Committed by Bjorn Helgaas
Browse files

PCI: Clean up __pci_find_next_cap_ttl() readability



Refactor the __pci_find_next_cap_ttl() to improve code clarity:

  - Replace magic number 0x40 with PCI_STD_HEADER_SIZEOF.
  - Use ALIGN_DOWN() for position alignment instead of manual bitmask.
  - Extract PCI capability fields via FIELD_GET() with standardized masks.
  - Add necessary headers (linux/align.h).

No functional changes intended.

Signed-off-by: default avatarHans Zhang <18255117159@163.com>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Tested-by: default avatarNiklas Schnelle <schnelle@linux.ibm.com>
Acked-by: default avatarManivannan Sadhasivam <mani@kernel.org>
Link: https://patch.msgid.link/20250813144529.303548-2-18255117159@163.com
parent 8f5ae30d
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
 */

#include <linux/acpi.h>
#include <linux/align.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/dmi.h>
@@ -432,17 +433,17 @@ static u8 __pci_find_next_cap_ttl(struct pci_bus *bus, unsigned int devfn,
	pci_bus_read_config_byte(bus, devfn, pos, &pos);

	while ((*ttl)--) {
		if (pos < 0x40)
		if (pos < PCI_STD_HEADER_SIZEOF)
			break;
		pos &= ~3;
		pos = ALIGN_DOWN(pos, 4);
		pci_bus_read_config_word(bus, devfn, pos, &ent);

		id = ent & 0xff;
		id = FIELD_GET(PCI_CAP_ID_MASK, ent);
		if (id == 0xff)
			break;
		if (id == cap)
			return pos;
		pos = (ent >> 8);
		pos = FIELD_GET(PCI_CAP_LIST_NEXT_MASK, ent);
	}
	return 0;
}
+3 −0
Original line number Diff line number Diff line
@@ -207,6 +207,9 @@

/* Capability lists */

#define PCI_CAP_ID_MASK		0x00ff	/* Capability ID mask */
#define PCI_CAP_LIST_NEXT_MASK	0xff00	/* Next Capability Pointer mask */

#define PCI_CAP_LIST_ID		0	/* Capability ID */
#define  PCI_CAP_ID_PM		0x01	/* Power Management */
#define  PCI_CAP_ID_AGP		0x02	/* Accelerated Graphics Port */