Implement acpi_pci_X_cfg_Y using HalXBusDataByOffset()
Modified: trunk/reactos/drivers/bus/acpi/ospm/osl.c

Modified: trunk/reactos/drivers/bus/acpi/ospm/osl.c
--- trunk/reactos/drivers/bus/acpi/ospm/osl.c	2005-10-22 20:02:03 UTC (rev 18687)
+++ trunk/reactos/drivers/bus/acpi/ospm/osl.c	2005-10-22 20:03:50 UTC (rev 18688)
@@ -354,11 +354,28 @@
 	u32 addr,
 	u8 * val)
 {
-  /* FIXME: What do we do here? */
+  NTSTATUS ret;
+  PCI_SLOT_NUMBER slot;
 
-  DPRINT("acpi_os_read_pci_cfg_byte is not implemented");
+  if (func == 0)
+    return AE_ERROR;
 
-  return AE_ERROR;
+  slot.u.AsULONG = 0;  
+  slot.u.bits.DeviceNumber = (func >> 16) & 0xFFFF;
+  slot.u.bits.FunctionNumber = func & 0xFFFF;
+  
+  DPRINT("acpi_os_read_pci_cfg_byte, slot=0x%X, func=0x%X\n", slot.u.AsULONG, func);
+  ret = HalGetBusDataByOffset(PCIConfiguration,
+           bus,
+           slot.u.AsULONG,
+           val,
+           addr,
+           sizeof(UCHAR));
+
+  if (NT_SUCCESS(ret))
+    return AE_OK;
+  else
+    return AE_ERROR;
 }
 
 ACPI_STATUS
@@ -368,11 +385,28 @@
 	u32 addr,
 	u16 * val)
 {
-  /* FIXME: What do we do here? */
+  NTSTATUS ret;
+  PCI_SLOT_NUMBER slot;
 
-  DPRINT("acpi_os_read_pci_cfg_word is not implemented");
+  if (func == 0)
+    return AE_ERROR;
 
-  return AE_ERROR;
+  slot.u.AsULONG = 0;  
+  slot.u.bits.DeviceNumber = (func >> 16) & 0xFFFF;
+  slot.u.bits.FunctionNumber = func & 0xFFFF;
+
+  DPRINT("acpi_os_read_pci_cfg_word, slot=0x%x\n", slot.u.AsULONG);
+  ret = HalGetBusDataByOffset(PCIConfiguration,
+           bus,
+           slot.u.AsULONG,
+           val,
+           addr,
+           sizeof(USHORT));
+
+  if (NT_SUCCESS(ret))
+    return AE_OK;
+  else
+	return AE_ERROR;
 }
 
 ACPI_STATUS
@@ -382,11 +416,28 @@
 	u32 addr,
 	u32 * val)
 {
-  /* FIXME: What do we do here? */
+  NTSTATUS ret;
+  PCI_SLOT_NUMBER slot;
 
-  DPRINT("acpi_os_read_pci_cfg_dword is not implemented");
+  if (func == 0)
+    return AE_ERROR;
 
-  return AE_ERROR;
+  slot.u.AsULONG = 0;  
+  slot.u.bits.DeviceNumber = (func >> 16) & 0xFFFF;
+  slot.u.bits.FunctionNumber = func & 0xFFFF;
+
+  DPRINT("acpi_os_read_pci_cfg_dword, slot=0x%x\n", slot.u.AsULONG);
+  ret = HalGetBusDataByOffset(PCIConfiguration,
+           bus,
+           slot.u.AsULONG,
+           val,
+           addr,
+           sizeof(ULONG));
+
+  if (NT_SUCCESS(ret))
+    return AE_OK;
+  else
+	return AE_ERROR;
 }
 
 ACPI_STATUS
@@ -396,11 +447,29 @@
 	u32 addr,
 	u8 val)
 {
-  /* FIXME: What do we do here? */
+  NTSTATUS ret;
+  UCHAR buf = val;
+  PCI_SLOT_NUMBER slot;
 
-  DPRINT("acpi_os_write_pci_cfg_byte is not implemented");
+  if (func == 0)
+    return AE_ERROR;
 
-  return AE_ERROR;
+  slot.u.AsULONG = 0;  
+  slot.u.bits.DeviceNumber = (func >> 16) & 0xFFFF;
+  slot.u.bits.FunctionNumber = func & 0xFFFF;
+
+  DPRINT("acpi_os_write_pci_cfg_byte, slot=0x%x\n", slot.u.AsULONG);
+  ret = HalSetBusDataByOffset(PCIConfiguration,
+           bus,
+           slot.u.AsULONG,
+           &buf,
+           addr,
+           sizeof(UCHAR));
+
+  if (NT_SUCCESS(ret))
+    return AE_OK;
+  else
+	return AE_ERROR;
 }
 
 ACPI_STATUS
@@ -410,11 +479,29 @@
 	u32 addr,
 	u16 val)
 {
-  /* FIXME: What do we do here? */
+  NTSTATUS ret;
+  USHORT buf = val;
+  PCI_SLOT_NUMBER slot;
 
-  DPRINT("acpi_os_write_pci_cfg_word is not implemented");
+  if (func == 0)
+    return AE_ERROR;
 
-  return AE_ERROR;
+  slot.u.AsULONG = 0;  
+  slot.u.bits.DeviceNumber = (func >> 16) & 0xFFFF;
+  slot.u.bits.FunctionNumber = func & 0xFFFF;
+
+  DPRINT("acpi_os_write_pci_cfg_byte, slot=0x%x\n", slot.u.AsULONG);
+  ret = HalSetBusDataByOffset(PCIConfiguration,
+           bus,
+           slot.u.AsULONG,
+           &buf,
+           addr,
+           sizeof(USHORT));
+
+  if (NT_SUCCESS(ret))
+    return AE_OK;
+  else
+	return AE_ERROR;
 }
 
 ACPI_STATUS
@@ -424,11 +511,29 @@
 	u32 addr,
 	u32 val)
 {
-  /* FIXME: What do we do here? */
+  NTSTATUS ret;
+  ULONG buf = val;
+  PCI_SLOT_NUMBER slot;
 
-  DPRINT("acpi_os_write_pci_cfg_dword is not implemented");
+  if (func == 0)
+    return AE_ERROR;
 
-  return AE_ERROR;
+  slot.u.AsULONG = 0;  
+  slot.u.bits.DeviceNumber = (func >> 16) & 0xFFFF;
+  slot.u.bits.FunctionNumber = func & 0xFFFF;
+
+  DPRINT("acpi_os_write_pci_cfg_byte, slot=0x%x\n", slot.u.AsULONG);
+  ret = HalSetBusDataByOffset(PCIConfiguration,
+           bus,
+           slot.u.AsULONG,
+           &buf,
+           addr,
+           sizeof(ULONG));
+
+  if (NT_SUCCESS(ret))
+    return AE_OK;
+  else
+	return AE_ERROR;
 }
 
 ACPI_STATUS