diff -Nru a/drivers/acpi/osl.c b/drivers/acpi/osl.c
--- a/drivers/acpi/osl.c	Fri Aug 30 22:33:32 2002
+++ b/drivers/acpi/osl.c	Fri Aug 30 22:33:32 2002
@@ -71,6 +71,7 @@
 static OSD_HANDLER acpi_irq_handler = NULL;
 static void *acpi_irq_context = NULL;
 
+extern struct pci_ops *pci_root_ops;
 
 acpi_status
 acpi_os_initialize(void)
@@ -80,7 +81,7 @@
 	 * it while walking the namespace (bus 0 and root bridges w/ _BBNs).
 	 */
 #ifdef CONFIG_ACPI_PCI
-	if (!pci_config_read || !pci_config_write) {
+	if (!pci_root_ops) {
 		printk(KERN_ERR PREFIX "Access to PCI configuration space unavailable\n");
 		return AE_NULL_ENTRY;
 	}
@@ -438,27 +439,31 @@
 	u32                     width)
 {
 	int			result = 0;
+	int			size = 0;
+	struct pci_bus		bus;
+
 	if (!value)
 		return AE_BAD_PARAMETER;
 
-	switch (width)
-	{
+	switch (width) {
 	case 8:
-		result = pci_config_read(pci_id->segment, pci_id->bus,
-			pci_id->device, pci_id->function, reg, 1, value);
+		size = 1;
 		break;
 	case 16:
-		result = pci_config_read(pci_id->segment, pci_id->bus,
-			pci_id->device, pci_id->function, reg, 2, value);
+		size = 2;
 		break;
 	case 32:
-		result = pci_config_read(pci_id->segment, pci_id->bus,
-			pci_id->device, pci_id->function, reg, 4, value);
+		size = 4;
 		break;
 	default:
 		BUG();
 	}
 
+	bus.number = pci_id->bus;
+	result = pci_root_ops->read(&bus, PCI_DEVFN(pci_id->device,
+						    pci_id->function),
+				    reg, size, value);
+
 	return (result ? AE_ERROR : AE_OK);
 }
 
@@ -470,25 +475,27 @@
 	u32                     width)
 {
 	int			result = 0;
+	int			size = 0;
+	struct pci_bus		bus;
 
-	switch (width)
-	{
+	switch (width) {
 	case 8:
-		result = pci_config_write(pci_id->segment, pci_id->bus,
-			pci_id->device, pci_id->function, reg, 1, value);
+		size = 1;
 		break;
 	case 16:
-		result = pci_config_write(pci_id->segment, pci_id->bus,
-			pci_id->device, pci_id->function, reg, 2, value);
+		size = 2;
 		break;
 	case 32:
-		result = pci_config_write(pci_id->segment, pci_id->bus,
-			pci_id->device, pci_id->function, reg, 4, value);
+		size = 4;
 		break;
 	default:
 		BUG();
 	}
 
+	bus.number = pci_id->bus;
+	result = pci_root_ops->write(&bus, PCI_DEVFN(pci_id->device,
+						     pci_id->function),
+				     reg, size, value);
 	return (result ? AE_ERROR : AE_OK);
 }
 
