# --- ACPI Support

## leosgb

Hi, 

I am trying to get my A8N-VM CSM to shut down properly by changing the DSDT and adding it to my kernel so i ran into a problem: I believe i dont have ACPI enabled in my kernel. So i "menu config" and browse thru the options to find out this :"--- ACPI Support", which, I believe, means I cant even select it. What do I have to do? I am running 2.6.15-gentoo-r5. I thought I had it enabled until now when I tried to load the acpid and i got this:

/etc/init.d/acpid start

ACPI support has not been compiled into the kernel

Can anyone help me on this?

After this issue is solved then I have to attack the DSDT problem again. 

Thanks for any help,

---- 

My dmesg|grep ACPI output:

 BIOS-e820: 000000003bfc0000 - 000000003bfce000 (ACPI data)

 BIOS-e820: 000000003bfce000 - 000000003bff0000 (ACPI NVS)

ACPI: RSDP (v002 ACPIAM                                ) @ 0x00000000000fb870

ACPI: XSDT (v001 A M I  OEMXSDT  0x01000617 MSFT 0x00000097) @ 0x000000003bfc0100

ACPI: FADT (v003 A M I  OEMFACP  0x01000617 MSFT 0x00000097) @ 0x000000003bfc0290

ACPI: MADT (v001 A M I  OEMAPIC  0x01000617 MSFT 0x00000097) @ 0x000000003bfc0390

ACPI: MCFG (v001 A M I  OEMMCFG  0x01000617 MSFT 0x00000097) @ 0x000000003bfc0400

ACPI: OEMB (v001 A M I  AMI_OEM  0x01000617 MSFT 0x00000097) @ 0x000000003bfce040

ACPI: DSDT (v001  A0368 A0368001 0x00000001 INTL 0x02002026) @ 0x0000000000000000

Nvidia board detected. Ignoring ACPI timer override.

ACPI: PM-Timer IO Port: 0x508

ACPI: Local APIC address 0xfee00000

ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)

ACPI: LAPIC (acpi_id[0x02] lapic_id[0x81] disabled)

ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0])

ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)

ACPI: BIOS IRQ0 pin2 override ignored.

ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)

ACPI: INT_SRC_OVR (bus 0 bus_irq 14 global_irq 14 high edge)

ACPI: INT_SRC_OVR (bus 0 bus_irq 15 global_irq 15 high edge)

ACPI: IRQ9 used by override.

ACPI: IRQ14 used by override.

ACPI: IRQ15 used by override.

Using ACPI (MADT) for SMP configuration information

    ACPI-0311: *** Error: ns_search_and_enter: Bad character in ACPI Name: 43045350

    ACPI-0292: *** Error: Looking up [0x43045350] (NON-ASCII)

    ACPI-0115: *** Error: acpi_load_tables: Could not load namespace: AE_BAD_CHARACTER

    ACPI-0123: *** Error: acpi_load_tables: Could not load tables: AE_BAD_CHARACTER

ACPI: Unable to load the System Description Tables

ACPI: Subsystem revision 20050902

ACPI: Interpreter disabled.

----------

## widan

 *leosgb wrote:*   

> So i "menu config" and browse thru the options to find out this :"--- ACPI Support", which, I believe, means I cant even select it.

 

It means it's already enabled because another option needs it. You do have ACPI in the kernel, else you wouldn't get any ACPI messages in dmesg. It's just that the DSDT is badly broken, and the kernel refuses to use it, so acpid won't find ACPI.

```
ACPI-0311: *** Error: ns_search_and_enter: Bad character in ACPI Name: 43045350

ACPI-0292: *** Error: Looking up [0x43045350] (NON-ASCII)
```

Check for a name with a weird character in the DSDT. The name will be either C?SP or PS?C (probably PS?C, as x86/x86_64 are little endian), with the "?" being a weird character. Then you will have to guess which character got mangled (one of 0x44 = D, 0x54 = T, assuming the lowest nibble 4 is correct).

----------

## leosgb

Where can I find the DSDT? All tutorials point me to /proc/acpi/dsdt but I dont have that. I just tried to start it and i get:

zeus / # /etc/init.d/acpid start

 * ACPI support has not been compiled into the kernel

Have any idea why?

Thanks for your help,

----------

## widan

If you can't get it the "normal" way (you won't have /proc/acpi/dsdt if ACPI is completely disabled because the kernel thinks the DSDT is too broken), you can get it directly from memory:

```
phuket acpi # wget -O acpidmp.c http://cvs.sourceforge.net/viewcvs.py/*checkout*/acpi/pmtools/acpidmp/acpidmp.c?rev=1.2

phuket acpi # wget -O acpixtract http://cvs.sourceforge.net/viewcvs.py/*checkout*/acpi/pmtools/acpidmp/acpixtract?rev=1.2

phuket acpi # gcc acpidmp.c -o acpidmp

phuket acpi # chmod +x acpixtract 

phuket acpi # ./acpidmp | ./acpixtract DSDT > dsdt.dat 

phuket acpi # iasl -d dsdt.dat 
```

You should have your disassembled DSDT in dsdt.dsl at the end (and the binary DSDT in dsdt.dat).

----------

## leosgb

Just tried... unsuccessful  :Sad: 

zeus acpistuff # acpi # wget -O acpidump.c

No ACPI support in kernel, or incorrect acpi_path ("/proc/acpi").

And acpid isnt loaded because it says "no support in kernel". 

I just want to be able to access my A8N-VM CSM board sensor's readings.

Thanks again,

---- EDITED!!! ----

Ok I am very sorry but i didnt understand the commands well. Then after some thought here I realized i was breaking the commands. My bad!

So now i got:

Intel ACPI Component Architecture

AML Disassembler version 20060127 [Mar  7 2006]

Copyright (C) 2000 - 2006 Intel Corporation

Supports ACPI Specification Revision 3.0a

Loading Acpi table from file dsdt.dat

Acpi table [DSDT] successfully installed and loaded

Pass 1 parse of [DSDT]

My dsdt.dsl holds this info:

"ACPI Error (nssearch-0405): Bad character in ACPI Name: 43045350 [20060127]

ACPI Error (dswload-0393): [0x43045350] (NON-ASCII) Namespace lookup failure, AE_BAD_CHARACTER

ACPI Exception (psloop-0347): AE_BAD_CHARACTER, During name lookup/catalog [20060127]

Could not parse ACPI tables, AE_BAD_CHARACTER"

And I am trying to figure out what to do next. Thank you so much for your help! And sorry for the confusion.

----------

## widan

Then emerge hexedit and load your (binary) DSDT with it. Then search (with Ctrl-S) the hex string 50530443 (if it's not there, try 43045350 instead - the same thing but byte-swapped - it depends on the endianness in which it is stored in the file). Then replace the "04" in it by "44" (just move to the proper place, and type the new number). Search again, in case there is another instance of the bad name somewhere (you need to do the same thing on all instances). Then exit (Ctrl-X, and answer you want to save the file when it asks you).

Now you should be able to disassemble the DSDT successfully (the bad PS?C name will be replaced by PSDC in the DSDT, so if you need to try other names like PSTC, you will need to look for this one).

----------

## leosgb

It worked! Thank you so much. I have the dsdt.dsl here and will proceed with this instructions https://forums.gentoo.org/viewtopic.php?t=122145 and hopefully it will be solved by tomorrow. Thanks again!

--- EDITED ---

Well i tried to follow the instructions on the website but...

1) if i try to fix mine the errors are totally strange to me (i dont know this language):

"Intel ACPI Component Architecture

ASL Optimizing Compiler version 20060127 [Mar  7 2006]

Copyright (C) 2000 - 2006 Intel Corporation

Supports ACPI Specification Revision 3.0a

dsdt.dsl  5203:             If (LNot (And (\_SB.PCI0.HFZF, Local2)))

Error    1061 -                   Object does not exist ^  (\_SB.PCI0.HFZF)

dsdt.dsl  5207:                     Or (\_SB.PCI0.HFZF, Local2, \_SB.PCI0.HFZF)

Error    1061 -                Object does not exist ^  (\_SB.PCI0.HFZF)

dsdt.dsl  5207:                     Or (\_SB.PCI0.HFZF, Local2, \_SB.PCI0.HFZF)

Error    1061 -                                        Object does not exist ^  (\_SB.PCI0.HFZF)

dsdt.dsl  5348:     Method (WFZF, 1, NotSerialized)

Warning  2085 -                ^ Not all control paths return a value (WFZF)

dsdt.dsl  5361:             Return (While (Local1)

Error    1093 -                         ^ syntax error, unexpected PARSEOP_WHILE

dsdt.dsl  5379:     Scopecal3)

Error    1093 -         ^ syntax error, unexpected PARSEOP_SCOPE, expecting $end

ASL Input:  dsdt.dsl - 6098 lines, 189930 bytes, 1947 keywords

Compilation complete. 5 Errors, 1 Warnings, 0 Remarks, 457 Optimizations"

2) Now I am trying to get the fixed table from sourceforge to work. It disassembles and assembles w/o errors nor warnings.

----------

## leosgb

I believe I made a major mistake here, i dont know. I followed the instructions dowloading the requested file and patched my kernel. But i forgot to add the "<" so my terminal was frozen for some time when i finally decided to hit enter. Then i realized the mistake and fixed it and the patch returned me this error:

zeus linux # patch -p1 ~/acpistuff/dsdt_override.diff       <<==== MAJOR MiSTAKE

zeus linux # patch -p1 < ~/acpistuff/dsdt_override.diff    <<==== CORRECT COMMAND

patching file drivers/acpi/osl.c

Hunk #1 succeeded at 25 with fuzz 2.

Hunk #2 FAILED at 209.

1 out of 2 hunks FAILED -- saving rejects to file drivers/acpi/osl.c.rej

I have no idea what this means. I just know that i shouldnt recompile my kernel for now. Could you give me some assistance? Sorry for all this trouble.

----------

## widan

There is no need for a patch to use a custom DSDT. First apply the patch in reverse to remove the effect:

```
patch -p1 -R < ~/acpistuff/dsdt_override.diff
```

Then select those options:

```
Device Drivers  --->

  Generic Driver Options  --->

    [ ] Select only drivers that don't need compile-time external firmware

Power management options (ACPI, APM)  --->

  ACPI (Advanced Configuration and Power Interface) Support  --->

    [*]   Include Custom DSDT

    ()      Custom DSDT Table file to include
```

And select your fixed DSDT on the "Custom DSDT to include" line.

----------

## leosgb

My problem is that i dont have that option in my kernel. Mine is 2.6.15-r5gentoo. How can i make them be available to me?

----------

## widan

You need to unselect the "Select only drivers that don't need compile-time external firmware" before the option will appear.

----------

## leosgb

I see. I deselect both:

Select only drivers that dont need compile-time external firmware and

Prevent firmware from being built

Going for recompile now! Thanks!

----------

## leosgb

Ok, I added the file to the kernel sources and it boots well. When I check dmesg it doesnt return any errors as before. It gives me a msg saying it is replacing the old DSDT with one provided by the Operating System. Nevertheless when I try to shutdown i still need to go there and press the button. What is missing? The original file was created by someone else (posted at acpi) for my board with 128MB of video RAM and 2GB or RAM. Can it cause a problem? I only have 1GB of RAM. Thanks for all your help so far.

----------

## widan

 *leosgb wrote:*   

> The original file was created by someone else (posted at acpi) for my board with 128MB of video RAM and 2GB or RAM. Can it cause a problem? I only have 1GB of RAM.

 

It's possible, it depends on the BIOS. You can try to use the 2GB DSDT to fix your own DSDT (look at how the errors were fixed in the DSDT you have, and try to do the same on your own DSDT).

----------

## bludger

You can also check out this link. It worked for me.

http://quaggaspace.org/a8nvm/

----------

