Module Name:    src
Committed By:   riastradh
Date:           Mon Jun 24 21:23:53 UTC 2024

Modified Files:
        src/sys/external/bsd/drm2/linux: linux_pci.c

Log Message:
linux_pci: Fix shifto in pci_get_class.

It looks like Linux's pci_get_class also matches the interface part
of the PCI class register (but not the revision part), and I hadn't
noticed that in the previous shim structured differently.


To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/sys/external/bsd/drm2/linux/linux_pci.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/linux/linux_pci.c
diff -u src/sys/external/bsd/drm2/linux/linux_pci.c:1.29 src/sys/external/bsd/drm2/linux/linux_pci.c:1.30
--- src/sys/external/bsd/drm2/linux/linux_pci.c:1.29	Sun Jun 23 00:53:48 2024
+++ src/sys/external/bsd/drm2/linux/linux_pci.c	Mon Jun 24 21:23:53 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_pci.c,v 1.29 2024/06/23 00:53:48 riastradh Exp $	*/
+/*	$NetBSD: linux_pci.c,v 1.30 2024/06/24 21:23:53 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
 #endif
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_pci.c,v 1.29 2024/06/23 00:53:48 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_pci.c,v 1.30 2024/06/24 21:23:53 riastradh Exp $");
 
 #if NACPICA > 0
 #include <dev/acpi/acpivar.h>
@@ -621,7 +621,7 @@ pci_dev_put(struct pci_dev *pdev)
 }
 
 struct pci_get_class_state {
-	uint32_t		class_subclass_shifted;
+	uint32_t		class_subclass_interface;
 	const struct pci_dev	*from;
 };
 
@@ -639,17 +639,19 @@ pci_get_class_match(void *cookie, const 
 			C->from = NULL;
 		return 0;
 	}
-	if (C->class_subclass_shifted !=
-	    (PCI_CLASS(pa->pa_class) << 8 | PCI_SUBCLASS(pa->pa_class)))
+	if (C->class_subclass_interface !=
+	    (PCI_CLASS(pa->pa_class) << 16 |
+		PCI_SUBCLASS(pa->pa_class) << 8 |
+		PCI_INTERFACE(pa->pa_class)))
 		return 0;
 
 	return 1;
 }
 
 struct pci_dev *
-pci_get_class(uint32_t class_subclass_shifted, struct pci_dev *from)
+pci_get_class(uint32_t class_subclass_interface, struct pci_dev *from)
 {
-	struct pci_get_class_state context = {class_subclass_shifted, from},
+	struct pci_get_class_state context = {class_subclass_interface, from},
 	    *C = &context;
 	struct pci_attach_args pa;
 	struct pci_dev *pdev = NULL;

Reply via email to