Hello all,
I'm pleased to announce that the big changes that we have been working on
are now stable enough to distribute to other developers. Since our web
liaison person doesn't work on the weekend, the developer.intel.com site
will not be updated until the Monday evening push. However, there will be
early access to the Linux patch via the acpi project on SourceForge.net.
There was more than enough changes to justify this release (see below) but
there are also a number of issues remaining, which should be mentioned:
- Integration with the 2.5 driver model is not complete
- FX140 issue is not resolved
- Fix for PIIX4 BMISX issue is needed
- Full processing of the MADT (i.e. for Interrupt source override entries)
has not been implemented
- Thermal policy still needs validation
- Linux-specific code has not been fully converted to the new
"core-allocates" memory model
We are planning on backporting to 2.4 very soon and unifying IA32 and IA64
ACPI driver code, but the patch is against 2.5.3 for now.
Have a great weekend,
-- Andy
----------------------------------------
Summary of changes for this label: 02_01_02
1) Linux
All drivers consolidated to single files in main acpi directory
Supports ACPI PCI IRQ routing (PCI Link and PCI root drivers) in PIC and
IOAPIC modes. (This may not work on machines with interrupt source override
entries in their MADT)
MADT parsing code is more tightly integrated with other ACPI code
Implemented fix for PIIX reverse throttling errata (Processor driver)
Added new Limit interface (Processor and Thermal drivers)
New thermal policy (Thermal driver)
Many updates to /proc
Battery "low" event support (Battery driver)
IA32 - IA64 initialization unification, no longer experimental
Menuconfig options redesigned
2) ACPI CA Core Subsystem:
ACPI 2.0 support is complete in the entire Core Subsystem and the ASL
compiler.
All new ACPI 2.0 operators are implemented and all other changes for ACPI
2.0
support are complete. With simultaneous code and data optimizations
throughout
the subsystem, ACPI 2.0 support has been implemented with almost no
additional
cost in terms of code and data size.
Implemented a new mechanism for allocation of return buffers. If the buffer
length is set to ACPI_ALLOCATE_BUFFER, the buffer will be allocated on
behalf
of the caller. Consolidated all return buffer validation and allocation to
a
common procedure. Return buffers will be allocated via the primary OSL
allocation interface since it appears that a separate pool is not needed by
most users. If a separate pool is required for these buffers, the caller
can still use the original mechanism and pre-allocate the buffer(s).
Implemented support for string operands within the DerefOf operator.
Restructured the Hardware and Event managers to be table driven, simplifying
the source code and reducing the amount of generated code.
Split the common read/write low-level ACPI register bitfield procedure into
a separate read and write, simplifying the code considerably.
Obsoleted the AcpiOsCallocate OSL interface. This interface was used only a
handful of times and didn't have enough critical mass for a separate
interface. Replaced with a common calloc procedure in the core.
Fixed a reported problem with the GPE number mapping mechanism that allows
GPE1 numbers to be non-contiguous with GPE0. Reorganized the GPE
information
and shrunk a large array that was originally large enough to hold info for
all possible GPEs (256) to simply large enough to hold all GPEs up to the
largest GPE number on the machine.
Fixed a reported problem with resource structure alignment on 64-bit
platforms.
Changed the AcpiEnableEvent and AcpiDisableEvent external interfaces to not
require any flags for the common case of enabling/disabling a GPE.
Implemented support to allow a "Notify" on a Processor object.
Most TBDs in comments within the source code have been resolved and
eliminated.
Fixed a problem in the interpreter where a standalone parent prefix (^) was
not handled correctly in the interpreter and debugger.
Removed obsolete and unnecessary GPE save/restore code.
Implemented Field support in the ASL Load operator. This allows a table to
be loaded from a named field, in addition to loading a table directly from
an Operation Region.
Implemented timeout and handle support in the external Global Lock
interfaces.
Fixed a problem in the AcpiDump utility where pathnames were no longer being
generated correctly during the dump of named objects.
Modified the AML debugger to give a full display of if/while predicates
instead of just one AML opcode at a time. (The predicate can have several
nested ASL statements.) The old method was confusing during single
stepping.
Code and Data Size: Current core subsystem library sizes are shown below.
These are the code and data sizes for the acpica.lib produced by the
Microsoft Visual C++ 6.0 compiler, and these values do not include any ACPI
driver or OSPM code. The debug version of the code includes the debug
output trace mechanism and has a larger code and data size. Note that
these values will vary depending on the efficiency of the compiler and
the compiler options used during generation.
Previous Release (12_18_01)
Non-Debug Version: 66.1K Code, 5.5K Data, 71.6K Total
Debug Version: 138.3K Code, 55.9K Data, 194.2K Total
Current Release:
Non-Debug Version: 65.2K Code, 6.2K Data, 71.4K Total
Debug Version: 136.9K Code, 56.4K Data, 193.3K Total
3) ASL Compiler, version X2037:
Implemented several new output features to simplify integration of AML code
into
firmware:
1) Output the AML in C source code with labels for each named ASL object.
The
original ASL source code is interleaved as C comments.
2) Output the AML in ASM source code with labels and interleaved ASL
source.
3) Output the AML in raw hex table form, in either C or ASM.
Implemented support for optional string parameters to the LoadTable
operator.
Completed support for embedded escape sequences within string literals. The
compiler now supports all single character escapes as well as the Octal and
Hex escapes. Note: the insertion of a null byte into a string literal (via
the hex/octal escape) causes the string to be immediately terminated. A
warning is issued.
Fixed a problem where incorrect AML was generated for the case where an ASL
namepath consists of a single parent prefix (^) with no trailing name
segments.
The compiler has been successfully generated with a 64-bit C compiler.
----------------------------
Andrew Grover
Intel/MPG/Mobile Arch Lab
[email protected]
Grover, Andrew wrote:
>Hello all,
>
>I'm pleased to announce that the big changes that we have been working on
>are now stable enough to distribute to other developers. Since our web
>liaison person doesn't work on the weekend, the developer.intel.com site
>will not be updated until the Monday evening push. However, there will be
>early access to the Linux patch via the acpi project on SourceForge.net.
>
Just got the patch and applied it to 2.5.3-dj1. It fails to build thus:
ld -m elf_i386 -T
/home/expsoft/src/linux-kernel/linux-2.5/linux/arch/i386/vmlinux.lds -e
stext arch/i386/kernel/head.o arch/i386/kernel/init_task.o init/main.o
init/version.o init/do_mounts.o \
--start-group \
arch/i386/kernel/kernel.o arch/i386/mm/mm.o kernel/kernel.o
mm/mm.o fs/fs.o ipc/ipc.o \
/home/expsoft/src/linux-kernel/linux-2.5/linux/arch/i386/lib/lib.a
/home/expsoft/src/linux-kernel/linux-2.5/linux/lib/lib.a
/home/expsoft/src/linux-kernel/linux-2.5/linux/arch/i386/lib/lib.a \
drivers/acpi/acpi.o drivers/base/base.o drivers/char/char.o
drivers/block/block.o drivers/misc/misc.o drivers/net/net.o
drivers/media/media.o drivers/char/agp/agp.o drivers/char/drm/drm.o
drivers/ide/idedriver.o drivers/cdrom/driver.o drivers/pci/driver.o
drivers/net/pcmcia/pcmcia_net.o drivers/net/wireless/wireless_net.o
drivers/pnp/pnp.o drivers/video/video.o drivers/input/inputdrv.o
drivers/input/serio/seriodrv.o \
net/network.o \
--end-group \
-o vmlinux
drivers/acpi/acpi.o: In function `acpi_battery_read_info':
drivers/acpi/acpi.o(.text+0x2864e): undefined reference to `__ucmpdi2'
drivers/acpi/acpi.o(.text+0x28667): undefined reference to `__ucmpdi2'
drivers/acpi/acpi.o(__ksymtab+0x208): undefined reference to `acpi_exit'
$ find . -type f | xargs grep -e __ucmpdi2
Binary file ./drivers/acpi/acpi.o matches
Binary file ./drivers/acpi/acpi_battery.o matches
./arch/arm/kernel/armksyms.c:extern void __ucmpdi2(void);
./arch/arm/kernel/armksyms.c:EXPORT_SYMBOL_NOVERS(__ucmpdi2);
./arch/arm/lib/ucmpdi2.c:__ucmpdi2 (DItype a, DItype b)
$ find . -type f | xargs grep -e acpi_exit
./include/linux/modules/acpi_ksyms.ver:#define __ver_acpi_exit smp_240a2b61
./include/linux/modules/acpi_ksyms.ver:#define acpi_exit
_set_ver(acpi_exit)
./drivers/acpi/acpi_ksyms.c:EXPORT_SYMBOL(acpi_exit);
./drivers/acpi/acpi_bus.c:acpi_exit (void)
./drivers/acpi/acpi_bus.c: FUNCTION_TRACE("acpi_exit");
./drivers/acpi/acpi_bus.h:void acpi_exit (void);
Binary file ./drivers/acpi/acpi_ksyms.o matches
Binary file ./drivers/acpi/acpi_bus.o matches
Binary file ./drivers/acpi/acpi.o matches
All ACPI stuff is Y.
I will do some digging myself but I thought it would be good to throw
this out for your viewing (dis)pleasure.
--Nathan.