svn commit: r210137 - head/sys/dev/acpica/Osd
Jung-uk Kim
jkim at FreeBSD.org
Thu Jul 15 19:52:55 UTC 2010
Author: jkim
Date: Thu Jul 15 19:52:54 2010
New Revision: 210137
URL: http://svn.freebsd.org/changeset/base/210137
Log:
- AcpiOsReadPciConfiguration() needs similar fixes as r209965 and r210129.
According to ACPICA User Guide and Programmer Reference, the read data must
be zero extended to fill the 64-bit return value even if the bit width of
the location is less than 64.
- Return error when 64-bit access is requested as we do not support 64-bit
PCI register access (yet). XXX We may have to split it up into two 32-bit
accesses if it is really required.
Modified:
head/sys/dev/acpica/Osd/OsdHardware.c
Modified: head/sys/dev/acpica/Osd/OsdHardware.c
==============================================================================
--- head/sys/dev/acpica/Osd/OsdHardware.c Thu Jul 15 19:40:48 2010 (r210136)
+++ head/sys/dev/acpica/Osd/OsdHardware.c Thu Jul 15 19:52:54 2010 (r210137)
@@ -79,9 +79,6 @@ AcpiOsReadPort(ACPI_IO_ADDRESS InPort, U
case 32:
*Value = bus_space_read_4(ACPI_BUS_SPACE_IO, ACPI_BUS_HANDLE, InPort);
break;
- default:
- /* debug trap goes here */
- break;
}
return (AE_OK);
@@ -101,9 +98,6 @@ AcpiOsWritePort(ACPI_IO_ADDRESS OutPort,
case 32:
bus_space_write_4(ACPI_BUS_SPACE_IO, ACPI_BUS_HANDLE, OutPort, Value);
break;
- default:
- /* debug trap goes here */
- break;
}
return (AE_OK);
@@ -113,28 +107,15 @@ ACPI_STATUS
AcpiOsReadPciConfiguration(ACPI_PCI_ID *PciId, UINT32 Register, void *Value,
UINT32 Width)
{
- u_int32_t byte_width = Width / 8;
- u_int32_t val;
+
+ if (Width == 64)
+ return (AE_SUPPORT);
if (!pci_cfgregopen())
return (AE_NOT_EXIST);
- val = pci_cfgregread(PciId->Bus, PciId->Device, PciId->Function, Register,
- byte_width);
- switch (Width) {
- case 8:
- *(u_int8_t *)Value = val & 0xff;
- break;
- case 16:
- *(u_int16_t *)Value = val & 0xffff;
- break;
- case 32:
- *(u_int32_t *)Value = val;
- break;
- default:
- /* debug trap goes here */
- break;
- }
+ *(UINT64 *)Value = pci_cfgregread(PciId->Bus, PciId->Device,
+ PciId->Function, Register, Width / 8);
return (AE_OK);
}
@@ -144,13 +125,15 @@ ACPI_STATUS
AcpiOsWritePciConfiguration (ACPI_PCI_ID *PciId, UINT32 Register,
UINT64 Value, UINT32 Width)
{
- u_int32_t byte_width = Width / 8;
+
+ if (Width == 64)
+ return (AE_SUPPORT);
if (!pci_cfgregopen())
return (AE_NOT_EXIST);
pci_cfgregwrite(PciId->Bus, PciId->Device, PciId->Function, Register,
- Value, byte_width);
+ Value, Width / 8);
return (AE_OK);
}
More information about the svn-src-all
mailing list