Module Name:    src
Committed By:   jruoho
Date:           Mon Apr 26 13:30:31 UTC 2010

Modified Files:
        src/sys/dev/acpi: acpi_pci.c

Log Message:
Improve and rearrange comments.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/dev/acpi/acpi_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/dev/acpi/acpi_pci.c
diff -u src/sys/dev/acpi/acpi_pci.c:1.10 src/sys/dev/acpi/acpi_pci.c:1.11
--- src/sys/dev/acpi/acpi_pci.c:1.10	Fri Apr 23 15:46:59 2010
+++ src/sys/dev/acpi/acpi_pci.c	Mon Apr 26 13:30:31 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_pci.c,v 1.10 2010/04/23 15:46:59 jruoho Exp $ */
+/* $NetBSD: acpi_pci.c,v 1.11 2010/04/26 13:30:31 jruoho Exp $ */
 
 /*
  * Copyright (c) 2009, 2010 The NetBSD Foundation, Inc.
@@ -28,12 +28,8 @@
  * SUCH DAMAGE.
  */
 
-/*
- * ACPI PCI Bus
- */
-
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_pci.c,v 1.10 2010/04/23 15:46:59 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_pci.c,v 1.11 2010/04/26 13:30:31 jruoho Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -59,50 +55,45 @@
 							   void *);
 
 /*
- * Regarding PCI Segment Groups, the ACPI spec says (cf. ACPI 4.0, p. 277):
+ * Regarding PCI Segment Groups (ACPI 4.0, p. 277):
  *
  * "The optional _SEG object is located under a PCI host bridge and
- * evaluates to an integer that describes the PCI Segment Group (see PCI
- * Firmware Specification v3.0)."
+ *  evaluates to an integer that describes the PCI Segment Group (see PCI
+ *  Firmware Specification v3.0)."
  *
- * "PCI Segment Group supports more than 256 buses in a system by allowing
- * the reuse of the PCI bus numbers.  Within each PCI Segment Group, the bus
- * numbers for the PCI buses must be unique. PCI buses in different PCI
- * Segment Group are permitted to have the same bus number."
- *
- * "If _SEG does not exist, OSPM assumes that all PCI bus segments are in
- * PCI Segment Group 0."
+ * "PCI Segment Group is purely a software concept managed by system
+ *  firmware and used by OSPM. It is a logical collection of PCI buses
+ *  (or bus segments). It is a way to logically group the PCI bus segments
+ *  and PCI Express Hierarchies. _SEG is a level higher than _BBN."
  *
- * "The lower 16 bits of _SEG returned integer is the PCI Segment Group
- * number.  Other bits are reserved."
+ * "PCI Segment Group supports more than 256 buses in a system by allowing
+ *  the reuse of the PCI bus numbers.  Within each PCI Segment Group, the bus
+ *  numbers for the PCI buses must be unique. PCI buses in different PCI
+ *  Segment Group are permitted to have the same bus number."
  */
 
 /*
- * Regarding PCI Base Bus Numbers, the ACPI spec says (cf. ACPI 4.0, p. 277):
+ * Regarding PCI Base Bus Numbers (ACPI 4.0, p. 277):
  *
  * "For multi-root PCI platforms, the _BBN object evaluates to the PCI bus
- * number that the BIOS assigns.  This is needed to access a PCI_Config
- * operation region for the specified bus.  The _BBN object is located under
- * a PCI host bridge and must be unique for every host bridge within a
- * segment since it is the PCI bus number."
+ *  number that the BIOS assigns.  This is needed to access a PCI_Config
+ *  operation region for the specified bus.  The _BBN object is located under
+ *  a PCI host bridge and must be unique for every host bridge within a
+ *  segment since it is the PCI bus number."
  *
  * Moreover, the ACPI FAQ (http://www.acpi.info/acpi_faq.htm) says:
  *
  * "For a multiple root bus machine, _BBN is required for each bus.  _BBN
- * should provide the bus number assigned to this bus by the BIOS at boot
- * time."
+ *  should provide the bus number assigned to this bus by the BIOS at boot
+ *  time."
  */
 
-
 /*
  * acpi_pcidev_pciroot_bus:
  *
  *	Derive the PCI bus number of a PCI root bridge from its resources.
  *	If successful, return AE_OK and fill *busp.  Otherwise, return an
  *	exception code and leave *busp unchanged.
- *
- * XXX	Use ACPI resource parsing functions (acpi_resource.c) once bus number
- *	ranges are implemented there.
  */
 static ACPI_STATUS
 acpi_pcidev_pciroot_bus(ACPI_HANDLE handle, uint16_t *busp)
@@ -111,7 +102,12 @@
 	int32_t bus;
 
 	bus = -1;
-	rv = AcpiWalkResources(handle, METHOD_NAME__CRS,
+
+	/*
+	 * XXX:	Use the ACPI resource parsing functions (acpi_resource.c)
+	 *	once bus number ranges have been implemented there.
+	 */
+	rv = AcpiWalkResources(handle, "_CRS",
 	    acpi_pcidev_pciroot_bus_callback, &bus);
 
 	if (ACPI_FAILURE(rv))
@@ -180,6 +176,12 @@
 		if (ap == NULL)
 			return AE_NO_MEMORY;
 
+		/*
+		 * If no _SEG exist, all PCI bus segments are assumed
+		 * to be in the PCI segment group 0 (ACPI 4.0, p. 277).
+		 * The segment group number is conveyed in the lower
+		 * 16 bits of _SEG (the other bits are all reserved).
+		 */
 		rv = acpi_eval_integer(ad->ad_handle, "_SEG", &val);
 
 		if (ACPI_SUCCESS(rv))
@@ -209,10 +211,11 @@
 	if ((ad->ad_parent != NULL) &&
 	    (ad->ad_parent->ad_pciinfo != NULL) &&
 	    (ad->ad_parent->ad_pciinfo->ap_bridge)) {
+
 		/*
-		 * Our parent is a PCI root bridge or a PCI-to-PCI bridge.  We
-		 * have the same PCI segment#, and our bus# is its downstream
-		 * bus number.
+		 * Our parent is a PCI root bridge or a PCI-to-PCI
+		 * bridge. We have the same PCI segment number, and
+		 * our bus number is its downstream bus number.
 		 */
 		ap = kmem_zalloc(sizeof(*ap), KM_SLEEP);
 
@@ -226,8 +229,8 @@
 		ap->ap_function = ACPI_LOLODWORD(ad->ad_devinfo->Address);
 
 		/*
-		 * Check whether this device is a PCI-to-PCI bridge and get its
-		 * secondary bus#.
+		 * Check whether this device is a PCI-to-PCI
+		 * bridge and get its secondary bus number.
 		 */
 		rv = acpi_pcidev_ppb_downbus(ap->ap_segment, ap->ap_bus,
 		    ap->ap_device, ap->ap_function, &ap->ap_downbus);

Reply via email to