Hi, I've just made a workaround for this. Intel folks, could you review it as always?
> The problem is here, right? > > can't fetch resources for \\_SB_.PCI0.ISA_.FDC0 - AE_AML_BUFFER_LIMIT > > I'm sure _SB_.PCI0.ISA_.FDC0._CRS (Current Resource Settings) have some > problems (not sure in BIOS or ACPICA yet). I could reproduce the problem > which you reported. Trace attached in this mail. [snip] > dsopcode-0677 [09] DsEvalBufferFieldOpera: Field size 208 exceeds Buffer size 192 >(bits) > PsExecute: method failed - \_SB_.PCI0.ISA_.FDC0._CRS (0x8098fa8) > Execution of \_SB_.PCI0.ISA_.FDC0._CRS failed with status AE_AML_BUFFER_LIMIT This method is like this; Method(_CRS) { Name(BUF0, Buffer(0x18) {0x47, 0x1, 0xf2, 0x3, 0xf2, 0x3, 0x0, 0x4, 0x47, 0x1, 0xf7, 0x3, 0xf7, 0x3, 0x0, 0x1, 0x22, 0x40, 0x0, 0x2a, 0x4, 0x0, 0x79, 0x0 }) CreateByteField(BUF0, 0x2, IOLO) CreateByteField(BUF0, 0x3, IOHI) CreateByteField(BUF0, 0x4, IORL) CreateByteField(BUF0, 0x5, IORH) CreateByteField(BUF0, 0x19, IRQL) CreateByteField(BUF0, 0x1c, DMAV) Return(BUF0) } The problem is that this AML is trying to create a field at exceeded position (0x19) of the Buffer (size is 0x18). I couldn't find how AML interprepter treat this in ACPI Spec. so I'm not sure wether AWRDACPI violates the Spec. or ACPICA can have a workaround for this. Anyway, I made a patch to reallocate a large enough buffer for the requested operation. Thanks Index: dsopcode.c =================================================================== RCS file: /home/ncvs/src/sys/contrib/dev/acpica/dsopcode.c,v retrieving revision 1.1.1.10 diff -u -r1.1.1.10 dsopcode.c --- dsopcode.c 7 Sep 2001 01:22:24 -0000 1.1.1.10 +++ dsopcode.c 1 Oct 2001 18:58:41 -0000 @@ -615,11 +615,24 @@ if ((BitOffset + BitCount) > (8 * (UINT32) SrcDesc->Buffer.Length)) { + UINT32 Length; + UINT8 *Pointer; + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Field size %d exceeds Buffer size %d (bits)\n", BitOffset + BitCount, 8 * (UINT32) SrcDesc->Buffer.Length)); - Status = AE_AML_BUFFER_LIMIT; - goto Cleanup; + Length = ((BitOffset + BitCount) / 8) + + (((BitOffset + BitCount) % 8) ? 1 : 0); + Pointer = ACPI_MEM_CALLOCATE (Length); + if (!Pointer) + { + Status = AE_NO_MEMORY; + goto Cleanup; + } + MEMCPY (Pointer, SrcDesc->Buffer.Pointer, SrcDesc->Buffer.Length); + ACPI_MEM_FREE (SrcDesc->Buffer.Pointer); + SrcDesc->Buffer.Pointer = Pointer; + SrcDesc->Buffer.Length = Length; } To Unsubscribe: send mail to [EMAIL PROTECTED] with "unsubscribe freebsd-current" in the body of the message