From 35719fdd2ff27177690edb32843d32e092a006e3 Mon Sep 17 00:00:00 2001 From: l4check Date: Fri, 16 Nov 2012 18:46:17 +0000 Subject: [PATCH] update: sync git-svn-id: http://svn.tudos.org/repos/oc/tudos/trunk@41 d050ee49-bd90-4346-b210-929a50b99cfc --- .../kern/arm/bsp/omap3/boot_mp-arm-omap4.cpp | 60 - .../arm/bsp/realview/boot_mp-arm-realview.cpp | 30 - .../arm/bsp/tegra2/boot_mp-arm-tegra2.cpp | 48 - kernel/fiasco/src/kern/arm/logdefs.h | 238 - kernel/fiasco/src/kern/ia32/logdefs.h | 240 - kernel/fiasco/src/kern/tb_entry_output.cpp | 526 - l4/pkg/acpica/lib-acpi/src/acpica/README | 79 - l4/pkg/acpica/lib-acpi/src/acpica/changes.txt | 9649 ----------------- .../lib-acpi/src/acpica/compiler/Makefile | 129 - .../lib-acpi/src/acpica/debugger/dbcmds.c | 2129 ---- .../lib-acpi/src/acpica/debugger/dbdisply.c | 971 -- .../lib-acpi/src/acpica/debugger/dbexec.c | 793 -- .../lib-acpi/src/acpica/debugger/dbfileio.c | 652 -- .../lib-acpi/src/acpica/debugger/dbhistry.c | 292 - .../lib-acpi/src/acpica/debugger/dbinput.c | 1085 -- .../lib-acpi/src/acpica/debugger/dbstats.c | 621 -- .../lib-acpi/src/acpica/debugger/dbutils.c | 599 - .../lib-acpi/src/acpica/debugger/dbxface.c | 602 - .../src/acpica/disassembler/dmbuffer.c | 614 -- .../src/acpica/disassembler/dmnames.c | 525 - .../src/acpica/disassembler/dmobject.c | 661 -- .../src/acpica/disassembler/dmopcode.c | 632 -- .../src/acpica/disassembler/dmresrc.c | 509 - .../src/acpica/disassembler/dmresrcl.c | 1125 -- .../src/acpica/disassembler/dmresrcs.c | 387 - .../src/acpica/disassembler/dmutils.c | 375 - .../lib-acpi/src/acpica/disassembler/dmwalk.c | 1006 -- .../lib-acpi/src/acpica/dispatcher/dsfield.c | 776 -- .../lib-acpi/src/acpica/dispatcher/dsinit.c | 310 - .../lib-acpi/src/acpica/dispatcher/dsmethod.c | 762 -- .../lib-acpi/src/acpica/dispatcher/dsmthdat.c | 846 -- .../lib-acpi/src/acpica/dispatcher/dsobject.c | 925 -- .../lib-acpi/src/acpica/dispatcher/dsopcode.c | 1619 --- .../lib-acpi/src/acpica/dispatcher/dsutils.c | 1009 -- .../lib-acpi/src/acpica/dispatcher/dswexec.c | 853 -- .../lib-acpi/src/acpica/dispatcher/dswload.c | 1316 --- .../lib-acpi/src/acpica/dispatcher/dswscope.c | 311 - .../lib-acpi/src/acpica/dispatcher/dswstate.c | 918 -- .../lib-acpi/src/acpica/events/evevent.c | 430 - .../acpica/lib-acpi/src/acpica/events/evgpe.c | 897 -- .../lib-acpi/src/acpica/events/evgpeblk.c | 1402 --- .../lib-acpi/src/acpica/events/evmisc.c | 740 -- .../lib-acpi/src/acpica/events/evregion.c | 1284 --- .../lib-acpi/src/acpica/events/evrgnini.c | 799 -- .../acpica/lib-acpi/src/acpica/events/evsci.c | 280 - .../lib-acpi/src/acpica/events/evxface.c | 967 -- .../lib-acpi/src/acpica/events/evxfevnt.c | 1112 -- .../lib-acpi/src/acpica/events/evxfregn.c | 346 - .../lib-acpi/src/acpica/executer/exconfig.c | 751 -- .../lib-acpi/src/acpica/executer/exconvrt.c | 826 -- .../lib-acpi/src/acpica/executer/excreate.c | 636 -- .../lib-acpi/src/acpica/executer/exdump.c | 1194 -- .../lib-acpi/src/acpica/executer/exfield.c | 466 - .../lib-acpi/src/acpica/executer/exfldio.c | 1081 -- .../lib-acpi/src/acpica/executer/exmisc.c | 873 -- .../lib-acpi/src/acpica/executer/exmutex.c | 621 -- .../lib-acpi/src/acpica/executer/exnames.c | 560 - .../lib-acpi/src/acpica/executer/exoparg1.c | 1183 -- .../lib-acpi/src/acpica/executer/exoparg2.c | 741 -- .../lib-acpi/src/acpica/executer/exoparg3.c | 377 - .../lib-acpi/src/acpica/executer/exoparg6.c | 438 - .../lib-acpi/src/acpica/executer/exprep.c | 686 -- .../lib-acpi/src/acpica/executer/exregion.c | 630 -- .../lib-acpi/src/acpica/executer/exresnte.c | 374 - .../lib-acpi/src/acpica/executer/exresolv.c | 652 -- .../lib-acpi/src/acpica/executer/exresop.c | 810 -- .../lib-acpi/src/acpica/executer/exstore.c | 822 -- .../lib-acpi/src/acpica/executer/exstoren.c | 386 - .../lib-acpi/src/acpica/executer/exstorob.c | 316 - .../lib-acpi/src/acpica/executer/exsystem.c | 418 - .../lib-acpi/src/acpica/executer/exutils.c | 574 - .../src/acpica/generate/lint/files.lnt | 15 - .../src/acpica/generate/lint/lint.bat | 16 - .../src/acpica/generate/lint/lset.bat | 1 - .../src/acpica/generate/lint/options.lnt | 82 - .../src/acpica/generate/lint/readme.txt | 14 - .../src/acpica/generate/lint/std16.lnt | 16 - .../src/acpica/generate/lint/std32.lnt | 14 - .../src/acpica/generate/lint/std64.lnt | 18 - .../lib-acpi/src/acpica/hardware/hwacpi.c | 278 - .../lib-acpi/src/acpica/hardware/hwgpe.c | 597 - .../lib-acpi/src/acpica/hardware/hwregs.c | 805 -- .../lib-acpi/src/acpica/hardware/hwsleep.c | 711 -- .../lib-acpi/src/acpica/hardware/hwtimer.c | 288 - .../lib-acpi/src/acpica/hardware/hwvalid.c | 424 - .../lib-acpi/src/acpica/hardware/hwxface.c | 710 -- .../lib-acpi/src/acpica/namespace/nsaccess.c | 772 -- .../lib-acpi/src/acpica/namespace/nsalloc.c | 666 -- .../lib-acpi/src/acpica/namespace/nsdump.c | 826 -- .../lib-acpi/src/acpica/namespace/nsdumpdv.c | 234 - .../lib-acpi/src/acpica/namespace/nseval.c | 558 - .../lib-acpi/src/acpica/namespace/nsinit.c | 727 -- .../lib-acpi/src/acpica/namespace/nsload.c | 428 - .../lib-acpi/src/acpica/namespace/nsnames.c | 375 - .../lib-acpi/src/acpica/namespace/nsobject.c | 577 - .../lib-acpi/src/acpica/namespace/nsparse.c | 297 - .../lib-acpi/src/acpica/namespace/nspredef.c | 1263 --- .../lib-acpi/src/acpica/namespace/nsrepair.c | 686 -- .../lib-acpi/src/acpica/namespace/nsrepair2.c | 796 -- .../lib-acpi/src/acpica/namespace/nssearch.c | 507 - .../lib-acpi/src/acpica/namespace/nsutils.c | 1184 -- .../lib-acpi/src/acpica/namespace/nswalk.c | 468 - .../lib-acpi/src/acpica/namespace/nsxfeval.c | 1020 -- .../lib-acpi/src/acpica/namespace/nsxfname.c | 776 -- .../lib-acpi/src/acpica/namespace/nsxfobj.c | 357 - l4/pkg/acpica/lib-acpi/src/acpica/osunixxf.c | 1229 --- .../lib-acpi/src/acpica/parser/psargs.c | 893 -- .../lib-acpi/src/acpica/parser/psloop.c | 1341 --- .../lib-acpi/src/acpica/parser/psopcode.c | 589 - .../lib-acpi/src/acpica/parser/psparse.c | 791 -- .../lib-acpi/src/acpica/parser/psscope.c | 374 - .../lib-acpi/src/acpica/parser/pstree.c | 427 - .../lib-acpi/src/acpica/parser/psutils.c | 362 - .../lib-acpi/src/acpica/parser/pswalk.c | 193 - .../lib-acpi/src/acpica/parser/psxface.c | 510 - .../lib-acpi/src/acpica/resources/rsaddr.c | 479 - .../lib-acpi/src/acpica/resources/rscalc.c | 745 -- .../lib-acpi/src/acpica/resources/rscreate.c | 533 - .../lib-acpi/src/acpica/resources/rsdump.c | 872 -- .../lib-acpi/src/acpica/resources/rsinfo.c | 290 - .../lib-acpi/src/acpica/resources/rsio.c | 376 - .../lib-acpi/src/acpica/resources/rsirq.c | 348 - .../lib-acpi/src/acpica/resources/rslist.c | 286 - .../lib-acpi/src/acpica/resources/rsmemory.c | 323 - .../lib-acpi/src/acpica/resources/rsmisc.c | 683 -- .../lib-acpi/src/acpica/resources/rsutils.c | 874 -- .../lib-acpi/src/acpica/resources/rsxface.c | 713 -- .../lib-acpi/src/acpica/tables/tbfadt.c | 752 -- .../lib-acpi/src/acpica/tables/tbfind.c | 215 - .../lib-acpi/src/acpica/tables/tbinstal.c | 785 -- .../lib-acpi/src/acpica/tables/tbutils.c | 741 -- .../lib-acpi/src/acpica/tables/tbxface.c | 750 -- .../lib-acpi/src/acpica/tables/tbxfroot.c | 371 - .../src/acpica/tools/acpiexec/Makefile | 149 - .../src/acpica/tools/acpiexec/osunixdir.c | 306 - .../src/acpica/tools/acpisrc/Makefile | 17 - .../src/acpica/tools/acpisrc/osunixdir.c | 306 - .../src/acpica/tools/acpixtract/Makefile | 16 - .../lib-acpi/src/acpica/utilities/utalloc.c | 488 - .../lib-acpi/src/acpica/utilities/utcache.c | 433 - .../lib-acpi/src/acpica/utilities/utclib.c | 961 -- .../lib-acpi/src/acpica/utilities/utcopy.c | 1142 -- .../lib-acpi/src/acpica/utilities/utdebug.c | 814 -- .../lib-acpi/src/acpica/utilities/utdelete.c | 828 -- .../lib-acpi/src/acpica/utilities/uteval.c | 575 - .../lib-acpi/src/acpica/utilities/utglobal.c | 975 -- .../lib-acpi/src/acpica/utilities/utids.c | 497 - .../lib-acpi/src/acpica/utilities/utinit.c | 228 - .../lib-acpi/src/acpica/utilities/utlock.c | 277 - .../lib-acpi/src/acpica/utilities/utmath.c | 431 - .../lib-acpi/src/acpica/utilities/utmisc.c | 1485 --- .../lib-acpi/src/acpica/utilities/utmutex.c | 477 - .../lib-acpi/src/acpica/utilities/utobject.c | 859 -- .../lib-acpi/src/acpica/utilities/utresrc.c | 772 -- .../lib-acpi/src/acpica/utilities/utstate.c | 470 - .../lib-acpi/src/acpica/utilities/uttrack.c | 726 -- .../lib-acpi/src/acpica/utilities/utxface.c | 734 -- l4/pkg/drivers/generic/include/io.h | 39 - l4/pkg/drivers/generic/src/amba.c | 17 - l4/pkg/examples/sys/vmtest/main.c | 499 - l4/pkg/l4re_c/util/include/cap.h | 58 - 161 files changed, 105824 deletions(-) delete mode 100644 kernel/fiasco/src/kern/arm/bsp/omap3/boot_mp-arm-omap4.cpp delete mode 100644 kernel/fiasco/src/kern/arm/bsp/realview/boot_mp-arm-realview.cpp delete mode 100644 kernel/fiasco/src/kern/arm/bsp/tegra2/boot_mp-arm-tegra2.cpp delete mode 100644 kernel/fiasco/src/kern/arm/logdefs.h delete mode 100644 kernel/fiasco/src/kern/ia32/logdefs.h delete mode 100644 kernel/fiasco/src/kern/tb_entry_output.cpp delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/README delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/changes.txt delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/compiler/Makefile delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbcmds.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbdisply.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbexec.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbfileio.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbhistry.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbinput.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbstats.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbutils.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbxface.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmbuffer.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmnames.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmobject.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmopcode.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmresrc.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmresrcl.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmresrcs.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmutils.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmwalk.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsfield.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsinit.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsmethod.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsmthdat.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsobject.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsopcode.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsutils.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswexec.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswload.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswscope.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswstate.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/events/evevent.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/events/evgpe.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/events/evgpeblk.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/events/evmisc.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/events/evregion.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/events/evrgnini.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/events/evsci.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/events/evxface.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/events/evxfevnt.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/events/evxfregn.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exconfig.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exconvrt.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/excreate.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exdump.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exfield.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exfldio.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exmisc.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exmutex.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exnames.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg1.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg2.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg3.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg6.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exprep.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exregion.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exresnte.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exresolv.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exresop.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exstore.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exstoren.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exstorob.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exsystem.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/executer/exutils.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/files.lnt delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/lint.bat delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/lset.bat delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/options.lnt delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/readme.txt delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/std16.lnt delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/std32.lnt delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/std64.lnt delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwacpi.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwgpe.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwregs.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwsleep.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwtimer.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwvalid.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwxface.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsaccess.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsalloc.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsdump.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsdumpdv.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nseval.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsinit.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsload.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsnames.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsobject.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsparse.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nspredef.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsrepair.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsrepair2.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nssearch.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsutils.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nswalk.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsxfeval.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsxfname.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsxfobj.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/osunixxf.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/parser/psargs.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/parser/psloop.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/parser/psopcode.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/parser/psparse.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/parser/psscope.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/parser/pstree.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/parser/psutils.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/parser/pswalk.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/parser/psxface.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/resources/rsaddr.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/resources/rscalc.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/resources/rscreate.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/resources/rsdump.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/resources/rsinfo.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/resources/rsio.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/resources/rsirq.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/resources/rslist.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/resources/rsmemory.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/resources/rsmisc.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/resources/rsutils.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/resources/rsxface.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/tables/tbfadt.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/tables/tbfind.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/tables/tbinstal.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/tables/tbutils.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/tables/tbxface.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/tables/tbxfroot.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/tools/acpiexec/Makefile delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/tools/acpiexec/osunixdir.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/tools/acpisrc/Makefile delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/tools/acpisrc/osunixdir.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/tools/acpixtract/Makefile delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utalloc.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utcache.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utclib.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utcopy.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utdebug.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utdelete.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/uteval.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utglobal.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utids.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utinit.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utlock.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utmath.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utmisc.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utmutex.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utobject.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utresrc.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utstate.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/uttrack.c delete mode 100644 l4/pkg/acpica/lib-acpi/src/acpica/utilities/utxface.c delete mode 100644 l4/pkg/drivers/generic/include/io.h delete mode 100644 l4/pkg/drivers/generic/src/amba.c delete mode 100644 l4/pkg/examples/sys/vmtest/main.c delete mode 100644 l4/pkg/l4re_c/util/include/cap.h diff --git a/kernel/fiasco/src/kern/arm/bsp/omap3/boot_mp-arm-omap4.cpp b/kernel/fiasco/src/kern/arm/bsp/omap3/boot_mp-arm-omap4.cpp deleted file mode 100644 index e3cf796c5..000000000 --- a/kernel/fiasco/src/kern/arm/bsp/omap3/boot_mp-arm-omap4.cpp +++ /dev/null @@ -1,60 +0,0 @@ -INTERFACE [arm && mp && omap4]: - -#include "types.h" - -class Boot_mp -{ -}; - -IMPLEMENTATION [arm && mp && omap4]: - -#include "io.h" -#include "kmem.h" - -PRIVATE -void -Boot_mp::aux(unsigned cmd, Mword arg0, Mword arg1) -{ - register unsigned long r0 asm("r0") = arg0; - register unsigned long r1 asm("r1") = arg1; - register unsigned long r12 asm("r12") = cmd; - - asm volatile("dsb; smc #0" - : : "r" (r0), "r" (r1), "r" (r12) - : "r2", "r3", "r4", "r5", "r6", - "r7", "r8", "r9", "r10", "r11", "lr", "memory"); -} - -PUBLIC -void -Boot_mp::start_ap_cpus(Address phys_tramp_mp_addr) -{ - // two possibilities available, the memory mapped only in later board - // revisions - if (1) - { - enum { - AUX_CORE_BOOT_0 = 0x104, - AUX_CORE_BOOT_1 = 0x105, - }; - aux(AUX_CORE_BOOT_1, phys_tramp_mp_addr, 0); - asm volatile("dsb; sev" : : : "memory"); - aux(AUX_CORE_BOOT_0, 0x200, 0xfffffdff); - } - else - { - enum { - AUX_CORE_BOOT_0 = Kmem::Devices2_map_base + 0x81800, - AUX_CORE_BOOT_1 = Kmem::Devices2_map_base + 0x81804, - }; - Io::write(phys_tramp_mp_addr, AUX_CORE_BOOT_1); - asm volatile("dsb; sev" : : : "memory"); - Io::write((Io::read(AUX_CORE_BOOT_0) & ~0xfffffdff) | 0x200, - AUX_CORE_BOOT_0); - } -} - -PUBLIC -void -Boot_mp::cleanup() -{} diff --git a/kernel/fiasco/src/kern/arm/bsp/realview/boot_mp-arm-realview.cpp b/kernel/fiasco/src/kern/arm/bsp/realview/boot_mp-arm-realview.cpp deleted file mode 100644 index 2cf7be7b1..000000000 --- a/kernel/fiasco/src/kern/arm/bsp/realview/boot_mp-arm-realview.cpp +++ /dev/null @@ -1,30 +0,0 @@ -INTERFACE [arm && mp && realview]: - -#include "types.h" - -class Boot_mp -{ -}; - -IMPLEMENTATION [arm && mp && realview]: - -#include "io.h" -#include "ipi.h" -#include "platform.h" - -PUBLIC -void -Boot_mp::start_ap_cpus(Address phys_tramp_mp_addr) -{ - // set physical start address for AP CPUs - Platform::write(Platform::Sys::Flags_clr, 0xffffffff); - Platform::write(Platform::Sys::Flags, phys_tramp_mp_addr); - - // wake up AP CPUs, always from CPU 0 - Ipi::bcast(Ipi::Global_request, 0); -} - -PUBLIC -void -Boot_mp::cleanup() -{} diff --git a/kernel/fiasco/src/kern/arm/bsp/tegra2/boot_mp-arm-tegra2.cpp b/kernel/fiasco/src/kern/arm/bsp/tegra2/boot_mp-arm-tegra2.cpp deleted file mode 100644 index 8430399b5..000000000 --- a/kernel/fiasco/src/kern/arm/bsp/tegra2/boot_mp-arm-tegra2.cpp +++ /dev/null @@ -1,48 +0,0 @@ -INTERFACE [arm && mp && tegra2]: - -#include "mem_layout.h" - -class Boot_mp -{ -private: - enum - { - Reset_vector_addr = Mem_layout::Devices1_map_base + 0xf100, - Clk_rst_ctrl_clk_cpu_cmplx = Mem_layout::Devices1_map_base + 0x604c, - Clk_rst_ctrl_rst_cpu_cmplx_clr = Mem_layout::Devices1_map_base + 0x6344, - Unhalt_addr = Mem_layout::Devices1_map_base + 0x7014, - }; - - Mword _orig_reset_vector; -}; - -IMPLEMENTATION [arm && mp && tegra2]: - -#include "io.h" - -PUBLIC -void -Boot_mp::start_ap_cpus(Address phys_reset_vector) -{ - // remember original reset vector - _orig_reset_vector = Io::read(Reset_vector_addr); - - // set (temporary) new reset vector - Io::write(phys_reset_vector, Reset_vector_addr); - - // clocks on other cpu - Mword r = Io::read(Clk_rst_ctrl_clk_cpu_cmplx); - Io::write(r & ~(1 << 9), Clk_rst_ctrl_clk_cpu_cmplx); - Io::write((1 << 13) | (1 << 9) | (1 << 5) | (1 << 1), - Clk_rst_ctrl_rst_cpu_cmplx_clr); - - // kick cpu1 - Io::write(0, Unhalt_addr); -} - -PUBLIC -void -Boot_mp::cleanup() -{ - Io::write(_orig_reset_vector, Reset_vector_addr); -} diff --git a/kernel/fiasco/src/kern/arm/logdefs.h b/kernel/fiasco/src/kern/arm/logdefs.h deleted file mode 100644 index 7e46d2bc7..000000000 --- a/kernel/fiasco/src/kern/arm/logdefs.h +++ /dev/null @@ -1,238 +0,0 @@ -#ifndef LOGDEFS_H -#define LOGDEFS_H - -// ### How to create a tracebuffer entry ### -// -// If you only need a temporary debugging aid then you can use one of -// the standard kernel logging events: -// -// LOG_MSG(Context *context, const char *msg) -// - context is something like context_of(this) or current_context() -// or 0 if there is no context available -// - msg should be displayed in the tracebuffer view -// -// LOG_MSG_3VAL(Context *context, const char *msg, -// Mword val1, Mword val2, Mword val3) -// - context and msg can be used the same way LOG_MSG does -// - val1, val2, and val3 are values that will be displayed in -// the tracebuffer view as hexadecimal values -// -// If you want to create a permanent log event xyz, you have to follow -// these instructions: -// - create enum Log_event_xyz (see jdb_ktrace.cpp) -// - create class Tb_entry_xyz derived from Tb_entry (see tb_entry.cpp) -// with an appropriate ::set method and with accessor methods -// - create function formatter_xyz (see tb_entry_output.cpp) and don't -// forget to register it (add an appropriate line to init_formatters) -// - create macro LOG_XYZ (see the following example) -// #define LOG_XYZ -// BEGIN_LOG_EVENT(log_xyz) -// Lock_guard guard (&cpu_lock); -// Tb_entry_xyz *tb = -// static_cast(Jdb_tbuf::new_entry()); -// tb->set (this, ) -// Jdb_tbuf::commit_entry(); -// END_LOG_EVENT -// (grabbing the cpu_lock isn't necessary if it is still grabbed) -// - create an empty macro declaration for CONFIG_JDB_LOGGING=n -// - insert the macro call into the code -// - WARNING: permanent log events should _not_ be placed into an inline -// function! -// - add -// DECLARE_PATCH (lp, log_xyz); -// static Log_event le(, -// Log_event_xyz, 1, &lp); -// and create an entry le for Jdb_tbuf_events::log_events[] -// (see jdb_tbuf_events.cpp) - -#include "globalconfig.h" - -#if defined(CONFIG_JDB) - -#include "globals.h" -#include "jdb_tbuf.h" -#include "cpu_lock.h" -#include "lock_guard.h" -#include "processor.h" - -#define LOG_CONTEXT_SWITCH \ - BEGIN_LOG_EVENT("Context switch", "csw", 0) \ - Tb_entry_ctx_sw *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set(this, space(), regs()->ip(), t, t_orig, \ - t_orig->lock_cnt(), current_sched(), \ - current_sched() ? current_sched()->prio() : 0, \ - (Mword)__builtin_return_address(0)); \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - -#define LOG_TRAP \ - BEGIN_LOG_EVENT("Exceptions", "exc", 0) \ - Tb_entry_trap *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set(current_thread(), ts); \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - -#define LOG_TRAP_N(n) \ - BEGIN_LOG_EVENT("Exception n", "exc", 0) \ - Tb_entry_trap *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - Mword ip = (Mword)(__builtin_return_address(0)); \ - tb->set(current(), ip, n); \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - -#define LOG_PF_RES_USER \ - BEGIN_LOG_EVENT("Page-fault results", "pfr", 0) \ - Tb_entry_pf_res *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set(this, regs()->ip(), pfa, err, ret); \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - -#define LOG_SCHED_SAVE(cs) \ - BEGIN_LOG_EVENT("Scheduling context save", "sch", 0) \ - Tb_entry_sched *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set (current(), 0, 0, \ - cs->context(), \ - 0, \ - cs->prio(), \ - cs->left(), \ - cs->quantum()); \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - -#define LOG_SCHED_LOAD(cs) \ - BEGIN_LOG_EVENT("Scheduling context load", "sch", 0) \ - Tb_entry_sched *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set (current(), 0, 1, \ - cs->context(), \ - 0, \ - cs->prio(), \ - cs->left(), \ - cs->quantum()); \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - -#define LOG_SCHED_INVALIDATE \ - BEGIN_LOG_EVENT("Schduling context invalidate", "sch", 0) \ - Tb_entry_sched *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set (current(), current()->regs()->ip(), 2, \ - current_sched()->context(), \ - current_sched()->id(), \ - current_sched()->prio(), \ - timeslice_timeout.cpu(cpu())->get_timeout(Kip::k()->clock), \ - current_sched()->quantum()); \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - -#define LOG_SEND_PREEMPTION \ - BEGIN_LOG_EVENT("Preemption events", "pre", 0) \ - Lock_guard guard (&cpu_lock); \ - Tb_entry_preemption *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set (context_of(this), _receiver.raw(), current()->regs()->ip()); \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - -/* - * Kernel instrumentation macro used by fm3. Do not remove! - */ -#define LOG_MSG(context, text) \ - do { \ - /* The cpu_lock is needed since virq::hit() depends on it */ \ - Lock_guard guard (&cpu_lock); \ - Tb_entry_ke *tb = static_cast(Jdb_tbuf::new_entry()); \ - tb->set_const(context, Proc::program_counter(), text); \ - Jdb_tbuf::commit_entry(); \ - } while (0) - -/* - * Kernel instrumentation macro used by fm3. Do not remove! - */ -#define LOG_MSG_3VAL(context, text, v1, v2, v3) \ - do { \ - /* The cpu_lock is needed since virq::hit() depends on it */ \ - Lock_guard guard (&cpu_lock); \ - Tb_entry_ke_reg *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set_const(context, Proc::program_counter(), text, v1, v2, v3); \ - Jdb_tbuf::commit_entry(); \ - } while (0) - - -#define LOG_TRACE(name, sc, ctx, fmt, code...) \ - BEGIN_LOG_EVENT(name, sc, fmt) \ - Tb_entry *tbe = Jdb_tbuf::new_entry(); \ - tbe->set_global(__do_log__, ctx, Proc::program_counter()); \ - code ; \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - - -#else - -#define LOG_TRACE(name, sc, ctx, fmt, code...) do { } while (0) -#define LOG_CONTEXT_SWITCH do { } while (0) -#define LOG_TRAP do { } while (0) -#define LOG_TRAP_N(n) do { } while (0) -#define LOG_PF_RES_USER do { } while (0) -#define LOG_SCHED do { } while (0) -#define LOG_SCHED_SAVE(n) do { } while (0) -#define LOG_SCHED_LOAD(n) do { } while (0) -#define LOG_SCHED_INVALIDATE do { } while (0) -#define LOG_SEND_PREEMPTION do { } while (0) - -#endif // CONFIG_JDB - -#if defined(CONFIG_JDB) && defined(CONFIG_JDB_ACCOUNTING) - -#error ARM does not have CONFIG_JDB_ACCOUNTING - -#define CNT_CONTEXT_SWITCH \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_context_switch]++; -#define CNT_ADDR_SPACE_SWITCH \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_addr_space_switch]++; -#define CNT_SHORTCUT_FAILED \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_shortcut_failed]++; -#define CNT_SHORTCUT_SUCCESS \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_shortcut_success]++; -#define CNT_IRQ \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_irq]++; -#define CNT_IPC_LONG \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_ipc_long]++; -#define CNT_PAGE_FAULT \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_page_fault]++; -#define CNT_IO_FAULT \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_io_fault]++; -#define CNT_TASK_CREATE \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_task_create]++; -#define CNT_SCHEDULE \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_schedule]++; -#define CNT_IOBMAP_TLB_FLUSH \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_iobmap_tlb_flush]++; -#define CNT_EXC_IPC \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_exc_ipc]++; - -#else - -#define CNT_CONTEXT_SWITCH do { } while (0) -#define CNT_ADDR_SPACE_SWITCH do { } while (0) -#define CNT_SHORTCUT_FAILED do { } while (0) -#define CNT_SHORTCUT_SUCCESS do { } while (0) -#define CNT_IRQ do { } while (0) -#define CNT_IPC_LONG do { } while (0) -#define CNT_PAGE_FAULT do { } while (0) -#define CNT_IO_FAULT do { } while (0) -#define CNT_TASK_CREATE do { } while (0) -#define CNT_SCHEDULE do { } while (0) -#define CNT_IOBMAP_TLB_FLUSH do { } while (0) -#define CNT_EXC_IPC do { } while (0) - -#endif // CONFIG_JDB && CONFIG_JDB_ACCOUNTING - -#endif diff --git a/kernel/fiasco/src/kern/ia32/logdefs.h b/kernel/fiasco/src/kern/ia32/logdefs.h deleted file mode 100644 index 7713a55c0..000000000 --- a/kernel/fiasco/src/kern/ia32/logdefs.h +++ /dev/null @@ -1,240 +0,0 @@ -#ifndef LOGDEFS_H -#define LOGDEFS_H - -// ### How to create a tracebuffer entry ### -// -// If you only need a temporary debugging aid then you can use one of -// the standard kernel logging events: -// -// LOG_MSG(Context *context, const char *msg) -// - context is something like context_of(this) or current_context() -// or 0 if there is no context available -// - msg should be displayed in the tracebuffer view -// -// LOG_MSG_3VAL(Context *context, const char *msg, -// Mword val1, Mword val2, Mword val3) -// - context and msg can be used the same way LOG_MSG does -// - val1, val2, and val3 are values that will be displayed in -// the tracebuffer view as hexadecimal values -// -// If you want to create a permanent log event xyz, you have to follow -// these instructions: -// - create enum Log_event_xyz (see jdb_ktrace.cpp) -// - create class Tb_entry_xyz derived from Tb_entry (see tb_entry.cpp) -// with an appropriate ::set method and with accessor methods -// - create function formatter_xyz (see tb_entry_output.cpp) and don't -// forget to register it (add an appropriate line to init_formatters) -// - create macro LOG_XYZ (see the following example) -// #define LOG_XYZ -// BEGIN_LOG_EVENT(log_xyz) -// Lock_guard guard (&cpu_lock); -// Tb_entry_xyz *tb = -// static_cast(Jdb_tbuf::new_entry()); -// tb->set (this, ) -// Jdb_tbuf::commit_entry(); -// END_LOG_EVENT -// (grabbing the cpu_lock isn't necessary if it is still grabbed) -// - create an empty macro declaration for CONFIG_JDB_LOGGING=n -// - insert the macro call into the code -// - WARNING: permanent log events should _not_ be placed into an inline -// function! -// - add -// DECLARE_PATCH (lp, log_xyz); -// static Log_event le(, -// Log_event_xyz, 1, &lp); -// and create an entry le for Jdb_tbuf_events::log_events[] -// (see jdb_tbuf_events.cpp) - -#include "globalconfig.h" - -#if defined(CONFIG_JDB) - -#include "globals.h" -#include "jdb_tbuf.h" -#include "cpu_lock.h" -#include "lock_guard.h" -#include "processor.h" - -#define LOG_CONTEXT_SWITCH \ - BEGIN_LOG_EVENT("Context switch", "csw", 0) \ - Tb_entry_ctx_sw *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set(this, space(), regs()->ip_syscall_page_user(), t, t_orig, \ - t_orig->lock_cnt(), current_sched(), \ - current_sched() ? current_sched()->prio() : 0, \ - (Mword)__builtin_return_address(0)); \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - - -#define LOG_TRAP \ - BEGIN_LOG_EVENT("Exceptions", "exc", 0) \ - if (ts->_trapno != 1 && ts->_trapno != 3) \ - { \ - Tb_entry_trap *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set(this, ts->ip(), ts); \ - Jdb_tbuf::commit_entry(); \ - } \ - END_LOG_EVENT - -#define LOG_TRAP_N(n) \ - BEGIN_LOG_EVENT("Exception n", "exc", 0) \ - Tb_entry_trap *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - Mword ip = (Mword)(__builtin_return_address(0)); \ - tb->set(current(), ip, n); \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - -#define LOG_PF_RES_USER \ - BEGIN_LOG_EVENT("Page-fault results", "pfr", 0) \ - Tb_entry_pf_res *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set(this, regs()->ip_syscall_page_user(), pfa, err, ret); \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - -#define LOG_SCHED_SAVE(cs) \ - BEGIN_LOG_EVENT("Scheduling context save", "sch", 0) \ - Tb_entry_sched *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set (current(), 0, 0, \ - cs->context(), \ - 0, \ - cs->prio(), \ - cs->left(), \ - cs->quantum()); \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - -#define LOG_SCHED_LOAD(cs) \ - BEGIN_LOG_EVENT("Scheduling context load", "sch", 0) \ - Tb_entry_sched *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set (current(), 0, 1, \ - cs->context(), \ - 0, \ - cs->prio(), \ - cs->left(), \ - cs->quantum()); \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - -#define LOG_SCHED_INVALIDATE \ - BEGIN_LOG_EVENT("Schduling context invalidate", "sch", 0) \ - Tb_entry_sched *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set (current(), current()->regs()->ip_syscall_page_user(), 2, \ - current_sched()->owner(), \ - current_sched()->id(), \ - current_sched()->prio(), \ - timeslice_timeout.cpu(cpu())->get_timeout(Kip::k()->clock), \ - current_sched()->quantum()); \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - -#define LOG_SEND_PREEMPTION \ - BEGIN_LOG_EVENT("Preemption events", "pre", 0) \ - Lock_guard guard (&cpu_lock); \ - Tb_entry_preemption *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set (context_of(this), _receiver.raw(), current()->regs()->ip_syscall_page_user());\ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - -/* - * Kernel instrumentation macro used by fm3. Do not remove! - */ -#define LOG_MSG(context, text) \ - do { \ - /* The cpu_lock is needed since virq::hit() depends on it */ \ - Lock_guard guard (&cpu_lock); \ - Tb_entry_ke *tb = static_cast(Jdb_tbuf::new_entry()); \ - tb->set_const(context, Proc::program_counter(), text); \ - Jdb_tbuf::commit_entry(); \ - } while (0) - -/* - * Kernel instrumentation macro used by fm3. Do not remove! - */ -#define LOG_MSG_3VAL(context, text, v1, v2, v3) \ - do { \ - /* The cpu_lock is needed since virq::hit() depends on it */ \ - Lock_guard guard (&cpu_lock); \ - Tb_entry_ke_reg *tb = \ - static_cast(Jdb_tbuf::new_entry()); \ - tb->set_const(context, Proc::program_counter(), text, v1, v2, v3); \ - Jdb_tbuf::commit_entry(); \ - } while (0) - - -#define LOG_TRACE(name, sc, ctx, fmt, code...) \ - BEGIN_LOG_EVENT(name, sc, fmt) \ - Tb_entry *tbe = Jdb_tbuf::new_entry(); \ - tbe->set_global(__do_log__, ctx, Proc::program_counter()); \ - code; \ - Jdb_tbuf::commit_entry(); \ - END_LOG_EVENT - - -#else - -#define LOG_TRACE(name, sc, ctx, fmt, code...) do { } while (0) -#define LOG_CONTEXT_SWITCH do { } while (0) -#define LOG_TRAP do { } while (0) -#define LOG_TRAP_N(n) do { } while (0) -#define LOG_PF_RES_USER do { } while (0) -#define LOG_SCHED do { } while (0) -#define LOG_SCHED_SAVE(n) do { } while (0) -#define LOG_SCHED_LOAD(n) do { } while (0) -#define LOG_SCHED_INVALIDATE do { } while (0) -#define LOG_SEND_PREEMPTION do { } while (0) - -#endif // CONFIG_JDB - -#if defined(CONFIG_JDB) && defined(CONFIG_JDB_ACCOUNTING) - -#define CNT_CONTEXT_SWITCH \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_context_switch]++; -#define CNT_ADDR_SPACE_SWITCH \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_addr_space_switch]++; -#define CNT_SHORTCUT_FAILED \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_shortcut_failed]++; -#define CNT_SHORTCUT_SUCCESS \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_shortcut_success]++; -#define CNT_IRQ \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_irq]++; -#define CNT_IPC_LONG \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_ipc_long]++; -#define CNT_PAGE_FAULT \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_page_fault]++; -#define CNT_IO_FAULT \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_io_fault]++; -#define CNT_TASK_CREATE \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_task_create]++; -#define CNT_SCHEDULE \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_schedule]++; -#define CNT_IOBMAP_TLB_FLUSH \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_iobmap_tlb_flush]++; -#define CNT_EXC_IPC \ - Jdb_tbuf::status()->kerncnts[Kern_cnt_exc_ipc]++; - -#else - -#define CNT_CONTEXT_SWITCH do { } while (0) -#define CNT_ADDR_SPACE_SWITCH do { } while (0) -#define CNT_SHORTCUT_FAILED do { } while (0) -#define CNT_SHORTCUT_SUCCESS do { } while (0) -#define CNT_IRQ do { } while (0) -#define CNT_IPC_LONG do { } while (0) -#define CNT_PAGE_FAULT do { } while (0) -#define CNT_IO_FAULT do { } while (0) -#define CNT_TASK_CREATE do { } while (0) -#define CNT_SCHEDULE do { } while (0) -#define CNT_IOBMAP_TLB_FLUSH do { } while (0) -#define CNT_EXC_IPC do { } while (0) - -#endif // CONFIG_JDB && CONFIG_JDB_ACCOUNTING - -#endif diff --git a/kernel/fiasco/src/kern/tb_entry_output.cpp b/kernel/fiasco/src/kern/tb_entry_output.cpp deleted file mode 100644 index 4e0da8e1e..000000000 --- a/kernel/fiasco/src/kern/tb_entry_output.cpp +++ /dev/null @@ -1,526 +0,0 @@ -IMPLEMENTATION: - -#include -#include -#include -#include - -#include "config.h" -#include "jdb_symbol.h" -#include "jdb_tbuf_output.h" -#include "jdb_util.h" -#include "static_init.h" -#include "tb_entry.h" -#include "thread.h" - -static __attribute__((format(printf, 3, 4))) -void -my_snprintf(char *&buf, int &maxlen, const char *format, ...) -{ - int len; - va_list list; - - if (maxlen<=0) - return; - - va_start(list, format); - len = vsnprintf(buf, maxlen, format, list); - va_end(list); - - if (len<0 || len>=maxlen) - len = maxlen-1; - - buf += len; - maxlen -= len; -} - - -// timeout => x.x{ -static -void -format_timeout(Mword us, char *&buf, int &maxlen) -{ - if (us >= 1000000000) // =>100s - my_snprintf(buf, maxlen, ">99s"); - else if (us >= 10000000) // >=10s - my_snprintf(buf, maxlen, "%lds", us/1000000); - else if (us >= 1000000) // >=1s - my_snprintf(buf, maxlen, "%ld.%lds", us/1000000, (us%1000000)/100000); - else if (us >= 10000) // 10ms - my_snprintf(buf, maxlen, "%ldm", us/1000); - else if (us >= 1000) // 1ms - my_snprintf(buf, maxlen, "%ld.%ldm", us/1000, (us%1000)/100); - else - my_snprintf(buf, maxlen, "%ld%c", us, Config::char_micro); -} - -template< typename T > -static -char const * -get_ipc_type(T e) -{ - switch (e->ipc_type()) - { - case L4_obj_ref::Ipc_call: return "call"; - case L4_obj_ref::Ipc_call_ipc: return "call ipc"; - case L4_obj_ref::Ipc_send: return "send"; - case L4_obj_ref::Ipc_recv: return "recv"; - case L4_obj_ref::Ipc_send_and_wait: return "snd wait"; - case L4_obj_ref::Ipc_reply_and_wait: return "repl"; - case L4_obj_ref::Ipc_wait: return "wait"; - default: return "unk ipc"; - } -} - -static char const * const __tag_interpreter_strings_l4re[] = { - "ds", // 0 - "name", - "parent", - "goos", - "ma", - "rm", // 5 - "ev", - }; -static char const * const __tag_interpreter_strings_fiasco[] = { - "Kirq", // -1 - "Kpf", - "Kpreempt", - "Ksysexc", - "Kexc", // -5 - "Ksigma", - 0, - "Kiopf", - "Kcapfault", - 0, // -10 - "Ktask", - "Kthread", - "Klog", - "Ksched", - "Kfactory", // -15 - "Kvm", - 0, - 0, - 0, - "Ksem", // -20 - "Kmeta", - }; - -static -char const * -tag_to_string(L4_msg_tag const &tag) -{ - if (0x4000 <= tag.proto() && tag.proto() <= 0x4006) - return __tag_interpreter_strings_l4re[tag.proto() - 0x4000]; - if (-21L <= tag.proto() && tag.proto() <= -1) - return __tag_interpreter_strings_fiasco[-tag.proto() - 1]; - return 0; -} - -static -void -tag_interpreter_snprintf(char *&buf, int &maxlen, L4_msg_tag const &tag) -{ - int len; - char const *s; - - if (maxlen<=0) - return; - - s = tag_to_string(tag); - if (s) - len = snprintf(buf, maxlen, "%s%04lx", s, tag.raw() & 0xffff); - else - len = snprintf(buf, maxlen, L4_PTR_FMT, tag.raw()); - - if (len<0 || len>=maxlen) - len = maxlen-1; - - buf += len; - maxlen -= len; -} - -// ipc / irq / shortcut success -static -unsigned -formatter_ipc(Tb_entry *tb, const char *tidstr, unsigned tidlen, - char *buf, int maxlen) -{ - Tb_entry_ipc *e = static_cast(tb); - unsigned char type = e->ipc_type(); - if (!type) - type = L4_obj_ref::Ipc_call_ipc; - - // ipc operation / shortcut succeeded/failed - const char *m = get_ipc_type(e); - - my_snprintf(buf, maxlen, "%s: ", (e->type()==Tbuf_ipc) ? "ipc" : "sc "); - my_snprintf(buf, maxlen, "%s%-*s %s->", - /*e->dst().next_period() ? "[NP] " :*/ "", tidlen, tidstr, m); - - // print destination id - if (e->dst().special()) - my_snprintf(buf, maxlen, "[C:INV] DID=%lx", e->dbg_id()); - else - my_snprintf(buf, maxlen, "[C:%lx] DID=%lx", e->dst().raw(), e->dbg_id()); - - my_snprintf(buf, maxlen, " L=%lx", e->label()); - - // print mwords if have send part - if (type & L4_obj_ref::Ipc_send) - { - my_snprintf(buf, maxlen, " ["); - - tag_interpreter_snprintf(buf, maxlen, e->tag()); - - my_snprintf(buf, maxlen, "] (" L4_PTR_FMT "," L4_PTR_FMT ")", - e->dword(0), e->dword(1)); - } - - my_snprintf(buf, maxlen, " TO="); - L4_timeout_pair to = e->timeout(); - if (type & L4_obj_ref::Ipc_send) - { - if (to.snd.is_absolute()) - { - // absolute send timeout - Unsigned64 end = 0; // FIXME: to.snd.microsecs_abs (e->kclock()); - format_timeout((Mword)(end > e->kclock() ? end-e->kclock() : 0), - buf, maxlen); - } - else - { - // relative send timeout - if (to.snd.is_never()) - my_snprintf(buf, maxlen, "INF"); - else if (to.snd.is_zero()) - my_snprintf(buf, maxlen, "0"); - else - format_timeout((Mword)to.snd.microsecs_rel(0), buf, maxlen); - } - } - if (type & L4_obj_ref::Ipc_send - && type & L4_obj_ref::Ipc_recv) - my_snprintf(buf, maxlen, "/"); - if (type & L4_obj_ref::Ipc_recv) - { - if (to.rcv.is_absolute()) - { - // absolute receive timeout - Unsigned64 end = 0; // FIXME: to.rcv.microsecs_abs (e->kclock()); - format_timeout((Mword)(end > e->kclock() ? end-e->kclock() : 0), - buf, maxlen); - } - else - { - // relative receive timeout - if (to.rcv.is_never()) - my_snprintf(buf, maxlen, "INF"); - else if (to.rcv.is_zero()) - my_snprintf(buf, maxlen, "0"); - else - format_timeout((Mword)to.rcv.microsecs_rel(0), buf, maxlen); - } - } - - return maxlen; -} - -// result of ipc -static -unsigned -formatter_ipc_res(Tb_entry *tb, const char *tidstr, unsigned tidlen, - char *buf, int maxlen) -{ - Tb_entry_ipc_res *e = static_cast(tb); - L4_error error; - if (e->tag().has_error()) - error = e->result(); - else - error = L4_error::None; - const char *m = "answ"; //get_ipc_type(e); - - my_snprintf(buf, maxlen, " %s%-*s %s [%08lx] L=%lx err=%lx (%s) (%lx,%lx) ", - e->is_np() ? "[np] " : "", - tidlen, tidstr, m, e->tag().raw(), e->from(), - error.raw(), error.str_error(), e->dword(0), - e->dword(1)); - - return maxlen; -} - -IMPLEMENTATION: - -#include "kobject_dbg.h" - -// pagefault -static -unsigned -formatter_pf(Tb_entry *tb, const char *tidstr, unsigned tidlen, - char *buf, int maxlen) -{ - Tb_entry_pf *e = static_cast(tb); - char ip_buf[32]; - - snprintf(ip_buf, sizeof(ip_buf), L4_PTR_FMT, e->ip()); - my_snprintf(buf, maxlen, "pf: %-*s pfa=" L4_PTR_FMT " ip=%s (%c%c) spc=%p", - tidlen, tidstr, e->pfa(), e->ip() ? ip_buf : "unknown", - !PF::is_read_error(e->error()) ? (e->error() & 4 ? 'w' : 'W') - : (e->error() & 4 ? 'r' : 'R'), - !PF::is_translation_error(e->error()) ? 'p' : '-', - e->space()); - - return maxlen; -} - -// pagefault result -static -unsigned -formatter_pf_res(Tb_entry *tb, const char *tidstr, unsigned tidlen, - char *buf, int maxlen) -{ - Tb_entry_pf_res *e = static_cast(tb); - - // e->ret contains only an error code - // e->err contains only up to 3 dwords - my_snprintf(buf, maxlen, " %-*s pfa=" L4_PTR_FMT " dope=%02lx (%s%s) " - "err=%04lx (%s%s)", - tidlen, tidstr, e->pfa(), - e->ret().raw(), e->ret().error() ? "L4_IPC_" : "", - e->ret().str_error(), - e->err().raw(), e->err().error() ? "L4_IPC_" : "", - e->err().str_error()); - - return maxlen; -} - -// kernel event (enter_kdebug("*...")) -static -unsigned -formatter_ke(Tb_entry *tb, const char *tidstr, unsigned tidlen, - char *buf, int maxlen) -{ - Tb_entry_ke *e = static_cast(tb); - char ip_buf[32]; - - snprintf(ip_buf, sizeof(ip_buf), " @ " L4_PTR_FMT, e->ip()); - my_snprintf(buf, maxlen, "ke: %-*s \"%s\"%s", - tidlen, tidstr, e->msg(), e->ip() ? ip_buf : ""); - - return maxlen; -} - -// kernel event (enter_kdebug_verb("*+...", val1, val2, val3)) -static -unsigned -formatter_ke_reg(Tb_entry *tb, const char *tidstr, unsigned tidlen, - char *buf, int maxlen) -{ - Tb_entry_ke_reg *e = static_cast(tb); - - char ip_buf[32]; - snprintf(ip_buf, sizeof(ip_buf), " @ " L4_PTR_FMT, e->ip()); - my_snprintf(buf, maxlen, "ke: %-*s \"%s\" " - L4_PTR_FMT " " L4_PTR_FMT " " L4_PTR_FMT "%s", - tidlen, tidstr, e->msg(), e->val1(), e->val2(), e->val3(), - e->ip() ? ip_buf : ""); - - return maxlen; -} - - -// breakpoint -static -unsigned -formatter_bp(Tb_entry *tb, const char *tidstr, unsigned tidlen, - char *buf, int maxlen) -{ - Tb_entry_bp *e = static_cast(tb); - - my_snprintf(buf, maxlen, "b%c: %-*s @ " L4_PTR_FMT " ", - "iwpa"[e->mode() & 3], tidlen, tidstr, e->ip()); - switch (e->mode() & 3) - { - case 1: - case 3: - switch (e->len()) - { - case 1: - my_snprintf(buf, maxlen, "[" L4_PTR_FMT "]=%02lx", - e->addr(), e->value()); - break; - case 2: - my_snprintf(buf, maxlen, "[" L4_PTR_FMT "]=%04lx", - e->addr(), e->value()); - break; - case 4: - my_snprintf(buf, maxlen, "[" L4_PTR_FMT "]=" L4_PTR_FMT, - e->addr(), e->value()); - break; - } - break; - case 2: - my_snprintf(buf, maxlen, "[" L4_PTR_FMT "]", e->addr()); - break; - } - - return maxlen; -} - -// context switch -static -unsigned -formatter_ctx_switch(Tb_entry *tb, const char *tidstr, unsigned tidlen, - char *buf, int maxlen) -{ - char symstr[24], spcstr[16] = ""; - Tb_entry_ctx_sw *e = static_cast(tb); - - Context *sctx = 0; - Mword sctxid = ~0UL; - Mword dst; - Mword dst_orig; - - sctx = e->from_sched()->context(); - sctxid = static_cast(sctx)->dbg_id(); - - dst = static_cast(e->dst())->dbg_id(); - dst_orig = static_cast(e->dst_orig())->dbg_id(); - - Address addr = e->kernel_ip(); - - if (!Jdb_symbol::match_addr_to_symbol_fuzzy(&addr, 0 /*kernel*/, - symstr, sizeof(symstr))) - snprintf(symstr, sizeof(symstr), L4_PTR_FMT, e->kernel_ip()); - - my_snprintf(buf, maxlen, " %-*s%s '%02lx", - tidlen, tidstr, spcstr, e->from_prio()); - if (sctx != e->ctx()) - my_snprintf(buf, maxlen, "(%lx)", sctxid); - - my_snprintf(buf, maxlen, " ==> %lx ", dst); - - if (dst != dst_orig || e->lock_cnt()) - my_snprintf(buf, maxlen, "("); - - if (dst != dst_orig) - my_snprintf(buf, maxlen, "want %lx", - dst_orig); - - if (dst != dst_orig && e->lock_cnt()) - my_snprintf(buf, maxlen, " "); - - if (e->lock_cnt()) - my_snprintf(buf, maxlen, "lck %ld", e->lock_cnt()); - - if (dst != dst_orig || e->lock_cnt()) - my_snprintf(buf, maxlen, ") "); - - my_snprintf(buf, maxlen, " krnl %s", symstr); - - return maxlen; -} - - -// trap -static -unsigned -formatter_trap(Tb_entry *tb, const char *tidstr, unsigned tidlen, - char *buf, int maxlen) -{ - Tb_entry_trap *e = static_cast(tb); - - if (!e->cs()) - my_snprintf(buf, maxlen, "#%02x: %-*s err=%08x @ " L4_PTR_FMT, - e->trapno(), tidlen, tidstr, e->error(), e->ip()); - else - my_snprintf(buf, maxlen, - e->trapno() == 14 - ? "#%02x: %-*s err=%04x @ " L4_PTR_FMT - " cs=%04x sp=" L4_PTR_FMT " cr2=" L4_PTR_FMT - : "#%02x: %-*s err=%04x @ " L4_PTR_FMT - " cs=%04x sp=" L4_PTR_FMT " eax=" L4_PTR_FMT, - e->trapno(), - tidlen, tidstr, e->error(), e->ip(), e->cs(), e->sp(), - e->trapno() == 14 ? e->cr2() : e->eax()); - - return maxlen; -} - -// sched -static -unsigned -formatter_sched(Tb_entry *tb, const char *tidstr, unsigned tidlen, - char *buf, int maxlen) -{ - Tb_entry_sched *e = static_cast(tb); - Thread const *_t = static_cast(e->owner()); - Mword t = ~0UL; - if (Jdb_util::is_mapped(_t)) - t = _t->dbg_id(); - - - my_snprintf(buf, maxlen, - "%-*s (ts %s) owner:%lx id:%2x, prio:%2x, left:%6ld/%-6lu", - tidlen, tidstr, - e->mode() == 0 ? "save" : - e->mode() == 1 ? "load" : - e->mode() == 2 ? "invl" : "????", - t, - e->id(), e->prio(), e->left(), e->quantum()); - - return maxlen; -} - -// preemption -static -unsigned -formatter_preemption(Tb_entry *tb, const char *tidstr, unsigned tidlen, - char *buf, int maxlen) -{ - Tb_entry_preemption *e = static_cast(tb); - Mword t = e->preempter(); - - my_snprintf(buf, maxlen, - "pre: %-*s sent to %lx", - tidlen, tidstr, t); - - return maxlen; -} - -// kernel event log binary data -static -unsigned -formatter_ke_bin(Tb_entry *tb, const char *tidstr, unsigned tidlen, - char *buf, int maxlen) -{ - Tb_entry_ke_bin *e = static_cast(tb); - char ip_buf[32]; - - snprintf(ip_buf, sizeof(ip_buf), " @ " L4_PTR_FMT, e->ip()); - my_snprintf(buf, maxlen, "ke: %-*s BINDATA %s", - tidlen, tidstr, e->ip() ? ip_buf : ""); - - return maxlen; -} - -STATIC_INITIALIZER(init_formatters); - -// register all available format functions -static FIASCO_INIT -void -init_formatters() -{ - Jdb_tbuf_output::register_ff(Tbuf_pf, formatter_pf); - Jdb_tbuf_output::register_ff(Tbuf_pf_res, formatter_pf_res); - Jdb_tbuf_output::register_ff(Tbuf_ipc, formatter_ipc); - Jdb_tbuf_output::register_ff(Tbuf_ipc_res, formatter_ipc_res); - Jdb_tbuf_output::register_ff(Tbuf_ke, formatter_ke); - Jdb_tbuf_output::register_ff(Tbuf_ke_reg, formatter_ke_reg); - Jdb_tbuf_output::register_ff(Tbuf_shortcut_succeeded, formatter_ipc); - Jdb_tbuf_output::register_ff(Tbuf_context_switch, formatter_ctx_switch); - Jdb_tbuf_output::register_ff(Tbuf_breakpoint, formatter_bp); - Jdb_tbuf_output::register_ff(Tbuf_trap, formatter_trap); - Jdb_tbuf_output::register_ff(Tbuf_sched, formatter_sched); - Jdb_tbuf_output::register_ff(Tbuf_preemption, formatter_preemption); - Jdb_tbuf_output::register_ff(Tbuf_ke_bin, formatter_ke_bin); -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/README b/l4/pkg/acpica/lib-acpi/src/acpica/README deleted file mode 100644 index 8b6f3ea90..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/README +++ /dev/null @@ -1,79 +0,0 @@ -acpica-unix ------------ - -This source release includes: - - -1) a cross-OS AML interpreter - -This is intended to allow commercial and open source operating systems -to be enabled for ACPI. OS specific code is still needed, but the -AML interpreter should greatly improve the development speed of ACPI -support. - -The AML interpreter source should be integrated into the kernel's -build process. We recommend establishing an automated method for -this, so later versions can also be incorporated easily. Please see -the documentation on the website for API and other implementation -information. - - -2) iasl, an ASL compiler/decompiler - -iasl compiles ASL (ACPI Source Language) into AML (ACPI Machine -Language). This AML is suitable for inclusion as a DSDT in system -firmware. It also can disassemble AML, for debugging purposes. - -To compile: - -cd compiler -make - -It has been compiled on Linux, but should easily port to other Unix -environments. - -Run 'iasl -h' for more information, or download the binary version for -documentation in PDF format. - - -3) acpisrc, a source code conversion tool - -acpisrc converts the standard form of the acpica source release (included -here) into a version that meets Linux coding guidelines. This consists -mainly of performing a series of string replacements and transformations -to the code. - -To compile: - -cd tools/acpisrc -make - -It has been compiled on Linux, but should easily port to other Unix -environments. - - -4) acpibin, an AML file tool - -acpibin compares AML files, dumps AML binary files to text files, -extracts binary AML from text files, and other AML file -manipulation. - -To compile: - -cd tools/acpibin -make - - -5) acpiexec, a user-space AML interpreter - -acpiexec allows the loading of ACPI tables and execution of control -methods from user space. Useful for debugging AML code and testing -the AML interpreter. - -To compile: - -cd tools/acpiexec -make - - -Thanks -- The ACPI CA Team diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/changes.txt b/l4/pkg/acpica/lib-acpi/src/acpica/changes.txt deleted file mode 100644 index d8127f24d..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/changes.txt +++ /dev/null @@ -1,9649 +0,0 @@ ----------------------------------------- -14 December 2009. Summary of changes for version 20091214: - -This release is available at www.acpica.org/downloads - -1) ACPI CA Core Subsystem: - -Enhanced automatic data type conversions for predefined name repairs. This -change expands the automatic repairs/conversions for predefined name return -values to make Integers, Strings, and Buffers fully interchangeable. Also, a -Buffer can be converted to a Package of Integers if necessary. The nsrepair.c -module was completely restructured. Lin Ming, Bob Moore. - -Implemented automatic removal of null package elements during predefined name -repairs. This change will automatically remove embedded and trailing NULL -package elements from returned package objects that are defined to contain a -variable number of sub-packages. The driver is then presented with a package -with no null elements to deal with. ACPICA BZ 819. - -Implemented a repair for the predefined _FDE and _GTM names. The expected -return value for both names is a Buffer of 5 DWORDs. This repair fixes two -possible problems (both seen in the field), where a package of integers is -returned, or a buffer of BYTEs is returned. With assistance from Jung-uk Kim. - -Implemented additional module-level code support. This change will properly -execute module-level code that is not at the root of the namespace (under a -Device object, etc.). Now executes the code within the current scope instead -of the root. ACPICA BZ 762. Lin Ming. - -Fixed possible mutex acquisition errors when running _REG methods. Fixes a -problem where mutex errors can occur when running a _REG method that is in -the same scope as a method-defined operation region or an operation region -under a module-level IF block. This type of code is rare, so the problem has -not been seen before. ACPICA BZ 826. Lin Ming, Bob Moore. - -Fixed a possible memory leak during module-level code execution. An object -could be leaked for each block of executed module-level code if the -interpreter slack mode is enabled This change deletes any implicitly returned -object from the module-level code block. Lin Ming. - -Removed messages for successful predefined repair(s). The repair mechanism -was considered too wordy. Now, messages are only unconditionally emitted if -the return object cannot be repaired. Existing messages for successful -repairs were converted to ACPI_DEBUG_PRINT messages for now. ACPICA BZ 827. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 86.6K Code, 18.2K Data, 104.8K Total - Debug Version: 162.7K Code, 50.8K Data, 213.5K Total - Current Release: - Non-Debug Version: 87.0K Code, 18.0K Data, 105.0K Total - Debug Version: 163.4K Code, 50.8K Data, 214.2K Total - -2) iASL Compiler/Disassembler and Tools: - -iASL: Fixed a regression introduced in 20091112 where intermediate .SRC files -were no longer automatically removed at the termination of the compile. - -acpiexec: Implemented the -f option to specify default region fill value. -This option specifies the value used to initialize buffers that simulate -operation regions. Default value is zero. Useful for debugging problems that -depend on a specific initial value for a region or field. - ----------------------------------------- -12 November 2009. Summary of changes for version 20091112: - -This release is available at www.acpica.org/downloads - -1) ACPI CA Core Subsystem: - -Implemented a post-order callback to AcpiWalkNamespace. The existing -interface only has a pre-order callback. This change adds an additional -parameter for a post-order callback which will be more useful for bus scans. -ACPICA BZ 779. Lin Ming. Updated the ACPICA Programmer Reference. - -Modified the behavior of the operation region memory mapping cache for -SystemMemory. Ensure that the memory mappings created for operation regions -do not cross 4K page boundaries. Crossing a page boundary while mapping -regions can cause kernel warnings on some hosts if the pages have different -attributes. Such regions are probably BIOS bugs, and this is the workaround. -Linux BZ 14445. Lin Ming. - -Implemented an automatic repair for predefined methods that must return -sorted lists. This change will repair (by sorting) packages returned by _ALR, -_PSS, and _TSS. Drivers can now assume that the packages are correctly sorted -and do not contain NULL package elements. Adds one new file, -namespace/nsrepair2.c. ACPICA BZ 784. Lin Ming, Bob Moore. - -Fixed a possible fault during predefined name validation if a return Package -object contains NULL elements. Also adds a warning if a NULL element is -followed by any non-null elements. ACPICA BZ 813, 814. Future enhancement may -include repair or removal of all such NULL elements where possible. - -Implemented additional module-level executable AML code support. This change -will execute module-level code that is not at the root of the namespace -(under a Device object, etc.) at table load time. Module-level executable AML -code has been illegal since ACPI 2.0. ACPICA BZ 762. Lin Ming. - -Implemented a new internal function to create Integer objects. This function -simplifies miscellaneous object creation code. ACPICA BZ 823. - -Reduced the severity of predefined repair messages, Warning to Info. Since -the object was successfully repaired, a warning is too severe. Reduced to an -info message for now. These messages may eventually be changed to debug-only. -ACPICA BZ 812. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 85.8K Code, 18.0K Data, 103.8K Total - Debug Version: 161.8K Code, 50.6K Data, 212.4K Total - Current Release: - Non-Debug Version: 86.6K Code, 18.2K Data, 104.8K Total - Debug Version: 162.7K Code, 50.8K Data, 213.5K Total - -2) iASL Compiler/Disassembler and Tools: - -iASL: Implemented Switch() with While(1) so that Break works correctly. This -change correctly implements the Switch operator with a surrounding While(1) -so that the Break operator works as expected. ACPICA BZ 461. Lin Ming. - -iASL: Added a message if a package initializer list is shorter than package -length. Adds a new remark for a Package() declaration if an initializer list -exists, but is shorter than the declared length of the package. Although -technically legal, this is probably a coding error and it is seen in the -field. ACPICA BZ 815. Lin Ming, Bob Moore. - -iASL: Fixed a problem where the compiler could fault after the maximum number -of errors was reached (200). - -acpixtract: Fixed a possible warning for pointer cast if the compiler warning -level set very high. - ----------------------------------------- -13 October 2009. Summary of changes for version 20091013: - -This release is available at www.acpica.org/downloads - -1) ACPI CA Core Subsystem: - -Fixed a problem where an Operation Region _REG method could be executed more -than once. If a custom address space handler is installed by the host before -the "initialize operation regions" phase of the ACPICA initialization, any -_REG methods for that address space could be executed twice. This change -fixes the problem. ACPICA BZ 427. Lin Ming. - -Fixed a possible memory leak for the Scope() ASL operator. When the exact -invocation of "Scope(\)" is executed (change scope to root), one internal -operand object was leaked. Lin Ming. - -Implemented a run-time repair for the _MAT predefined method. If the _MAT -return value is defined as a Field object in the AML, and the field -size is less than or equal to the default width of an integer (32 or 64),_MAT -can incorrectly return an Integer instead of a Buffer. ACPICA now -automatically repairs this problem. ACPICA BZ 810. - -Implemented a run-time repair for the _BIF and _BIX predefined methods. The -"OEM Information" field is often incorrectly returned as an Integer with -value zero if the field is not supported by the platform. This is due to an -ambiguity in the ACPI specification. The field should always be a string. -ACPICA now automatically repairs this problem by returning a NULL string -within the returned Package. ACPICA BZ 807. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 85.6K Code, 18.0K Data, 103.6K Total - Debug Version: 161.7K Code, 50.9K Data, 212.6K Total - Current Release: - Non-Debug Version: 85.8K Code, 18.0K Data, 103.8K Total - Debug Version: 161.8K Code, 50.6K Data, 212.4K Total - -2) iASL Compiler/Disassembler and Tools: - -Disassembler: Fixed a problem where references to external symbols that -contained one or more parent-prefixes (carats) were not handled correctly, -possibly causing a fault. ACPICA BZ 806. Lin Ming. - -Disassembler: Restructured the code so that all functions that handle -external symbols are in a single module. One new file is added, -common/dmextern.c. - -AML Debugger: Added a max count argument for the Batch command (which -executes multiple predefined methods within the namespace.) - -iASL: Updated the compiler documentation (User Reference.) Available at -http://www.acpica.org/documentation/. ACPICA BZ 750. - -AcpiXtract: Updated for Lint and other formatting changes. Close all open -files. - ----------------------------------------- -03 September 2009. Summary of changes for version 20090903: - -1) ACPI CA Core Subsystem: - -For Windows Vista compatibility, added the automatic execution of an _INI -method located at the namespace root (\_INI). This method is executed at -table load time. This support is in addition to the automatic execution of -\_SB._INI. Lin Ming. - -Fixed a possible memory leak in the interpreter for AML package objects if -the package initializer list is longer than the defined size of the package. -This apparently can only happen if the BIOS changes the package size on the -fly (seen in a _PSS object), as ASL compilers do not allow this. The -interpreter will truncate the package to the defined size (and issue an error -message), but previously could leave the extra objects undeleted if they were -pre-created during the argument processing (such is the case if the package -consists of a number of sub-packages as in the _PSS.) ACPICA BZ 805. - -Fixed a problem seen when a Buffer or String is stored to itself via ASL. -This has been reported in the field. Previously, ACPICA would zero out the -buffer/string. Now, the operation is treated as a noop. Provides Windows -compatibility. ACPICA BZ 803. Lin Ming. - -Removed an extraneous error message for ASL constructs of the form -Store(LocalX,LocalX) when LocalX is uninitialized. These curious statements -are seen in many BIOSs and are once again treated as NOOPs and no error is -emitted when they are encountered. ACPICA BZ 785. - -Fixed an extraneous warning message if a _DSM reserved method returns a -Package object. _DSM can return any type of object, so validation on the -return type cannot be performed. ACPICA BZ 802. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 85.5K Code, 18.0K Data, 103.5K Total - Debug Version: 161.6K Code, 50.9K Data, 212.5K Total - Current Release: - Non-Debug Version: 85.6K Code, 18.0K Data, 103.6K Total - Debug Version: 161.7K Code, 50.9K Data, 212.6K Total - -2) iASL Compiler/Disassembler and Tools: - -iASL: Fixed a problem with the use of the Alias operator and Resource -Templates. The correct alias is now constructed and no error is emitted. -ACPICA BZ 738. - -iASL: Implemented the -I option to specify additional search directories for -include files. Allows multiple additional search paths for include files. -Directories are searched in the order specified on the command line (after -the local directory is searched.) ACPICA BZ 800. - -iASL: Fixed a problem where the full pathname for include files was not -emitted for warnings/errors. This caused the IDE support to not work -properly. ACPICA BZ 765. - -iASL: Implemented the -@ option to specify a Windows-style response file -containing additional command line options. ACPICA BZ 801. - -AcpiExec: Added support to load multiple AML files simultaneously (such as a -DSDT and multiple SSDTs). Also added support for wildcards within the AML -pathname. These features allow all machine tables to be easily loaded and -debugged together. ACPICA BZ 804. - -Disassembler: Added missing support for disassembly of HEST table Error Bank -subtables. - ----------------------------------------- -30 July 2009. Summary of changes for version 20090730: - -The ACPI 4.0 implementation for ACPICA is complete with this release. - -1) ACPI CA Core Subsystem: - -ACPI 4.0: Added header file support for all new and changed ACPI tables. -Completely new tables are: IBFT, IVRS, MSCT, and WAET. Tables that are new -for ACPI 4.0, but have previously been supported in ACPICA are: CPEP, BERT, -EINJ, ERST, and HEST. Other newly supported tables are: UEFI and WDAT. There -have been some ACPI 4.0 changes to other existing tables. Split the large -actbl1.h header into the existing actbl2.h header. ACPICA BZ 774. - -ACPI 4.0: Implemented predefined name validation for all new names. There are -31 new names in ACPI 4.0. The predefined validation module was split into two -files. The new file is namespace/nsrepair.c. ACPICA BZ 770. - -Implemented support for so-called "module-level executable code". This is -executable AML code that exists outside of any control method and is intended -to be executed at table load time. Although illegal since ACPI 2.0, this type -of code still exists and is apparently still being created. Blocks of this -code are now detected and executed as intended. Currently, the code blocks -must exist under either an If, Else, or While construct; these are the -typical cases seen in the field. ACPICA BZ 762. Lin Ming. - -Implemented an automatic dynamic repair for predefined names that return -nested Package objects. This applies to predefined names that are defined to -return a variable-length Package of sub-packages. If the number of sub- -packages is one, BIOS code is occasionally seen that creates a simple single -package with no sub-packages. This code attempts to fix the problem by -wrapping a new package object around the existing package. These methods can -be repaired: _ALR, _CSD, _HPX, _MLS, _PRT, _PSS, _TRT, and _TSS. ACPICA BZ -790. - -Fixed a regression introduced in 20090625 for the AcpiGetDevices interface. -The _HID/_CID matching was broken and no longer matched IDs correctly. ACPICA -BZ 793. - -Fixed a problem with AcpiReset where the reset would silently fail if the -register was one of the protected I/O ports. AcpiReset now bypasses the port -validation mechanism. This may eventually be driven into the AcpiRead/Write -interfaces. - -Fixed a regression related to the recent update of the AcpiRead/Write -interfaces. A sleep/suspend could fail if the optional PM2 Control register -does not exist during an attempt to write the Bus Master Arbitration bit. -(However, some hosts already delete the code that writes this bit, and the -code may in fact be obsolete at this date.) ACPICA BZ 799. - -Fixed a problem where AcpiTerminate could fault if inadvertently called twice -in succession. ACPICA BZ 795. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 84.7K Code, 17.8K Data, 102.5K Total - Debug Version: 160.5K Code, 50.6K Data, 211.1K Total - Current Release: - Non-Debug Version: 85.5K Code, 18.0K Data, 103.5K Total - Debug Version: 161.6K Code, 50.9K Data, 212.5K Total - -2) iASL Compiler/Disassembler and Tools: - -ACPI 4.0: Implemented disassembler support for all new ACPI tables and -changes to existing tables. ACPICA BZ 775. - ----------------------------------------- -25 June 2009. Summary of changes for version 20090625: - -The ACPI 4.0 Specification was released on June 16 and is available at -www.acpi.info. ACPICA implementation of ACPI 4.0 is underway and will -continue for the next few releases. - -1) ACPI CA Core Subsystem: - -ACPI 4.0: Implemented interpreter support for the IPMI operation region -address space. Includes support for bi-directional data buffers and an IPMI -address space handler (to be installed by an IPMI device driver.) ACPICA BZ -773. Lin Ming. - -ACPI 4.0: Added changes for existing ACPI tables - FACS and SRAT. Includes -support in both the header files and the disassembler. - -Completed a major update for the AcpiGetObjectInfo external interface. -Changes include: - - Support for variable, unlimited length HID, UID, and CID strings. - - Support Processor objects the same as Devices (HID,UID,CID,ADR,STA, etc.) - - Call the _SxW power methods on behalf of a device object. - - Determine if a device is a PCI root bridge. - - Change the ACPI_BUFFER parameter to ACPI_DEVICE_INFO. -These changes will require an update to all callers of this interface. See -the updated ACPICA Programmer Reference for details. One new source file has -been added - utilities/utids.c. ACPICA BZ 368, 780. - -Updated the AcpiRead and AcpiWrite external interfaces to support 64-bit -transfers. The Value parameter has been extended from 32 bits to 64 bits in -order to support new ACPI 4.0 tables. These changes will require an update to -all callers of these interfaces. See the ACPICA Programmer Reference for -details. ACPICA BZ 768. - -Fixed several problems with AcpiAttachData. The handler was not invoked when -the host node was deleted. The data sub-object was not automatically deleted -when the host node was deleted. The interface to the handler had an unused -parameter, this was removed. ACPICA BZ 778. - -Enhanced the function that dumps ACPI table headers. All non-printable -characters in the string fields are now replaced with '?' (Signature, OemId, -OemTableId, and CompilerId.) ACPI tables with non-printable characters in -these fields are occasionally seen in the field. ACPICA BZ 788. - -Fixed a problem with predefined method repair code where the code that -attempts to repair/convert an object of incorrect type is only executed on -the first time the predefined method is called. The mechanism that disables -warnings on subsequent calls was interfering with the repair mechanism. -ACPICA BZ 781. - -Fixed a possible memory leak in the predefined validation/repair code when a -buffer is automatically converted to an expected string object. - -Removed obsolete 16-bit files from the distribution and from the current git -tree head. ACPICA BZ 776. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 83.4K Code, 17.5K Data, 100.9K Total - Debug Version: 158.9K Code, 50.0K Data, 208.9K Total - Current Release: - Non-Debug Version: 84.7K Code, 17.8K Data, 102.5K Total - Debug Version: 160.5K Code, 50.6K Data, 211.1K Total - -2) iASL Compiler/Disassembler and Tools: - -ACPI 4.0: iASL and Disassembler - implemented support for the new IPMI -operation region keyword. ACPICA BZ 771, 772. Lin Ming. - -ACPI 4.0: iASL - implemented compile-time validation support for all new -predefined names and control methods (31 total). ACPICA BZ 769. - ----------------------------------------- -21 May 2009. Summary of changes for version 20090521: - -1) ACPI CA Core Subsystem: - -Disabled the preservation of the SCI enable bit in the PM1 control register. -The SCI enable bit (bit 0, SCI_EN) is defined by the ACPI specification to be -a "preserved" bit - "OSPM always preserves this bit position", section -4.7.3.2.1. However, some machines fail if this bit is in fact preserved -because the bit needs to be explicitly set by the OS as a workaround. No -machines fail if the bit is not preserved. Therefore, ACPICA no longer -attempts to preserve this bit. - -Fixed a problem in AcpiRsGetPciRoutingTableLength where an invalid or -incorrectly formed _PRT package could cause a fault. Added validation to -ensure that each package element is actually a sub-package. - -Implemented a new interface to install or override a single control method, -AcpiInstallMethod. This interface is useful when debugging in order to repair -an existing method or to install a missing method without having to override -the entire ACPI table. See the ACPICA Programmer Reference for use and -examples. Lin Ming, Bob Moore. - -Fixed several reference count issues with the DdbHandle object that is -created from a Load or LoadTable operator. Prevent premature deletion of the -object. Also, mark the object as invalid once the table has been unloaded. -This is needed because the handle itself may not be deleted after the table -unload, depending on whether it has been stored in a named object by the -caller. Lin Ming. - -Fixed a problem with Mutex Sync Levels. Fixed a problem where if multiple -mutexes of the same sync level are acquired but then not released in strict -opposite order, the internally maintained Current Sync Level becomes confused -and can cause subsequent execution errors. ACPICA BZ 471. - -Changed the allowable release order for ASL mutex objects. The ACPI 4.0 -specification has been changed to make the SyncLevel for mutex objects more -useful. When releasing a mutex, the SyncLevel of the mutex must now be the -same as the current sync level. This makes more sense than the previous rule -(SyncLevel less than or equal). This change updates the code to match the -specification. - -Fixed a problem with the local version of the AcpiOsPurgeCache function. The -(local) cache must be locked during all cache object deletions. Andrew -Baumann. - -Updated the Load operator to use operation region interfaces. This replaces -direct memory mapping with region access calls. Now, all region accesses go -through the installed region handler as they should. - -Simplified and optimized the NsGetNextNode function. Reduced parameter count -and reduced code for this frequently used function. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 82.8K Code, 17.5K Data, 100.3K Total - Debug Version: 158.0K Code, 49.9K Data, 207.9K Total - Current Release: - Non-Debug Version: 83.4K Code, 17.5K Data, 100.9K Total - Debug Version: 158.9K Code, 50.0K Data, 208.9K Total - -2) iASL Compiler/Disassembler and Tools: - -Disassembler: Fixed some issues with DMAR, HEST, MADT tables. Some problems -with sub-table disassembly and handling invalid sub-tables. Attempt recovery -after an invalid sub-table ID. - ----------------------------------------- -22 April 2009. Summary of changes for version 20090422: - -1) ACPI CA Core Subsystem: - -Fixed a compatibility issue with the recently released I/O port protection -mechanism. For windows compatibility, 1) On a port protection violation, -simply ignore the request and do not return an exception (allow the control -method to continue execution.) 2) If only part of the request overlaps a -protected port, read/write the individual ports that are not protected. Linux -BZ 13036. Lin Ming - -Enhanced the execution of the ASL/AML BreakPoint operator so that it actually -breaks into the AML debugger if the debugger is present. This matches the -ACPI-defined behavior. - -Fixed several possible warnings related to the use of the configurable -ACPI_THREAD_ID. This type can now be configured as either an integer or a -pointer with no warnings. Also fixes several warnings in printf-like -statements for the 64-bit build when the type is configured as a pointer. -ACPICA BZ 766, 767. - -Fixed a number of possible warnings when compiling with gcc 4+ (depending on -warning options.) Examples include printf formats, aliasing, unused globals, -missing prototypes, missing switch default statements, use of non-ANSI -library functions, use of non-ANSI constructs. See generate/unix/Makefile for -a list of warning options used with gcc 3 and 4. ACPICA BZ 735. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 82.6K Code, 17.6K Data, 100.2K Total - Debug Version: 157.7K Code, 49.9K Data, 207.6K Total - Current Release: - Non-Debug Version: 82.8K Code, 17.5K Data, 100.3K Total - Debug Version: 158.0K Code, 49.9K Data, 207.9K Total - -2) iASL Compiler/Disassembler and Tools: - -iASL: Fixed a generation warning from Bison 2.3 and fixed several warnings on -the 64-bit build. - -iASL: Fixed a problem where the Unix/Linux versions of the compiler could not -correctly digest Windows/DOS formatted files (with CR/LF). - -iASL: Added a new option for "quiet mode" (-va) that produces only the -compilation summary, not individual errors and warnings. Useful for large -batch compilations. - -AcpiExec: Implemented a new option (-z) to enable a forced semaphore/mutex -timeout that can be used to detect hang conditions during execution of AML -code (includes both internal semaphores and AML-defined mutexes and events.) - -Added new makefiles for the generation of acpica in a generic unix-like -environment. These makefiles are intended to generate the acpica tools and -utilities from the original acpica git source tree structure. - -Test Suites: Updated and cleaned up the documentation files. Updated the -copyrights to 2009, affecting all source files. Use the new version of iASL -with quiet mode. Increased the number of available semaphores in the Windows -OSL, allowing the aslts to execute fully on Windows. For the Unix OSL, added -an alternate implementation of the semaphore timeout to allow aslts to -execute fully on Cygwin. - ----------------------------------------- -20 March 2009. Summary of changes for version 20090320: - -1) ACPI CA Core Subsystem: - -Fixed a possible race condition between AcpiWalkNamespace and dynamic table -unloads. Added a reader/writer locking mechanism to allow multiple concurrent -namespace walks (readers), but block a dynamic table unload until it can gain -exclusive write access to the namespace. This fixes a problem where a table -unload could (possibly catastrophically) delete the portion of the namespace -that is currently being examined by a walk. Adds a new file, utlock.c, that -implements the reader/writer lock mechanism. ACPICA BZ 749. - -Fixed a regression introduced in version 20090220 where a change to the FADT -handling could cause the ACPICA subsystem to access non-existent I/O ports. - -Modified the handling of FADT register and table (FACS/DSDT) addresses. The -FADT can contain both 32-bit and 64-bit versions of these addresses. -Previously, the 64-bit versions were favored, meaning that if both 32 and 64 -versions were valid, but not equal, the 64-bit version was used. This was -found to cause some machines to fail. Now, in this case, the 32-bit version -is used instead. This now matches the Windows behavior. - -Implemented a new mechanism to protect certain I/O ports. Provides Microsoft -compatibility and protects the standard PC I/O ports from access via AML -code. Adds a new file, hwvalid.c - -Fixed a possible extraneous warning message from the FADT support. The -message warns of a 32/64 length mismatch between the legacy and GAS -definitions for a register. - -Removed the obsolete AcpiOsValidateAddress OSL interface. This interface is -made obsolete by the port protection mechanism above. It was previously used -to validate the entire address range of an operation region, which could be -incorrect if the range included illegal ports, but fields within the -operation region did not actually access those ports. Validation is now -performed on a per-field basis instead of the entire region. - -Modified the handling of the PM1 Status Register ignored bit (bit 11.) -Ignored bits must be "preserved" according to the ACPI spec. Usually, this -means a read/modify/write when writing to the register. However, for status -registers, writing a one means clear the event. Writing a zero means preserve -the event (do not clear.) This behavior is clarified in the ACPI 4.0 spec, -and the ACPICA code now simply always writes a zero to the ignored bit. - -Modified the handling of ignored bits for the PM1 A/B Control Registers. As -per the ACPI specification, for the control registers, preserve -(read/modify/write) all bits that are defined as either reserved or ignored. - -Updated the handling of write-only bits in the PM1 A/B Control Registers. -When reading the register, zero the write-only bits as per the ACPI spec. -ACPICA BZ 443. Lin Ming. - -Removed "Linux" from the list of supported _OSI strings. Linux no longer -wants to reply true to this request. The Windows strings are the only paths -through the AML that are tested and known to work properly. - - Previous Release: - Non-Debug Version: 82.0K Code, 17.5K Data, 99.5K Total - Debug Version: 156.9K Code, 49.8K Data, 206.7K Total - Current Release: - Non-Debug Version: 82.6K Code, 17.6K Data, 100.2K Total - Debug Version: 157.7K Code, 49.9K Data, 207.6K Total - -2) iASL Compiler/Disassembler and Tools: - -Acpiexec: Split the large aeexec.c file into two new files, aehandlers.c and -aetables.c - ----------------------------------------- -20 February 2009. Summary of changes for version 20090220: - -1) ACPI CA Core Subsystem: - -Optimized the ACPI register locking. Removed locking for reads from the ACPI -bit registers in PM1 Status, Enable, Control, and PM2 Control. The lock is -not required when reading the single-bit registers. The -AcpiGetRegisterUnlocked function is no longer needed and has been removed. -This will improve performance for reads on these registers. ACPICA BZ 760. - -Fixed the parameter validation for AcpiRead/Write. Now return -AE_BAD_PARAMETER if the input register pointer is null, and AE_BAD_ADDRESS if -the register has an address of zero. Previously, these cases simply returned -AE_OK. For optional registers such as PM1B status/enable/control, the caller -should check for a valid register address before calling. ACPICA BZ 748. - -Renamed the external ACPI bit register access functions. Renamed -AcpiGetRegister and AcpiSetRegister to clarify the purpose of these -functions. The new names are AcpiReadBitRegister and AcpiWriteBitRegister. -Also, restructured the code for these functions by simplifying the code path -and condensing duplicate code to reduce code size. - -Added new functions to transparently handle the possibly split PM1 A/B -registers. AcpiHwReadMultiple and AcpiHwWriteMultiple. These two functions -now handle the split registers for PM1 Status, Enable, and Control. ACPICA BZ -746. - -Added a function to handle the PM1 control registers, AcpiHwWritePm1Control. -This function writes both of the PM1 control registers (A/B). These registers -are different than the PM1 A/B status and enable registers in that different -values can be written to the A/B registers. Most notably, the SLP_TYP bits -can be different, as per the values returned from the _Sx predefined methods. - -Removed an extra register write within AcpiHwClearAcpiStatus. This function -was writing an optional PM1B status register twice. The existing call to the -low-level AcpiHwRegisterWrite automatically handles a possibly split PM1 A/B -register. ACPICA BZ 751. - -Split out the PM1 Status registers from the FADT. Added new globals for these -registers (A/B), similar to the way the PM1 Enable registers are handled. -Instead of overloading the FADT Event Register blocks. This makes the code -clearer and less prone to error. - -Fixed the warning message for when the platform contains too many ACPI tables -for the default size of the global root table data structure. The calculation -for the truncation value was incorrect. - -Removed the ACPI_GET_OBJECT_TYPE macro. Removed all instances of this -obsolete macro, since it is now a simple reference to ->common.type. There -were about 150 invocations of the macro across 41 files. ACPICA BZ 755. - -Removed the redundant ACPI_BITREG_SLEEP_TYPE_B. This type is the same as -TYPE_A. Removed this and all related instances. Renamed SLEEP_TYPE_A to -simply SLEEP_TYPE. ACPICA BZ 754. - -Conditionally compile the AcpiSetFirmwareWakingVector64 function. This -function is only needed on 64-bit host operating systems and is thus not -included for 32-bit hosts. - -Debug output: print the input and result for invocations of the _OSI reserved -control method via the ACPI_LV_INFO debug level. Also, reduced some of the -verbosity of this debug level. Len Brown. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 82.3K Code, 17.5K Data, 99.8K Total - Debug Version: 157.3K Code, 49.8K Data, 207.1K Total - Current Release: - Non-Debug Version: 82.0K Code, 17.5K Data, 99.5K Total - Debug Version: 156.9K Code, 49.8K Data, 206.7K Total - -2) iASL Compiler/Disassembler and Tools: - -Disassembler: Decode the FADT PM_Profile field. Emit ascii names for the -various legal performance profiles. - ----------------------------------------- -23 January 2009. Summary of changes for version 20090123: - -1) ACPI CA Core Subsystem: - -Added the 2009 copyright to all module headers and signons. This affects -virtually every file in the ACPICA core subsystem, the iASL compiler, and -the tools/utilities. - -Implemented a change to allow the host to override any ACPI table, including -dynamically loaded tables. Previously, only the DSDT could be replaced by the -host. With this change, the AcpiOsTableOverride interface is called for each -table found in the RSDT/XSDT during ACPICA initialization, and also whenever -a table is dynamically loaded via the AML Load operator. - -Updated FADT flag definitions, especially the Boot Architecture flags. - -Debugger: For the Find command, automatically pad the input ACPI name with -underscores if the name is shorter than 4 characters. This enables a match -with the actual namespace entry which is itself padded with underscores. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 82.3K Code, 17.4K Data, 99.7K Total - Debug Version: 157.1K Code, 49.7K Data, 206.8K Total - Current Release: - Non-Debug Version: 82.3K Code, 17.5K Data, 99.8K Total - Debug Version: 157.3K Code, 49.8K Data, 207.1K Total - -2) iASL Compiler/Disassembler and Tools: - -Fix build error under Bison-2.4. - -Dissasembler: Enhanced FADT support. Added decoding of the Boot Architecture -flags. Now decode all flags, regardless of the FADT version. Flag output -includes the FADT version which first defined each flag. - -The iASL -g option now dumps the RSDT to a file (in addition to the FADT and -DSDT). Windows only. - ----------------------------------------- -04 December 2008. Summary of changes for version 20081204: - -1) ACPI CA Core Subsystem: - -The ACPICA Programmer Reference has been completely updated and revamped for -this release. This includes updates to the external interfaces, OSL -interfaces, the overview sections, and the debugger reference. - -Several new ACPICA interfaces have been implemented and documented in the -programmer reference: -AcpiReset - Writes the reset value to the FADT-defined reset register. -AcpiDisableAllGpes - Disable all available GPEs. -AcpiEnableAllRuntimeGpes - Enable all available runtime GPEs. -AcpiGetGpeDevice - Get the GPE block device associated with a GPE. -AcpiGbl_CurrentGpeCount - Tracks the current number of available GPEs. -AcpiRead - Low-level read ACPI register (was HwLowLevelRead.) -AcpiWrite - Low-level write ACPI register (was HwLowLevelWrite.) - -Most of the public ACPI hardware-related interfaces have been moved to a new -file, components/hardware/hwxface.c - -Enhanced the FADT parsing and low-level ACPI register access: The ACPI -register lengths within the FADT are now used, and the low level ACPI -register access no longer hardcodes the ACPI register lengths. Given that -there may be some risk in actually trusting the FADT register lengths, a run- -time option was added to fall back to the default hardcoded lengths if the -FADT proves to contain incorrect values - UseDefaultRegisterWidths. This -option is set to true for now, and a warning is issued if a suspicious FADT -register length is overridden with the default value. - -Fixed a reference count issue in NsRepairObject. This problem was introduced -in version 20081031 as part of a fix to repair Buffer objects within -Packages. Lin Ming. - -Added semaphore support to the Linux/Unix application OS-services layer -(OSL). ACPICA BZ 448. Lin Ming. - -Added the ACPI_MUTEX_TYPE configuration option to select whether mutexes will -be implemented in the OSL, or will binary semaphores be used instead. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 81.7K Code, 17.3K Data, 99.0K Total - Debug Version: 156.4K Code, 49.4K Data, 205.8K Total - Current Release: - Non-Debug Version: 82.3K Code, 17.4K Data, 99.7K Total - Debug Version: 157.1K Code, 49.7K Data, 206.8K Total - -2) iASL Compiler/Disassembler and Tools: - -iASL: Completed the '-e' option to include additional ACPI tables in order to -aid with disassembly and External statement generation. ACPICA BZ 742. Lin -Ming. - -iASL: Removed the "named object in while loop" error. The compiler cannot -determine how many times a loop will execute. ACPICA BZ 730. - -Disassembler: Implemented support for FADT revision 2 (MS extension). ACPICA -BZ 743. - -Disassembler: Updates for several ACPI data tables (HEST, EINJ, and MCFG). - ----------------------------------------- -31 October 2008. Summary of changes for version 20081031: - -1) ACPI CA Core Subsystem: - -Restructured the ACPICA header files into public/private. acpi.h now includes -only the "public" acpica headers. All other acpica headers are "private" and -should not be included by acpica users. One new file, accommon.h is used to -include the commonly used private headers for acpica code generation. Future -plans include moving all private headers to a new subdirectory. - -Implemented an automatic Buffer->String return value conversion for -predefined ACPI methods. For these methods (such as _BIF), added automatic -conversion for return objects that are required to be a String, but a Buffer -was found instead. This can happen when reading string battery data from an -operation region, because it used to be difficult to convert the data from -buffer to string from within the ASL. Ensures that the host OS is provided -with a valid null-terminated string. Linux BZ 11822. - -Updated the FACS waking vector interfaces. Split AcpiSetFirmwareWakingVector -into two: one for the 32-bit vector, another for the 64-bit vector. This is -required because the host OS must setup the wake much differently for each -vector (real vs. protected mode, etc.) and the interface itself should not be -deciding which vector to use. Also, eliminated the GetFirmwareWakingVector -interface, as it served no purpose (only the firmware reads the vector, OS -only writes the vector.) ACPICA BZ 731. - -Implemented a mechanism to escape infinite AML While() loops. Added a loop -counter to force exit from AML While loops if the count becomes too large. -This can occur in poorly written AML when the hardware does not respond -within a while loop and the loop does not implement a timeout. The maximum -loop count is configurable. A new exception code is returned when a loop is -broken, AE_AML_INFINITE_LOOP. Alexey Starikovskiy, Bob Moore. - -Optimized the execution of AML While loops. Previously, a control state -object was allocated and freed for each execution of the loop. The -optimization is to simply reuse the control state for each iteration. This -speeds up the raw loop execution time by about 5%. - -Enhanced the implicit return mechanism. For Windows compatibility, return an -implicit integer of value zero for methods that contain no executable code. -Such methods are seen in the field as stubs (presumably), and can cause -drivers to fail if they expect a return value. Lin Ming. - -Allow multiple backslashes as root prefixes in namepaths. In a fully -qualified namepath, allow multiple backslash prefixes. This can happen (and -is seen in the field) because of the use of a double-backslash in strings -(since backslash is the escape character) causing confusion. ACPICA BZ 739 -Lin Ming. - -Emit a warning if two different FACS or DSDT tables are discovered in the -FADT. Checks if there are two valid but different addresses for the FACS and -DSDT within the FADT (mismatch between the 32-bit and 64-bit fields.) - -Consolidated the method argument count validation code. Merged the code that -validates control method argument counts into the predefined validation -module. Eliminates possible multiple warnings for incorrect argument counts. - -Implemented ACPICA example code. Includes code for ACPICA initialization, -handler installation, and calling a control method. Available at -source/tools/examples. - -Added a global pointer for FACS table to simplify internal FACS access. Use -the global pointer instead of using AcpiGetTableByIndex for each FACS access. -This simplifies the code for the Global Lock and the Firmware Waking -Vector(s). - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 81.2K Code, 17.0K Data, 98.2K Total - Debug Version: 155.8K Code, 49.1K Data, 204.9K Total - Current Release: - Non-Debug Version: 81.7K Code, 17.3K Data, 99.0K Total - Debug Version: 156.4K Code, 49.4K Data, 205.8K Total - -2) iASL Compiler/Disassembler and Tools: - -iASL: Improved disassembly of external method calls. Added the -e option to -allow the inclusion of additional ACPI tables to help with the disassembly of -method invocations and the generation of external declarations during the -disassembly. Certain external method invocations cannot be disassembled -properly without the actual declaration of the method. Use the -e option to -include the table where the external method(s) are actually declared. Most -useful for disassembling SSDTs that make method calls back to the master -DSDT. Lin Ming. Example: To disassemble an SSDT with calls to DSDT: iasl -d --e dsdt.aml ssdt1.aml - -iASL: Fix to allow references to aliases within ASL namepaths. Fixes a -problem where the use of an alias within a namepath would result in a not -found error or cause the compiler to fault. Also now allows forward -references from the Alias operator itself. ACPICA BZ 738. - ----------------------------------------- -26 September 2008. Summary of changes for version 20080926: - -1) ACPI CA Core Subsystem: - -Designed and implemented a mechanism to validate predefined ACPI methods and -objects. This code validates the predefined ACPI objects (objects whose names -start with underscore) that appear in the namespace, at the time they are -evaluated. The argument count and the type of the returned object are -validated against the ACPI specification. The purpose of this validation is -to detect problems with the BIOS-implemented predefined ACPI objects before -the results are returned to the ACPI-related drivers. Future enhancements may -include actual repair of incorrect return objects where possible. Two new -files are nspredef.c and acpredef.h. - -Fixed a fault in the AML parser if a memory allocation fails during the Op -completion routine AcpiPsCompleteThisOp. Lin Ming. ACPICA BZ 492. - -Fixed an issue with implicit return compatibility. This change improves the -implicit return mechanism to be more compatible with the MS interpreter. Lin -Ming, ACPICA BZ 349. - -Implemented support for zero-length buffer-to-string conversions. Allow zero -length strings during interpreter buffer-to-string conversions. For example, -during the ToDecimalString and ToHexString operators, as well as implicit -conversions. Fiodor Suietov, ACPICA BZ 585. - -Fixed two possible memory leaks in the error exit paths of -AcpiUtUpdateObjectReference and AcpiUtWalkPackageTree. These functions are -similar in that they use a stack of state objects in order to eliminate -recursion. The stack must be fully unwound and deallocated if an error -occurs. Lin Ming. ACPICA BZ 383. - -Removed the unused ACPI_BITREG_WAKE_ENABLE definition and entry in the global -ACPI register table. This bit does not exist and is unused. Lin Ming, Bob -Moore ACPICA BZ 442. - -Removed the obsolete version number in module headers. Removed the -"$Revision" number that appeared in each module header. This version number -was useful under SourceSafe and CVS, but has no meaning under git. It is not -only incorrect, it could also be misleading. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 79.7K Code, 16.4K Data, 96.1K Total - Debug Version: 153.7K Code, 48.2K Data, 201.9K Total - Current Release: - Non-Debug Version: 81.2K Code, 17.0K Data, 98.2K Total - Debug Version: 155.8K Code, 49.1K Data, 204.9K Total - ----------------------------------------- -29 August 2008. Summary of changes for version 20080829: - -1) ACPI CA Core Subsystem: - -Completed a major cleanup of the internal ACPI_OPERAND_OBJECT of type -Reference. Changes include the elimination of cheating on the Object field -for the DdbHandle subtype, addition of a reference class field to -differentiate the various reference types (instead of an AML opcode), and the -cleanup of debug output for this object. Lin Ming, Bob Moore. BZ 723 - -Reduce an error to a warning for an incorrect method argument count. -Previously aborted with an error if too few arguments were passed to a -control method via the external ACPICA interface. Now issue a warning instead -and continue. Handles the case where the method inadvertently declares too -many arguments, but does not actually use the extra ones. Applies mainly to -the predefined methods. Lin Ming. Linux BZ 11032. - -Disallow the evaluation of named object types with no intrinsic value. Return -AE_TYPE for objects that have no value and therefore evaluation is undefined: -Device, Event, Mutex, Region, Thermal, and Scope. Previously, evaluation of -these types were allowed, but an exception would be generated at some point -during the evaluation. Now, the error is generated up front. - -Fixed a possible memory leak in the AcpiNsGetExternalPathname function -(nsnames.c). Fixes a leak in the error exit path. - -Removed the obsolete debug levels ACPI_DB_WARN and ACPI_DB_ERROR. These debug -levels were made obsolete by the ACPI_WARNING, ACPI_ERROR, and ACPI_EXCEPTION -interfaces. Also added ACPI_DB_EVENTS to correspond with the existing -ACPI_LV_EVENTS. - -Removed obsolete and/or unused exception codes from the acexcep.h header. -There is the possibility that certain device drivers may be affected if they -use any of these exceptions. - -The ACPICA documentation has been added to the public git source tree, under -acpica/documents. Included are the ACPICA programmer reference, the iASL -compiler reference, and the changes.txt release logfile. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 79.7K Code, 16.4K Data, 96.1K Total - Debug Version: 153.9K Code, 48.4K Data, 202.3K Total - Current Release: - Non-Debug Version: 79.7K Code, 16.4K Data, 96.1K Total - Debug Version: 153.7K Code, 48.2K Data, 201.9K Total - -2) iASL Compiler/Disassembler and Tools: - -Allow multiple argument counts for the predefined _SCP method. ACPI 3.0 -defines _SCP with 3 arguments. Previous versions defined it with only 1 -argument. iASL now allows both definitions. - -iASL/disassembler: avoid infinite loop on bad ACPI tables. Check for zero- -length subtables when disassembling ACPI tables. Also fixed a couple of -errors where a full 16-bit table type field was not extracted from the input -properly. - -acpisrc: Improve comment counting mechanism for generating source code -statistics. Count first and last lines of multi-line comments as whitespace, -not comment lines. Handle Linux legal header in addition to standard acpica -header. - ----------------------------------------- - -29 July 2008. Summary of changes for version 20080729: - -This release is available at http://acpica.org/downloads -Direct git access via http://www.acpica.org/repos/acpica.git - -1) ACPI CA Core Subsystem: - -Fix a possible deadlock in the GPE dispatch. Remove call to -AcpiHwDisableAllGpes during wake in AcpiEvGpeDispatch. This call will attempt -to acquire the GPE lock but can deadlock since the GPE lock is already held -at dispatch time. This code was introduced in version 20060831 as a response -to Linux BZ 6881 and has since been removed from Linux. - -Add a function to dereference returned reference objects. Examines the return -object from a call to AcpiEvaluateObject. Any Index or RefOf references are -automatically dereferenced in an attempt to return something useful (these -reference types cannot be converted into an external ACPI_OBJECT.) Provides -MS compatibility. Lin Ming, Bob Moore. Linux BZ 11105 - -x2APIC support: changes for MADT and SRAT ACPI tables. There are 2 new -subtables for the MADT and one new subtable for the SRAT. Includes -disassembler and AcpiSrc support. Data from the Intel 64 Architecture x2APIC -Specification, June 2008. - -Additional error checking for pathname utilities. Add error check after all -calls to AcpiNsGetPathnameLength. Add status return from -AcpiNsBuildExternalPath and check after all calls. Add parameter validation -to AcpiUtInitializeBuffer. Reported by and initial patch by Ingo Molnar. - -Return status from the global init function AcpiUtGlobalInitialize. This is -used by both the kernel subsystem and the utilities such as iASL compiler. -The function could possibly fail when the caches are initialized. Yang Yi. - -Add a function to decode reference object types to strings. Created for -improved error messages. - -Improve object conversion error messages. Better error messages during object -conversion from internal to the external ACPI_OBJECT. Used for external calls -to AcpiEvaluateObject. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 79.6K Code, 16.2K Data, 95.8K Total - Debug Version: 153.5K Code, 48.2K Data, 201.7K Total - Current Release: - Non-Debug Version: 79.7K Code, 16.4K Data, 96.1K Total - Debug Version: 153.9K Code, 48.4K Data, 202.3K Total - -2) iASL Compiler/Disassembler and Tools: - -Debugger: fix a possible hang when evaluating non-methods. Fixes a problem -introduced in version 20080701. If the object being evaluated (via execute -command) is not a method, the debugger can hang while trying to obtain non- -existent parameters. - -iASL: relax error for using reserved "_T_x" identifiers. These names can -appear in a disassembled ASL file if they were emitted by the original -compiler. Instead of issuing an error or warning and forcing the user to -manually change these names, issue a remark instead. - -iASL: error if named object created in while loop. Emit an error if any named -object is created within a While loop. If allowed, this code will generate a -run-time error on the second iteration of the loop when an attempt is made to -create the same named object twice. ACPICA bugzilla 730. - -iASL: Support absolute pathnames for include files. Add support for absolute -pathnames within the Include operator. previously, only relative pathnames -were supported. - -iASL: Enforce minimum 1 interrupt in interrupt macro and Resource Descriptor. -The ACPI spec requires one interrupt minimum. BZ 423 - -iASL: Handle a missing ResourceSource arg, with a present SourceIndex. -Handles the case for the Interrupt Resource Descriptor where -the ResourceSource argument is omitted but ResourceSourceIndex -is present. Now leave room for the Index. BZ 426 - -iASL: Prevent error message if CondRefOf target does not exist. Fixes cases -where an error message is emitted if the target does not exist. BZ 516 - -iASL: Fix broken -g option (get Windows ACPI tables). Fixes the -g option -(get ACPI tables on Windows). This was apparently broken in version 20070919. - -AcpiXtract: Handle EOF while extracting data. Correctly handle the case where -the EOF happens immediately after the last table in the input file. Print -completion message. Previously, no message was displayed in this case. - ----------------------------------------- -01 July 2008. Summary of changes for version 20080701: - -This release is available at http://acpica.org/downloads -Direct git access via http://www.acpica.org/repos/acpica.git - -0) Git source tree / acpica.org - -Fixed a problem where a git-clone from http would not transfer the entire -source tree. - -1) ACPI CA Core Subsystem: - -Implemented a "careful" GPE disable in AcpiEvDisableGpe, only modify one -enable bit. Now performs a read-change-write of the enable register instead -of simply writing out the cached enable mask. This will prevent inadvertent -enabling of GPEs if a rogue GPE is received during initialization (before GPE -handlers are installed.) - -Implemented a copy for dynamically loaded tables. Previously, dynamically -loaded tables were simply mapped - but on some machines this memory is -corrupted after suspend. Now copy the table to a local buffer. For the -OpRegion case, added checksum verify. Use the table length from the table -header, not the region length. For the Buffer case, use the table length -also. Dennis Noordsij, Bob Moore. BZ 10734 - -Fixed a problem where the same ACPI table could not be dynamically loaded and -unloaded more than once. Without this change, a table cannot be loaded again -once it has been loaded/unloaded one time. The current mechanism does not -unregister a table upon an unload. During a load, if the same table is found, -this no longer returns an exception. BZ 722 - -Fixed a problem where the wrong descriptor length was calculated for the -EndTag descriptor in 64-bit mode. The "minimal" descriptors such as EndTag -are calculated as 12 bytes long, but the actual length in the internal -descriptor is 16 because of the round-up to 8 on the 64-bit build. Reported -by Linn Crosetto. BZ 728 - -Fixed a possible memory leak in the Unload operator. The DdbHandle returned -by Load() did not have its reference count decremented during unload, leading -to a memory leak. Lin Ming. BZ 727 - -Fixed a possible memory leak when deleting thermal/processor objects. Any -associated notify handlers (and objects) were not being deleted. Fiodor -Suietov. BZ 506 - -Fixed the ordering of the ASCII names in the global mutex table to match the -actual mutex IDs. Used by AcpiUtGetMutexName, a function used for debug only. -Vegard Nossum. BZ 726 - -Enhanced the AcpiGetObjectInfo interface to return the number of required -arguments if the object is a control method. Added this call to the debugger -so the proper number of default arguments are passed to a method. This -prevents a warning when executing methods from AcpiExec. - -Added a check for an invalid handle in AcpiGetObjectInfo. Return -AE_BAD_PARAMETER if input handle is invalid. BZ 474 - -Fixed an extraneous warning from exconfig.c on the 64-bit build. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 79.3K Code, 16.2K Data, 95.5K Total - Debug Version: 153.0K Code, 48.2K Data, 201.2K Total - Current Release: - Non-Debug Version: 79.6K Code, 16.2K Data, 95.8K Total - Debug Version: 153.5K Code, 48.2K Data, 201.7K Total - -2) iASL Compiler/Disassembler and Tools: - -iASL: Added two missing ACPI reserved names. Added _MTP and _ASZ, both -resource descriptor names. - -iASL: Detect invalid ASCII characters in input (windows version). Removed the -"-CF" flag from the flex compile, enables correct detection of non-ASCII -characters in the input. BZ 441 - -iASL: Eliminate warning when result of LoadTable is not used. Eliminate the -"result of operation not used" warning when the DDB handle returned from -LoadTable is not used. The warning is not needed. BZ 590 - -AcpiExec: Add support for dynamic table load/unload. Now calls _CFG method to -pass address of table to the AML. Added option to disable OpRegion simulation -to allow creation of an OpRegion with a real address that was passed to _CFG. -All of this allows testing of the Load and Unload operators from AcpiExec. - -Debugger: update tables command for unloaded tables. Handle unloaded tables -and use the standard table header output routine. - ----------------------------------------- -09 June 2008. Summary of changes for version 20080609: - -1) ACPI CA Core Subsystem: - -Implemented a workaround for reversed _PRT entries. A significant number of -BIOSs erroneously reverse the _PRT SourceName and the SourceIndex. This -change dynamically detects and repairs this problem. Provides compatibility -with MS ACPI. BZ 6859 - -Simplified the internal ACPI hardware interfaces to eliminate the locking -flag parameter from Register Read/Write. Added a new external interface, -AcpiGetRegisterUnlocked. - -Fixed a problem where the invocation of a GPE control method could hang. This -was a regression introduced in 20080514. The new method argument count -validation mechanism can enter an infinite loop when a GPE method is -dispatched. Problem fixed by removing the obsolete code that passed GPE block -information to the notify handler via the control method parameter pointer. - -Fixed a problem where the _SST execution status was incorrectly returned to -the caller of AcpiEnterSleepStatePrep. This was a regression introduced in -20080514. _SST is optional and a NOT_FOUND exception should never be -returned. BZ 716 - -Fixed a problem where a deleted object could be accessed from within the AML -parser. This was a regression introduced in version 20080123 as a fix for the -Unload operator. Lin Ming. BZ 10669 - -Cleaned up the debug operand dump mechanism. Eliminated unnecessary operands -and eliminated the use of a negative index in a loop. Operands are now -displayed in the correct order, not backwards. This also fixes a regression -introduced in 20080514 on 64-bit systems where the elimination of -ACPI_NATIVE_UINT caused the negative index to go large and positive. BZ 715 - -Fixed a possible memory leak in EvPciConfigRegionSetup where the error exit -path did not delete a locally allocated structure. - -Updated definitions for the DMAR and SRAT tables to synchronize with the -current specifications. Includes disassembler support. - -Fixed a problem in the mutex debug code (in utmutex.c) where an incorrect -loop termination value was used. Loop terminated on iteration early, missing -one mutex. Linn Crosetto - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 79.5K Code, 16.2K Data, 95.7K Total - Debug Version: 153.3K Code, 48.3K Data, 201.6K Total - Current Release: - Non-Debug Version: 79.3K Code, 16.2K Data, 95.5K Total - Debug Version: 153.0K Code, 48.2K Data, 201.2K Total - -2) iASL Compiler/Disassembler and Tools: - -Disassembler: Implemented support for EisaId() within _CID objects. Now -disassemble integer _CID objects back to EisaId invocations, including -multiple integers within _CID packages. Includes single-step support for -debugger also. - -Disassembler: Added support for DMAR and SRAT table definition changes. - ----------------------------------------- -14 May 2008. Summary of changes for version 20080514: - -1) ACPI CA Core Subsystem: - -Fixed a problem where GPEs were enabled too early during the ACPICA -initialization. This could lead to "handler not installed" errors on some -machines. Moved GPE enable until after _REG/_STA/_INI methods are run. This -ensures that all operation regions and devices throughout the namespace have -been initialized before GPEs are enabled. Alexey Starikovskiy, BZ 9916. - -Implemented a change to the enter sleep code. Moved execution of the _GTS -method to just before setting sleep enable bit. The execution was moved from -AcpiEnterSleepStatePrep to AcpiEnterSleepState. _GTS is now executed -immediately before the SLP_EN bit is set, as per the ACPI specification. -Luming Yu, BZ 1653. - -Implemented a fix to disable unknown GPEs (2nd version). Now always disable -the GPE, even if ACPICA thinks that that it is already disabled. It is -possible that the AML or some other code has enabled the GPE unbeknownst to -the ACPICA code. - -Fixed a problem with the Field operator where zero-length fields would return -an AE_AML_NO_OPERAND exception during table load. Fix enables zero-length ASL -field declarations in Field(), BankField(), and IndexField(). BZ 10606. - -Implemented a fix for the Load operator, now load the table at the namespace -root. This reverts a change introduced in version 20071019. The table is now -loaded at the namespace root even though this goes against the ACPI -specification. This provides compatibility with other ACPI implementations. -The ACPI specification will be updated to reflect this in ACPI 4.0. Lin Ming. - -Fixed a problem where ACPICA would not Load() tables with unusual signatures. -Now ignore ACPI table signature for Load() operator. Only "SSDT" is -acceptable to the ACPI spec, but tables are seen with OEMx and null sigs. -Therefore, signature validation is worthless. Apparently MS ACPI accepts such -signatures, ACPICA must be compatible. BZ 10454. - -Fixed a possible negative array index in AcpiUtValidateException. Added NULL -fields to the exception string arrays to eliminate a -1 subtraction on the -SubStatus field. - -Updated the debug tracking macros to reduce overall code and data size. -Changed ACPI_MODULE_NAME and ACPI_FUNCTION_NAME to use arrays of strings -instead of pointers to static strings. Jan Beulich and Bob Moore. - -Implemented argument count checking in control method invocation via -AcpiEvaluateObject. Now emit an error if too few arguments, warning if too -many. This applies only to extern programmatic control method execution, not -method-to-method calls within the AML. Lin Ming. - -Eliminated the ACPI_NATIVE_UINT type across all ACPICA code. This type is no -longer needed, especially with the removal of 16-bit support. It was replaced -mostly with UINT32, but also ACPI_SIZE where a type that changes 32/64 bit on -32/64-bit platforms is required. - -Added the C const qualifier for appropriate string constants -- mostly -MODULE_NAME and printf format strings. Jan Beulich. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has a -much larger code and data size. - - Previous Release: - Non-Debug Version: 80.0K Code, 17.4K Data, 97.4K Total - Debug Version: 159.4K Code, 64.4K Data, 223.8K Total - Current Release: - Non-Debug Version: 79.5K Code, 16.2K Data, 95.7K Total - Debug Version: 153.3K Code, 48.3K Data, 201.6K Total - -2) iASL Compiler/Disassembler and Tools: - -Implemented ACPI table revision ID validation in the disassembler. Zero is -always invalid. For DSDTs, the ID controls the interpreter integer width. 1 -means 32-bit and this is unusual. 2 or greater is 64-bit. - ----------------------------------------- -21 March 2008. Summary of changes for version 20080321: - -1) ACPI CA Core Subsystem: - -Implemented an additional change to the GPE support in order to suppress -spurious or stray GPEs. The AcpiEvDisableGpe function will now permanently -disable incoming GPEs that are neither enabled nor disabled -- meaning that -the GPE is unknown to the system. This should prevent future interrupt floods -from that GPE. BZ 6217 (Zhang Rui) - -Fixed a problem where NULL package elements were not returned to the -AcpiEvaluateObject interface correctly. The element was simply ignored -instead of returning a NULL ACPI_OBJECT package element, potentially causing -a buffer overflow and/or confusing the caller who expected a fixed number of -elements. BZ 10132 (Lin Ming, Bob Moore) - -Fixed a problem with the CreateField, CreateXXXField (Bit, Byte, Word, Dword, -Qword), Field, BankField, and IndexField operators when invoked from inside -an executing control method. In this case, these operators created namespace -nodes that were incorrectly left marked as permanent nodes instead of -temporary nodes. This could cause a problem if there is race condition -between an exiting control method and a running namespace walk. (Reported by -Linn Crosetto) - -Fixed a problem where the CreateField and CreateXXXField operators would -incorrectly allow duplicate names (the name of the field) with no exception -generated. - -Implemented several changes for Notify handling. Added support for new Notify -values (ACPI 2.0+) and improved the Notify debug output. Notify on -PowerResource objects is no longer allowed, as per the ACPI specification. -(Bob Moore, Zhang Rui) - -All Reference Objects returned via the AcpiEvaluateObject interface are now -marked as type "REFERENCE" instead of "ANY". The type ANY is now reserved for -NULL objects - either NULL package elements or unresolved named references. - -Fixed a problem where an extraneous debug message was produced for package -objects (when debugging enabled). The message "Package List length larger -than NumElements count" is now produced in the correct case, and is now an -error message rather than a debug message. Added a debug message for the -opposite case, where NumElements is larger than the Package List (the package -will be padded out with NULL elements as per the ACPI spec.) - -Implemented several improvements for the output of the ASL "Debug" object to -clarify and keep all data for a given object on one output line. - -Fixed two size calculation issues with the variable-length Start Dependent -resource descriptor. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 79.7K Code, 17.3K Data, 97.0K Total - Debug Version: 158.9K Code, 64.0K Data, 222.9K Total - Current Release: - Non-Debug Version: 80.0K Code, 17.4K Data, 97.4K Total - Debug Version: 159.4K Code, 64.4K Data, 223.8K Total - -2) iASL Compiler/Disassembler and Tools: - -Fixed a problem with the use of the Switch operator where execution of the -containing method by multiple concurrent threads could cause an -AE_ALREADY_EXISTS exception. This is caused by the fact that there is no -actual Switch opcode, it must be simulated with local named temporary -variables and if/else pairs. The solution chosen was to mark any method that -uses Switch as Serialized, thus preventing multiple thread entries. BZ 469. - ----------------------------------------- -13 February 2008. Summary of changes for version 20080213: - -1) ACPI CA Core Subsystem: - -Implemented another MS compatibility design change for GPE/Notify handling. -GPEs are now cleared/enabled asynchronously to allow all pending notifies to -complete first. It is expected that the OSL will queue the enable request -behind all pending notify requests (may require changes to the local host OSL -in AcpiOsExecute). Alexey Starikovskiy. - -Fixed a problem where buffer and package objects passed as arguments to a -control method via the external AcpiEvaluateObject interface could cause an -AE_AML_INTERNAL exception depending on the order and type of operators -executed by the target control method. - -Fixed a problem where resource descriptor size optimization could cause a -problem when a _CRS resource template is passed to a _SRS method. The _SRS -resource template must use the same descriptors (with the same size) as -returned from _CRS. This change affects the following resource descriptors: -IRQ / IRQNoFlags and StartDependendentFn / StartDependentFnNoPri. (BZ 9487) - -Fixed a problem where a CopyObject to RegionField, BankField, and IndexField -objects did not perform an implicit conversion as it should. These types must -retain their initial type permanently as per the ACPI specification. However, -a CopyObject to all other object types should not perform an implicit -conversion, as per the ACPI specification. (Lin Ming, Bob Moore) BZ 388 - -Fixed a problem with the AcpiGetDevices interface where the mechanism to -match device CIDs did not examine the entire list of available CIDs, but -instead aborted on the first non-matching CID. Andrew Patterson. - -Fixed a regression introduced in version 20071114. The ACPI_HIDWORD macro was -inadvertently changed to return a 16-bit value instead of a 32-bit value, -truncating the upper dword of a 64-bit value. This macro is only used to -display debug output, so no incorrect calculations were made. Also, -reimplemented the macro so that a 64-bit shift is not performed by -inefficient compilers. - -Added missing va_end statements that should correspond with each va_start -statement. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 79.5K Code, 17.2K Data, 96.7K Total - Debug Version: 159.0K Code, 63.8K Data, 222.8K Total - Current Release: - Non-Debug Version: 79.7K Code, 17.3K Data, 97.0K Total - Debug Version: 158.9K Code, 64.0K Data, 222.9K Total - -2) iASL Compiler/Disassembler and Tools: - -Implemented full disassembler support for the following new ACPI tables: -BERT, EINJ, and ERST. Implemented partial disassembler support for the -complicated HEST table. These tables support the Windows Hardware Error -Architecture (WHEA). - ----------------------------------------- -23 January 2008. Summary of changes for version 20080123: - -1) ACPI CA Core Subsystem: - -Added the 2008 copyright to all module headers and signons. This affects -virtually every file in the ACPICA core subsystem, the iASL compiler, and -the tools/utilities. - -Fixed a problem with the SizeOf operator when used with Package and Buffer -objects. These objects have deferred execution for some arguments, and the -execution is now completed before the SizeOf is executed. This problem caused -unexpected AE_PACKAGE_LIMIT errors on some systems (Lin Ming, Bob Moore) BZ -9558 - -Implemented an enhancement to the interpreter "slack mode". In the absence of -an explicit return or an implicitly returned object from the last executed -opcode, a control method will now implicitly return an integer of value 0 for -Microsoft compatibility. (Lin Ming) BZ 392 - -Fixed a problem with the Load operator where an exception was not returned in -the case where the table is already loaded. (Lin Ming) BZ 463 - -Implemented support for the use of DDBHandles as an Indexed Reference, as per -the ACPI spec. (Lin Ming) BZ 486 - -Implemented support for UserTerm (Method invocation) for the Unload operator -as per the ACPI spec. (Lin Ming) BZ 580 - -Fixed a problem with the LoadTable operator where the OemId and OemTableId -input strings could cause unexpected failures if they were shorter than the -maximum lengths allowed. (Lin Ming, Bob Moore) BZ 576 - -Implemented support for UserTerm (Method invocation) for the Unload operator -as per the ACPI spec. (Lin Ming) BZ 580 - -Implemented header file support for new ACPI tables - BERT, ERST, EINJ, HEST, -IBFT, UEFI, WDAT. Disassembler support is forthcoming. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 79.3K Code, 17.2K Data, 96.5K Total - Debug Version: 158.6K Code, 63.8K Data, 222.4K Total - Current Release: - Non-Debug Version: 79.5K Code, 17.2K Data, 96.7K Total - Debug Version: 159.0K Code, 63.8K Data, 222.8K Total - -2) iASL Compiler/Disassembler and Tools: - -Implemented support in the disassembler for checksum validation on incoming -binary DSDTs and SSDTs. If incorrect, a message is displayed within the table -header dump at the start of the disassembly. - -Implemented additional debugging information in the namespace listing file -created during compilation. In addition to the namespace hierarchy, the full -pathname to each namespace object is displayed. - -Fixed a problem with the disassembler where invalid ACPI tables could cause -faults or infinite loops. - -Fixed an unexpected parse error when using the optional "parameter types" -list in a control method declaration. (Lin Ming) BZ 397 - -Fixed a problem where two External declarations with the same name did not -cause an error (Lin Ming) BZ 509 - -Implemented support for full TermArgs (adding Argx, Localx and method -invocation) for the ParameterData parameter to the LoadTable operator. (Lin -Ming) BZ 583,587 - ----------------------------------------- -19 December 2007. Summary of changes for version 20071219: - -1) ACPI CA Core Subsystem: - -Implemented full support for deferred execution for the TermArg string -arguments for DataTableRegion. This enables forward references and full -operand resolution for the three string arguments. Similar to OperationRegion -deferred argument execution.) Lin Ming. BZ 430 - -Implemented full argument resolution support for the BankValue argument to -BankField. Previously, only constants were supported, now any TermArg may be -used. Lin Ming BZ 387, 393 - -Fixed a problem with AcpiGetDevices where the search of a branch of the -device tree could be terminated prematurely. In accordance with the ACPI -specification, the search down the current branch is terminated if a device -is both not present and not functional (instead of just not present.) Yakui -Zhao. - -Fixed a problem where "unknown" GPEs could be allowed to fire repeatedly if -the underlying AML code changed the GPE enable registers. Now, any unknown -incoming GPE (no _Lxx/_Exx method and not the EC GPE) is immediately disabled -instead of simply ignored. Rui Zhang. - -Fixed a problem with Index Fields where the Index register was incorrectly -limited to a maximum of 32 bits. Now any size may be used. - -Fixed a couple memory leaks associated with "implicit return" objects when -the AML Interpreter slack mode is enabled. Lin Ming BZ 349 - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 79.0K Code, 17.2K Data, 96.2K Total - Debug Version: 157.9K Code, 63.6K Data, 221.5K Total - Current Release: - Non-Debug Version: 79.3K Code, 17.2K Data, 96.5K Total - Debug Version: 158.6K Code, 63.8K Data, 222.4K Total - ----------------------------------------- -14 November 2007. Summary of changes for version 20071114: - -1) ACPI CA Core Subsystem: - -Implemented event counters for each of the Fixed Events, the ACPI SCI -(interrupt) itself, and control methods executed. Named -AcpiFixedEventCount[], AcpiSciCount, and AcpiMethodCount respectively. These -should be useful for debugging and statistics. - -Implemented a new external interface, AcpiGetStatistics, to retrieve the -contents of the various event counters. Returns the current values for -AcpiSciCount, AcpiGpeCount, the AcpiFixedEventCount array, and -AcpiMethodCount. The interface can be expanded in the future if new counters -are added. Device drivers should use this interface rather than access the -counters directly. - -Fixed a problem with the FromBCD and ToBCD operators. With some compilers, -the ShortDivide function worked incorrectly, causing problems with the BCD -functions with large input values. A truncation from 64-bit to 32-bit -inadvertently occurred. Internal BZ 435. Lin Ming - -Fixed a problem with Index references passed as method arguments. References -passed as arguments to control methods were dereferenced immediately (before -control was passed to the called method). The references are now correctly -passed directly to the called method. BZ 5389. Lin Ming - -Fixed a problem with CopyObject used in conjunction with the Index operator. -The reference was incorrectly dereferenced before the copy. The reference is -now correctly copied. BZ 5391. Lin Ming - -Fixed a problem with Control Method references within Package objects. These -references are now correctly generated. This completes the package -construction overhaul that began in version 20071019. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 78.8K Code, 17.2K Data, 96.0K Total - Debug Version: 157.2K Code, 63.4K Data, 220.6K Total - Current Release: - Non-Debug Version: 79.0K Code, 17.2K Data, 96.2K Total - Debug Version: 157.9K Code, 63.6K Data, 221.5K Total - - -2) iASL Compiler/Disassembler and Tools: - -The AcpiExec utility now installs handlers for all of the predefined -Operation Region types. New types supported are: PCI_Config, CMOS, and -PCIBARTarget. - -Fixed a problem with the 64-bit version of AcpiExec where the extended (64- -bit) address fields for the DSDT and FACS within the FADT were not being -used, causing truncation of the upper 32-bits of these addresses. Lin Ming -and Bob Moore - ----------------------------------------- -19 October 2007. Summary of changes for version 20071019: - -1) ACPI CA Core Subsystem: - -Fixed a problem with the Alias operator when the target of the alias is a -named ASL operator that opens a new scope -- Scope, Device, PowerResource, -Processor, and ThermalZone. In these cases, any children of the original -operator could not be accessed via the alias, potentially causing unexpected -AE_NOT_FOUND exceptions. (BZ 9067) - -Fixed a problem with the Package operator where all named references were -created as object references and left otherwise unresolved. According to the -ACPI specification, a Package can only contain Data Objects or references to -control methods. The implication is that named references to Data Objects -(Integer, Buffer, String, Package, BufferField, Field) should be resolved -immediately upon package creation. This is the approach taken with this -change. References to all other named objects (Methods, Devices, Scopes, -etc.) are all now properly created as reference objects. (BZ 5328) - -Reverted a change to Notify handling that was introduced in version -20070508. This version changed the Notify handling from asynchronous to -fully synchronous (Device driver Notify handling with respect to the Notify -ASL operator). It was found that this change caused more problems than it -solved and was removed by most users. - -Fixed a problem with the Increment and Decrement operators where the type of -the target object could be unexpectedly and incorrectly changed. (BZ 353) -Lin Ming. - -Fixed a problem with the Load and LoadTable operators where the table -location within the namespace was ignored. Instead, the table was always -loaded into the root or current scope. Lin Ming. - -Fixed a problem with the Load operator when loading a table from a buffer -object. The input buffer was prematurely zeroed and/or deleted. (BZ 577) - -Fixed a problem with the Debug object where a store of a DdbHandle reference -object to the Debug object could cause a fault. - -Added a table checksum verification for the Load operator, in the case where -the load is from a buffer. (BZ 578). - -Implemented additional parameter validation for the LoadTable operator. The -length of the input strings SignatureString, OemIdString, and OemTableId are -now checked for maximum lengths. (BZ 582) Lin Ming. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 78.5K Code, 17.1K Data, 95.6K Total - Debug Version: 156.7K Code, 63.2K Data, 219.9K Total - Current Release: - Non-Debug Version: 78.8K Code, 17.2K Data, 96.0K Total - Debug Version: 157.2K Code, 63.4K Data, 220.6K Total - - -2) iASL Compiler/Disassembler: - -Fixed a problem where if a single file was specified and the file did not -exist, no error message was emitted. (Introduced with wildcard support in -version 20070917.) - ----------------------------------------- -19 September 2007. Summary of changes for version 20070919: - -1) ACPI CA Core Subsystem: - -Designed and implemented new external interfaces to install and remove -handlers for ACPI table-related events. Current events that are defined are -LOAD and UNLOAD. These interfaces allow the host to track ACPI tables as -they are dynamically loaded and unloaded. See AcpiInstallTableHandler and -AcpiRemoveTableHandler. (Lin Ming and Bob Moore) - -Fixed a problem where the use of the AcpiGbl_AllMethodsSerialized flag -(acpi_serialized option on Linux) could cause some systems to hang during -initialization. (Bob Moore) BZ 8171 - -Fixed a problem where objects of certain types (Device, ThermalZone, -Processor, PowerResource) can be not found if they are declared and -referenced from within the same control method (Lin Ming) BZ 341 - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 78.3K Code, 17.0K Data, 95.3K Total - Debug Version: 156.3K Code, 63.1K Data, 219.4K Total - Current Release: - Non-Debug Version: 78.5K Code, 17.1K Data, 95.6K Total - Debug Version: 156.7K Code, 63.2K Data, 219.9K Total - - -2) iASL Compiler/Disassembler: - -Implemented support to allow multiple files to be compiled/disassembled in a -single invocation. This includes command line wildcard support for both the -Windows and Unix versions of the compiler. This feature simplifies the -disassembly and compilation of multiple ACPI tables in a single directory. - ----------------------------------------- -08 May 2007. Summary of changes for version 20070508: - -1) ACPI CA Core Subsystem: - -Implemented a Microsoft compatibility design change for the handling of the -Notify AML operator. Previously, notify handlers were dispatched and -executed completely asynchronously in a deferred thread. The new design -still executes the notify handlers in a different thread, but the original -thread that executed the Notify() now waits at a synchronization point for -the notify handler to complete. Some machines depend on a synchronous Notify -operator in order to operate correctly. - -Implemented support to allow Package objects to be passed as method -arguments to the external AcpiEvaluateObject interface. Previously, this -would return the AE_NOT_IMPLEMENTED exception. This feature had not been -implemented since there were no reserved control methods that required it -until recently. - -Fixed a problem with the internal FADT conversion where ACPI 1.0 FADTs that -contained invalid non-zero values in reserved fields could cause later -failures because these fields have meaning in later revisions of the FADT. -For incoming ACPI 1.0 FADTs, these fields are now always zeroed. (The fields -are: Preferred_PM_Profile, PSTATE_CNT, CST_CNT, and IAPC_BOOT_FLAGS.) - -Fixed a problem where the Global Lock handle was not properly updated if a -thread that acquired the Global Lock via executing AML code then attempted -to acquire the lock via the AcpiAcquireGlobalLock interface. Reported by Joe -Liu. - -Fixed a problem in AcpiEvDeleteGpeXrupt where the global interrupt list -could be corrupted if the interrupt being removed was at the head of the -list. Reported by Linn Crosetto. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 78.0K Code, 17.1K Data, 95.1K Total - Debug Version: 155.9K Code, 63.1K Data, 219.0K Total - Current Release: - Non-Debug Version: 78.3K Code, 17.0K Data, 95.3K Total - Debug Version: 156.3K Code, 63.1K Data, 219.4K Total - ----------------------------------------- -20 March 2007. Summary of changes for version 20070320: - -1) ACPI CA Core Subsystem: - -Implemented a change to the order of interpretation and evaluation of AML -operand objects within the AML interpreter. The interpreter now evaluates -operands in the order that they appear in the AML stream (and the -corresponding ASL code), instead of in the reverse order (after the entire -operand list has been parsed). The previous behavior caused several subtle -incompatibilities with the Microsoft AML interpreter as well as being -somewhat non-intuitive. BZ 7871, local BZ 263. Valery Podrezov. - -Implemented a change to the ACPI Global Lock support. All interfaces to the -global lock now allow the same thread to acquire the lock multiple times. -This affects the AcpiAcquireGlobalLock external interface to the global lock -as well as the internal use of the global lock to support AML fields -- a -control method that is holding the global lock can now simultaneously access -AML fields that require global lock protection. Previously, in both cases, -this would have resulted in an AE_ALREADY_ACQUIRED exception. The change to -AcpiAcquireGlobalLock is of special interest to drivers for the Embedded -Controller. There is no change to the behavior of the AML Acquire operator, -as this can already be used to acquire a mutex multiple times by the same -thread. BZ 8066. With assistance from Alexey Starikovskiy. - -Fixed a problem where invalid objects could be referenced in the AML -Interpreter after error conditions. During operand evaluation, ensure that -the internal "Return Object" field is cleared on error and only valid -pointers are stored there. Caused occasional access to deleted objects that -resulted in "large reference count" warning messages. Valery Podrezov. - -Fixed a problem where an AE_STACK_OVERFLOW internal exception could occur on -deeply nested control method invocations. BZ 7873, local BZ 487. Valery -Podrezov. - -Fixed an internal problem with the handling of result objects on the -interpreter result stack. BZ 7872. Valery Podrezov. - -Removed obsolete code that handled the case where AML_NAME_OP is the target -of a reference (Reference.Opcode). This code was no longer necessary. BZ -7874. Valery Podrezov. - -Removed obsolete ACPI_NO_INTEGER64_SUPPORT from two header files. This was a -remnant from the previously discontinued 16-bit support. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 78.0K Code, 17.1K Data, 95.1K Total - Debug Version: 155.8K Code, 63.3K Data, 219.1K Total - Current Release: - Non-Debug Version: 78.0K Code, 17.1K Data, 95.1K Total - Debug Version: 155.9K Code, 63.1K Data, 219.0K Total - ----------------------------------------- -26 January 2007. Summary of changes for version 20070126: - -1) ACPI CA Core Subsystem: - -Added the 2007 copyright to all module headers and signons. This affects -virtually every file in the ACPICA core subsystem, the iASL compiler, and -the utilities. - -Implemented a fix for an incorrect parameter passed to AcpiTbDeleteTable -during a table load. A bad pointer was passed in the case where the DSDT is -overridden, causing a fault in this case. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 78.0K Code, 17.1K Data, 95.1K Total - Debug Version: 155.8K Code, 63.3K Data, 219.1K Total - Current Release: - Non-Debug Version: 78.0K Code, 17.1K Data, 95.1K Total - Debug Version: 155.8K Code, 63.3K Data, 219.1K Total - ----------------------------------------- -15 December 2006. Summary of changes for version 20061215: - -1) ACPI CA Core Subsystem: - -Support for 16-bit ACPICA has been completely removed since it is no longer -necessary and it clutters the code. All 16-bit macros, types, and -conditional compiles have been removed, cleaning up and simplifying the code -across the entire subsystem. DOS support is no longer needed since the -bootable Linux firmware kit is now available. - -The handler for the Global Lock is now removed during AcpiTerminate to -enable a clean subsystem restart, via the implementation of the -AcpiEvRemoveGlobalLockHandler function. (With assistance from Joel Bretz, -HP) - -Implemented enhancements to the multithreading support within the debugger -to enable improved multithreading debugging and evaluation of the subsystem. -(Valery Podrezov) - -Debugger: Enhanced the Statistics/Memory command to emit the total (maximum) -memory used during the execution, as well as the maximum memory consumed by -each of the various object types. (Valery Podrezov) - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 77.9K Code, 17.0K Data, 94.9K Total - Debug Version: 155.2K Code, 63.1K Data, 218.3K Total - Current Release: - Non-Debug Version: 78.0K Code, 17.1K Data, 95.1K Total - Debug Version: 155.8K Code, 63.3K Data, 219.1K Total - - -2) iASL Compiler/Disassembler and Tools: - -AcpiExec: Implemented a new option (-m) to display full memory use -statistics upon subsystem/program termination. (Valery Podrezov) - ----------------------------------------- -09 November 2006. Summary of changes for version 20061109: - -1) ACPI CA Core Subsystem: - -Optimized the Load ASL operator in the case where the source operand is an -operation region. Simply map the operation region memory, instead of -performing a bytewise read. (Region must be of type SystemMemory, see -below.) - -Fixed the Load ASL operator for the case where the source operand is a -region field. A buffer object is also allowed as the source operand. BZ 480 - -Fixed a problem where the Load ASL operator allowed the source operand to be -an operation region of any type. It is now restricted to regions of type -SystemMemory, as per the ACPI specification. BZ 481 - -Additional cleanup and optimizations for the new Table Manager code. - -AcpiEnable will now fail if all of the required ACPI tables are not loaded -(FADT, FACS, DSDT). BZ 477 - -Added #pragma pack(8/4) to acobject.h to ensure that the structures in this -header are always compiled as aligned. The ACPI_OPERAND_OBJECT has been -manually optimized to be aligned and will not work if it is byte-packed. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 78.1K Code, 17.1K Data, 95.2K Total - Debug Version: 155.4K Code, 63.1K Data, 218.5K Total - Current Release: - Non-Debug Version: 77.9K Code, 17.0K Data, 94.9K Total - Debug Version: 155.2K Code, 63.1K Data, 218.3K Total - - -2) iASL Compiler/Disassembler and Tools: - -Fixed a problem where the presence of the _OSI predefined control method -within complex expressions could cause an internal compiler error. - -AcpiExec: Implemented full region support for multiple address spaces. -SpaceId is now part of the REGION object. BZ 429 - ----------------------------------------- -11 October 2006. Summary of changes for version 20061011: - -1) ACPI CA Core Subsystem: - -Completed an AML interpreter performance enhancement for control method -execution. Previously a 2-pass parse/execution, control methods are now -completely parsed and executed in a single pass. This improves overall -interpreter performance by ~25%, reduces code size, and reduces CPU stack -use. (Valery Podrezov + interpreter changes in version 20051202 that -eliminated namespace loading during the pass one parse.) - -Implemented _CID support for PCI Root Bridge detection. If the _HID does not -match the predefined PCI Root Bridge IDs, the _CID list (if present) is now -obtained and also checked for an ID match. - -Implemented additional support for the PCI _ADR execution: upsearch until a -device scope is found before executing _ADR. This allows PCI_Config -operation regions to be declared locally within control methods underneath -PCI device objects. - -Fixed a problem with a possible race condition between threads executing -AcpiWalkNamespace and the AML interpreter. This condition was removed by -modifying AcpiWalkNamespace to (by default) ignore all temporary namespace -entries created during any concurrent control method execution. An -additional namespace race condition is known to exist between -AcpiWalkNamespace and the Load/Unload ASL operators and is still under -investigation. - -Restructured the AML ParseLoop function, breaking it into several -subfunctions in order to reduce CPU stack use and improve maintainability. -(Mikhail Kouzmich) - -AcpiGetHandle: Fix for parameter validation to detect invalid combinations -of prefix handle and pathname. BZ 478 - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 77.9K Code, 17.1K Data, 95.0K Total - Debug Version: 154.6K Code, 63.0K Data, 217.6K Total - Current Release: - Non-Debug Version: 78.1K Code, 17.1K Data, 95.2K Total - Debug Version: 155.4K Code, 63.1K Data, 218.5K Total - -2) iASL Compiler/Disassembler and Tools: - -Ported the -g option (get local ACPI tables) to the new ACPICA Table Manager -to restore original behavior. - ----------------------------------------- -27 September 2006. Summary of changes for version 20060927: - -1) ACPI CA Core Subsystem: - -Removed the "Flags" parameter from AcpiGetRegister and AcpiSetRegister. -These functions now use a spinlock for mutual exclusion and the interrupt -level indication flag is not needed. - -Fixed a problem with the Global Lock where the lock could appear to be -obtained before it is actually obtained. The global lock semaphore was -inadvertently created with one unit instead of zero units. (BZ 464) Fiodor -Suietov. - -Fixed a possible memory leak and fault in AcpiExResolveObjectToValue during -a read from a buffer or region field. (BZ 458) Fiodor Suietov. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 77.9K Code, 17.1K Data, 95.0K Total - Debug Version: 154.7K Code, 63.0K Data, 217.7K Total - Current Release: - Non-Debug Version: 77.9K Code, 17.1K Data, 95.0K Total - Debug Version: 154.6K Code, 63.0K Data, 217.6K Total - - -2) iASL Compiler/Disassembler and Tools: - -Fixed a compilation problem with the pre-defined Resource Descriptor field -names where an "object does not exist" error could be incorrectly generated -if the parent ResourceTemplate pathname places the template within a -different namespace scope than the current scope. (BZ 7212) - -Fixed a problem where the compiler could hang after syntax errors detected -in an ElseIf construct. (BZ 453) - -Fixed a problem with the AmlFilename parameter to the DefinitionBlock() -operator. An incorrect output filename was produced when this parameter was -a null string (""). Now, the original input filename is used as the AML -output filename, with an ".aml" extension. - -Implemented a generic batch command mode for the AcpiExec utility (execute -any AML debugger command) (Valery Podrezov). - ----------------------------------------- -12 September 2006. Summary of changes for version 20060912: - -1) ACPI CA Core Subsystem: - -Enhanced the implementation of the "serialized mode" of the interpreter -(enabled via the AcpiGbl_AllMethodsSerialized flag.) When this mode is -specified, instead of creating a serialization semaphore per control method, -the interpreter lock is simply no longer released before a blocking -operation during control method execution. This effectively makes the AML -Interpreter single-threaded. The overhead of a semaphore per-method is -eliminated. - -Fixed a regression where an error was no longer emitted if a control method -attempts to create 2 objects of the same name. This once again returns -AE_ALREADY_EXISTS. When this exception occurs, it invokes the mechanism that -will dynamically serialize the control method to possible prevent future -errors. (BZ 440) - -Integrated a fix for a problem with PCI Express HID detection in the PCI -Config Space setup procedure. (BZ 7145) - -Moved all FADT-related functions to a new file, tbfadt.c. Eliminated the -AcpiHwInitialize function - the FADT registers are now validated when the -table is loaded. - -Added two new warnings during FADT verification - 1) if the FADT is larger -than the largest known FADT version, and 2) if there is a mismatch between a -32-bit block address and the 64-bit X counterpart (when both are non-zero.) - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 77.9K Code, 16.7K Data, 94.6K Total - Debug Version: 154.9K Code, 62.6K Data, 217.5K Total - Current Release: - Non-Debug Version: 77.9K Code, 17.1K Data, 95.0K Total - Debug Version: 154.7K Code, 63.0K Data, 217.7K Total - - -2) iASL Compiler/Disassembler and Tools: - -Fixed a problem with the implementation of the Switch() operator where the -temporary variable was declared too close to the actual Switch, instead of -at method level. This could cause a problem if the Switch() operator is -within a while loop, causing an error on the second iteration. (BZ 460) - -Disassembler - fix for error emitted for unknown type for target of scope -operator. Now, ignore it and continue. - -Disassembly of an FADT now verifies the input FADT and reports any errors -found. Fix for proper disassembly of full-sized (ACPI 2.0) FADTs. - -Disassembly of raw data buffers with byte initialization data now prefixes -each output line with the current buffer offset. - -Disassembly of ASF! table now includes all variable-length data fields at -the end of some of the subtables. - -The disassembler now emits a comment if a buffer appears to be a -ResourceTemplate, but cannot be disassembled as such because the EndTag does -not appear at the very end of the buffer. - -AcpiExec - Added the "-t" command line option to enable the serialized mode -of the AML interpreter. - ----------------------------------------- -31 August 2006. Summary of changes for version 20060831: - -1) ACPI CA Core Subsystem: - -Miscellaneous fixes for the Table Manager: -- Correctly initialize internal common FADT for all 64-bit "X" fields -- Fixed a couple table mapping issues during table load -- Fixed a couple alignment issues for IA64 -- Initialize input array to zero in AcpiInitializeTables -- Additional parameter validation for AcpiGetTable, AcpiGetTableHeader, -AcpiGetTableByIndex - -Change for GPE support: when a "wake" GPE is received, all wake GPEs are now -immediately disabled to prevent the waking GPE from firing again and to -prevent other wake GPEs from interrupting the wake process. - -Added the AcpiGpeCount global that tracks the number of processed GPEs, to -be used for debugging systems with a large number of ACPI interrupts. - -Implemented support for the "DMAR" ACPI table (DMA Redirection Table) in -both the ACPICA headers and the disassembler. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 77.8K Code, 16.5K Data, 94.3K Total - Debug Version: 154.6K Code, 62.3K Data, 216.9K Total - Current Release: - Non-Debug Version: 77.9K Code, 16.7K Data, 94.6K Total - Debug Version: 154.9K Code, 62.6K Data, 217.5K Total - - -2) iASL Compiler/Disassembler and Tools: - -Disassembler support for the DMAR ACPI table. - ----------------------------------------- -23 August 2006. Summary of changes for version 20060823: - -1) ACPI CA Core Subsystem: - -The Table Manager component has been completely redesigned and -reimplemented. The new design is much simpler, and reduces the overall code -and data size of the kernel-resident ACPICA by approximately 5%. Also, it is -now possible to obtain the ACPI tables very early during kernel -initialization, even before dynamic memory management is initialized. -(Alexey Starikovskiy, Fiodor Suietov, Bob Moore) - -Obsolete ACPICA interfaces: - -- AcpiGetFirmwareTable: Use AcpiGetTable instead (works at early kernel init -time). -- AcpiLoadTable: Not needed. -- AcpiUnloadTable: Not needed. - -New ACPICA interfaces: - -- AcpiInitializeTables: Must be called before the table manager can be used. -- AcpiReallocateRootTable: Used to transfer the root table to dynamically -allocated memory after it becomes available. -- AcpiGetTableByIndex: Allows the host to easily enumerate all ACPI tables -in the RSDT/XSDT. - -Other ACPICA changes: - -- AcpiGetTableHeader returns the actual mapped table header, not a copy. Use -AcpiOsUnmapMemory to free this mapping. -- AcpiGetTable returns the actual mapped table. The mapping is managed -internally and must not be deleted by the caller. Use of this interface -causes no additional dynamic memory allocation. -- AcpiFindRootPointer: Support for physical addressing has been eliminated, -it appeared to be unused. -- The interface to AcpiOsMapMemory has changed to be consistent with the -other allocation interfaces. -- The interface to AcpiOsGetRootPointer has changed to eliminate unnecessary -parameters. -- ACPI_PHYSICAL_ADDRESS is now 32 bits on 32-bit platforms, 64 bits on 64- -bit platforms. Was previously 64 bits on all platforms. -- The interface to the ACPI Global Lock acquire/release macros have changed -slightly since ACPICA no longer keeps a local copy of the FACS with a -constructed pointer to the actual global lock. - -Porting to the new table manager: - -- AcpiInitializeTables: Must be called once, and can be called anytime -during the OS initialization process. It allows the host to specify an area -of memory to be used to store the internal version of the RSDT/XSDT (root -table). This allows the host to access ACPI tables before memory management -is initialized and running. -- AcpiReallocateRootTable: Can be called after memory management is running -to copy the root table to a dynamically allocated array, freeing up the -scratch memory specified in the call to AcpiInitializeTables. -- AcpiSubsystemInitialize: This existing interface is independent of the -Table Manager, and does not have to be called before the Table Manager can -be used, it only must be called before the rest of ACPICA can be used. -- ACPI Tables: Some changes have been made to the names and structure of the -actbl.h and actbl1.h header files and may require changes to existing code. -For example, bitfields have been completely removed because of their lack of -portability across C compilers. -- Update interfaces to the Global Lock acquire/release macros if local -versions are used. (see acwin.h) - -Obsolete files: tbconvrt.c, tbget.c, tbgetall.c, tbrsdt.c - -New files: tbfind.c - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 80.7K Code, 17.9K Data, 98.6K Total - Debug Version: 161.0K Code, 65.1K Data, 226.1K Total - Current Release: - Non-Debug Version: 77.8K Code, 16.5K Data, 94.3K Total - Debug Version: 154.6K Code, 62.3K Data, 216.9K Total - - -2) iASL Compiler/Disassembler and Tools: - -No changes for this release. - ----------------------------------------- -21 July 2006. Summary of changes for version 20060721: - -1) ACPI CA Core Subsystem: - -The full source code for the ASL test suite used to validate the iASL -compiler and the ACPICA core subsystem is being released with the ACPICA -source for the first time. The source is contained in a separate package and -consists of over 1100 files that exercise all ASL/AML operators. The package -should appear on the Intel/ACPI web site shortly. (Valery Podrezov, Fiodor -Suietov) - -Completed a new design and implementation for support of the ACPI Global -Lock. On the OS side, the global lock is now treated as a standard AML -mutex. Previously, multiple OS threads could "acquire" the global lock -simultaneously. However, this could cause the BIOS to be starved out of the -lock - especially in cases such as the Embedded Controller driver where -there is a tight coupling between the OS and the BIOS. - -Implemented an optimization for the ACPI Global Lock interrupt mechanism. -The Global Lock interrupt handler no longer queues the execution of a -separate thread to signal the global lock semaphore. Instead, the semaphore -is signaled directly from the interrupt handler. - -Implemented support within the AML interpreter for package objects that -contain a larger AML length (package list length) than the package element -count. In this case, the length of the package is truncated to match the -package element count. Some BIOS code apparently modifies the package length -on the fly, and this change supports this behavior. Provides compatibility -with the MS AML interpreter. (With assistance from Fiodor Suietov) - -Implemented a temporary fix for the BankValue parameter of a Bank Field to -support all constant values, now including the Zero and One opcodes. -Evaluation of this parameter must eventually be converted to a full TermArg -evaluation. A not-implemented error is now returned (temporarily) for non- -constant values for this parameter. - -Fixed problem reports (Fiodor Suietov) integrated: -- Fix for premature object deletion after CopyObject on Operation Region (BZ -350) - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 80.7K Code, 18.0K Data, 98.7K Total - Debug Version: 160.9K Code, 65.1K Data, 226.0K Total - Current Release: - Non-Debug Version: 80.7K Code, 17.9K Data, 98.6K Total - Debug Version: 161.0K Code, 65.1K Data, 226.1K Total - - -2) iASL Compiler/Disassembler and Tools: - -No changes for this release. - ----------------------------------------- -07 July 2006. Summary of changes for version 20060707: - -1) ACPI CA Core Subsystem: - -Added the ACPI_PACKED_POINTERS_NOT_SUPPORTED macro to support C compilers -that do not allow the initialization of address pointers within packed -structures - even though the hardware itself may support misaligned -transfers. Some of the debug data structures are packed by default to -minimize size. - -Added an error message for the case where AcpiOsGetThreadId() returns zero. -A non-zero value is required by the core ACPICA code to ensure the proper -operation of AML mutexes and recursive control methods. - -The DSDT is now the only ACPI table that determines whether the AML -interpreter is in 32-bit or 64-bit mode. Not really a functional change, but -the hooks for per-table 32/64 switching have been removed from the code. A -clarification to the ACPI specification is forthcoming in ACPI 3.0B. - -Fixed a possible leak of an OwnerID in the error path of -AcpiTbInitTableDescriptor (tbinstal.c), and migrated all table OwnerID -deletion to a single place in AcpiTbUninstallTable to correct possible leaks -when using the AcpiTbDeleteTablesByType interface (with assistance from -Lance Ortiz.) - -Fixed a problem with Serialized control methods where the semaphore -associated with the method could be over-signaled after multiple method -invocations. - -Fixed two issues with the locking of the internal namespace data structure. -Both the Unload() operator and AcpiUnloadTable interface now lock the -namespace during the namespace deletion associated with the table unload -(with assistance from Linn Crosetto.) - -Fixed problem reports (Valery Podrezov) integrated: -- Eliminate unnecessary memory allocation for CreateXxxxField (BZ 5426) - -Fixed problem reports (Fiodor Suietov) integrated: -- Incomplete cleanup branches in AcpiTbGetTableRsdt (BZ 369) -- On Address Space handler deletion, needless deactivation call (BZ 374) -- AcpiRemoveAddressSpaceHandler: validate Device handle parameter (BZ 375) -- Possible memory leak, Notify sub-objects of Processor, Power, ThermalZone -(BZ 376) -- AcpiRemoveAddressSpaceHandler: validate Handler parameter (BZ 378) -- Minimum Length of RSDT should be validated (BZ 379) -- AcpiRemoveNotifyHandler: return AE_NOT_EXIST if Processor Obj has no -Handler (BZ (380) -- AcpiUnloadTable: return AE_NOT_EXIST if no table of specified type loaded -(BZ 381) - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 80.5K Code, 17.8K Data, 98.3K Total - Debug Version: 160.8K Code, 64.8K Data, 225.6K Total - Current Release: - Non-Debug Version: 80.7K Code, 17.9K Data, 98.6K Total - Debug Version: 161.0K Code, 65.1K Data, 226.1K Total - - -2) iASL Compiler/Disassembler and Tools: - -Fixed problem reports: -Compiler segfault when ASL contains a long (>1024) String declaration (BZ -436) - ----------------------------------------- -23 June 2006. Summary of changes for version 20060623: - -1) ACPI CA Core Subsystem: - -Implemented a new ACPI_SPINLOCK type for the OSL lock interfaces. This -allows the type to be customized to the host OS for improved efficiency -(since a spinlock is usually a very small object.) - -Implemented support for "ignored" bits in the ACPI registers. According to -the ACPI specification, these bits should be preserved when writing the -registers via a read/modify/write cycle. There are 3 bits preserved in this -manner: PM1_CONTROL[0] (SCI_EN), PM1_CONTROL[9], and PM1_STATUS[11]. - -Implemented the initial deployment of new OSL mutex interfaces. Since some -host operating systems have separate mutex and semaphore objects, this -feature was requested. The base code now uses mutexes (and the new mutex -interfaces) wherever a binary semaphore was used previously. However, for -the current release, the mutex interfaces are defined as macros to map them -to the existing semaphore interfaces. Therefore, no OSL changes are required -at this time. (See acpiosxf.h) - -Fixed several problems with the support for the control method SyncLevel -parameter. The SyncLevel now works according to the ACPI specification and -in concert with the Mutex SyncLevel parameter, since the current SyncLevel -is a property of the executing thread. Mutual exclusion for control methods -is now implemented with a mutex instead of a semaphore. - -Fixed three instances of the use of the C shift operator in the bitfield -support code (exfldio.c) to avoid the use of a shift value larger than the -target data width. The behavior of C compilers is undefined in this case and -can cause unpredictable results, and therefore the case must be detected and -avoided. (Fiodor Suietov) - -Added an info message whenever an SSDT or OEM table is loaded dynamically -via the Load() or LoadTable() ASL operators. This should improve debugging -capability since it will show exactly what tables have been loaded (beyond -the tables present in the RSDT/XSDT.) - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 80.0K Code, 17.6K Data, 97.6K Total - Debug Version: 160.2K Code, 64.7K Data, 224.9K Total - Current Release: - Non-Debug Version: 80.5K Code, 17.8K Data, 98.3K Total - Debug Version: 160.8K Code, 64.8K Data, 225.6K Total - - -2) iASL Compiler/Disassembler and Tools: - -No changes for this release. - ----------------------------------------- -08 June 2006. Summary of changes for version 20060608: - -1) ACPI CA Core Subsystem: - -Converted the locking mutex used for the ACPI hardware to a spinlock. This -change should eliminate all problems caused by attempting to acquire a -semaphore at interrupt level, and it means that all ACPICA external -interfaces that directly access the ACPI hardware can be safely called from -interrupt level. OSL code that implements the semaphore interfaces should be -able to eliminate any workarounds for being called at interrupt level. - -Fixed a regression introduced in 20060526 where the ACPI device -initialization could be prematurely aborted with an AE_NOT_FOUND if a device -did not have an optional _INI method. - -Fixed an IndexField issue where a write to the Data Register should be -limited in size to the AccessSize (width) of the IndexField itself. (BZ 433, -Fiodor Suietov) - -Fixed problem reports (Valery Podrezov) integrated: -- Allow store of ThermalZone objects to Debug object (BZ 5369/5370) - -Fixed problem reports (Fiodor Suietov) integrated: -- AcpiGetTableHeader doesn't handle multiple instances correctly (BZ 364) - -Removed four global mutexes that were obsolete and were no longer being -used. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 80.0K Code, 17.7K Data, 97.7K Total - Debug Version: 160.3K Code, 64.9K Data, 225.2K Total - Current Release: - Non-Debug Version: 80.0K Code, 17.6K Data, 97.6K Total - Debug Version: 160.2K Code, 64.7K Data, 224.9K Total - - -2) iASL Compiler/Disassembler and Tools: - -Fixed a fault when using -g option (get tables from registry) on Windows -machines. - -Fixed problem reports integrated: -- Generate error if CreateField NumBits parameter is zero. (BZ 405) -- Fault if Offset/Length in Field unit is very large (BZ 432, Fiodor -Suietov) -- Global table revision override (-r) is ignored (BZ 413) - ----------------------------------------- -26 May 2006. Summary of changes for version 20060526: - -1) ACPI CA Core Subsystem: - -Restructured, flattened, and simplified the internal interfaces for -namespace object evaluation - resulting in smaller code, less CPU stack use, -and fewer interfaces. (With assistance from Mikhail Kouzmich) - -Fixed a problem with the CopyObject operator where the first parameter was -not typed correctly for the parser, interpreter, compiler, and disassembler. -Caused various errors and unexpected behavior. - -Fixed a problem where a ShiftLeft or ShiftRight of more than 64 bits -produced incorrect results with some C compilers. Since the behavior of C -compilers when the shift value is larger than the datatype width is -apparently not well defined, the interpreter now detects this condition and -simply returns zero as expected in all such cases. (BZ 395) - -Fixed problem reports (Valery Podrezov) integrated: -- Update String-to-Integer conversion to match ACPI 3.0A spec (BZ 5329) -- Allow interpreter to handle nested method declarations (BZ 5361) - -Fixed problem reports (Fiodor Suietov) integrated: -- AcpiTerminate doesn't free debug memory allocation list objects (BZ 355) -- After Core Subsystem shutdown, AcpiSubsystemStatus returns AE_OK (BZ 356) -- AcpiOsUnmapMemory for RSDP can be invoked inconsistently (BZ 357) -- Resource Manager should return AE_TYPE for non-device objects (BZ 358) -- Incomplete cleanup branch in AcpiNsEvaluateRelative (BZ 359) -- Use AcpiOsFree instead of ACPI_FREE in AcpiRsSetSrsMethodData (BZ 360) -- Incomplete cleanup branch in AcpiPsParseAml (BZ 361) -- Incomplete cleanup branch in AcpiDsDeleteWalkState (BZ 362) -- AcpiGetTableHeader returns AE_NO_ACPI_TABLES until DSDT is loaded (BZ 365) -- Status of the Global Initialization Handler call not used (BZ 366) -- Incorrect object parameter to Global Initialization Handler (BZ 367) - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 79.8K Code, 17.7K Data, 97.5K Total - Debug Version: 160.5K Code, 65.1K Data, 225.6K Total - Current Release: - Non-Debug Version: 80.0K Code, 17.7K Data, 97.7K Total - Debug Version: 160.3K Code, 64.9K Data, 225.2K Total - - -2) iASL Compiler/Disassembler and Tools: - -Modified the parser to allow the names IO, DMA, and IRQ to be used as -namespace identifiers with no collision with existing resource descriptor -macro names. This provides compatibility with other ASL compilers and is -most useful for disassembly/recompilation of existing tables without parse -errors. (With assistance from Thomas Renninger) - -Disassembler: fixed an incorrect disassembly problem with the -DataTableRegion and CopyObject operators. Fixed a possible fault during -disassembly of some Alias operators. - ----------------------------------------- -12 May 2006. Summary of changes for version 20060512: - -1) ACPI CA Core Subsystem: - -Replaced the AcpiOsQueueForExecution interface with a new interface named -AcpiOsExecute. The major difference is that the new interface does not have -a Priority parameter, this appeared to be useless and has been replaced by a -Type parameter. The Type tells the host what type of execution is being -requested, such as global lock handler, notify handler, GPE handler, etc. -This allows the host to queue and execute the request as appropriate for the -request type, possibly using different work queues and different priorities -for the various request types. This enables fixes for multithreading -deadlock problems such as BZ #5534, and will require changes to all existing -OS interface layers. (Alexey Starikovskiy and Bob Moore) - -Fixed a possible memory leak associated with the support for the so-called -"implicit return" ACPI extension. Reported by FreeBSD, BZ #6514. (Fiodor -Suietov) - -Fixed a problem with the Load() operator where a table load from an -operation region could overwrite an internal table buffer by up to 7 bytes -and cause alignment faults on IPF systems. (With assistance from Luming Yu) - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 79.7K Code, 17.7K Data, 97.4K Total - Debug Version: 160.1K Code, 65.2K Data, 225.3K Total - Current Release: - Non-Debug Version: 79.8K Code, 17.7K Data, 97.5K Total - Debug Version: 160.5K Code, 65.1K Data, 225.6K Total - - - -2) iASL Compiler/Disassembler and Tools: - -Disassembler: Implemented support to cross reference the internal namespace -and automatically generate ASL External() statements for symbols not defined -within the current table being disassembled. This will simplify the -disassembly and recompilation of interdependent tables such as SSDTs since -these statements will no longer have to be added manually. - -Disassembler: Implemented experimental support to automatically detect -invocations of external control methods and generate appropriate External() -statements. This is problematic because the AML cannot be correctly parsed -until the number of arguments for each control method is known. Currently, -standalone method invocations and invocations as the source operand of a -Store() statement are supported. - -Disassembler: Implemented support for the ASL pseudo-operators LNotEqual, -LLessEqual, and LGreaterEqual. Previously disassembled as LNot(LEqual()), -LNot(LGreater()), and LNot(LLess()), this makes the disassembled ASL code -more readable and likely closer to the original ASL source. - ----------------------------------------- -21 April 2006. Summary of changes for version 20060421: - -1) ACPI CA Core Subsystem: - -Removed a device initialization optimization introduced in 20051216 where -the _STA method was not run unless an _INI was also present for the same -device. This optimization could cause problems because it could allow _INI -methods to be run within a not-present device subtree. (If a not-present -device had no _INI, _STA would not be run, the not-present status would not -be discovered, and the children of the device would be incorrectly -traversed.) - -Implemented a new _STA optimization where namespace subtrees that do not -contain _INI are identified and ignored during device initialization. -Selectively running _STA can significantly improve boot time on large -machines (with assistance from Len Brown.) - -Implemented support for the device initialization case where the returned -_STA flags indicate a device not-present but functioning. In this case, _INI -is not run, but the device children are examined for presence, as per the -ACPI specification. - -Implemented an additional change to the IndexField support in order to -conform to MS behavior. The value written to the Index Register is not -simply a byte offset, it is a byte offset in units of the access width of -the parent Index Field. (Fiodor Suietov) - -Defined and deployed a new OSL interface, AcpiOsValidateAddress. This -interface is called during the creation of all AML operation regions, and -allows the host OS to exert control over what addresses it will allow the -AML code to access. Operation Regions whose addresses are disallowed will -cause a runtime exception when they are actually accessed (will not affect -or abort table loading.) See oswinxf or osunixxf for an example -implementation. - -Defined and deployed a new OSL interface, AcpiOsValidateInterface. This -interface allows the host OS to match the various "optional" -interface/behavior strings for the _OSI predefined control method as -appropriate (with assistance from Bjorn Helgaas.) See oswinxf or osunixxf -for an example implementation. - -Restructured and corrected various problems in the exception handling code -paths within DsCallControlMethod and DsTerminateControlMethod in dsmethod -(with assistance from Takayoshi Kochi.) - -Modified the Linux source converter to ignore quoted string literals while -converting identifiers from mixed to lower case. This will correct problems -with the disassembler and other areas where such strings must not be -modified. - -The ACPI_FUNCTION_* macros no longer require quotes around the function -name. This allows the Linux source converter to convert the names, now that -the converter ignores quoted strings. - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - - Non-Debug Version: 81.1K Code, 17.7K Data, 98.8K Total - Debug Version: 158.9K Code, 64.9K Data, 223.8K Total - Current Release: - Non-Debug Version: 79.7K Code, 17.7K Data, 97.4K Total - Debug Version: 160.1K Code, 65.2K Data, 225.3K Total - - -2) iASL Compiler/Disassembler and Tools: - -Implemented 3 new warnings for iASL, and implemented multiple warning levels -(w2 flag). - -1) Ignored timeouts: If the TimeoutValue parameter to Wait or Acquire is not -WAIT_FOREVER (0xFFFF) and the code does not examine the return value to -check for the possible timeout, a warning is issued. - -2) Useless operators: If an ASL operator does not specify an optional target -operand and it also does not use the function return value from the -operator, a warning is issued since the operator effectively does nothing. - -3) Unreferenced objects: If a namespace object is created, but never -referenced, a warning is issued. This is a warning level 2 since there are -cases where this is ok, such as when a secondary table is loaded that uses -the unreferenced objects. Even so, care is taken to only flag objects that -don't look like they will ever be used. For example, the reserved methods -(starting with an underscore) are usually not referenced because it is -expected that the OS will invoke them. - ----------------------------------------- -31 March 2006. Summary of changes for version 20060331: - -1) ACPI CA Core Subsystem: - -Implemented header file support for the following additional ACPI tables: -ASF!, BOOT, CPEP, DBGP, MCFG, SPCR, SPMI, TCPA, and WDRT. With this support, -all current and known ACPI tables are now defined in the ACPICA headers and -are available for use by device drivers and other software. - -Implemented support to allow tables that contain ACPI names with invalid -characters to be loaded. Previously, this would cause the table load to -fail, but since there are several known cases of such tables on existing -machines, this change was made to enable ACPI support for them. Also, this -matches the behavior of the Microsoft ACPI implementation. - -Fixed a couple regressions introduced during the memory optimization in the -20060317 release. The namespace node definition required additional -reorganization and an internal datatype that had been changed to 8-bit was -restored to 32-bit. (Valery Podrezov) - -Fixed a problem where a null pointer passed to AcpiUtDeleteGenericState -could be passed through to AcpiOsReleaseObject which is unexpected. Such -null pointers are now trapped and ignored, matching the behavior of the -previous implementation before the deployment of AcpiOsReleaseObject. -(Valery Podrezov, Fiodor Suietov) - -Fixed a memory mapping leak during the deletion of a SystemMemory operation -region where a cached memory mapping was not deleted. This became a -noticeable problem for operation regions that are defined within frequently -used control methods. (Dana Meyers) - -Reorganized the ACPI table header files into two main files: one for the -ACPI tables consumed by the ACPICA core, and another for the miscellaneous -ACPI tables that are consumed by the drivers and other software. The various -FADT definitions were merged into one common section and three different -tables (ACPI 1.0, 1.0+, and 2.0) - -Example Code and Data Size: These are the sizes for the OS-independent -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The -debug version of the code includes the debug output trace mechanism and has -a much larger code and data size. - - Previous Release: - Non-Debug Version: 80.9K Code, 17.7K Data, 98.6K Total - Debug Version: 158.7K Code, 64.8K Data, 223.5K Total - Current Release: - Non-Debug Version: 81.1K Code, 17.7K Data, 98.8K Total - Debug Version: 158.9K Code, 64.9K Data, 223.8K Total - - -2) iASL Compiler/Disassembler and Tools: - -Disassembler: Implemented support to decode and format all non-AML ACPI -tables (tables other than DSDTs and SSDTs.) This includes the new tables -added to the ACPICA headers, therefore all current and known ACPI tables are -supported. - -Disassembler: The change to allow ACPI names with invalid characters also -enables the disassembly of such tables. Invalid characters within names are -changed to '*' to make the name printable; the iASL compiler will still -generate an error for such names, however, since this is an invalid ACPI -character. - -Implemented an option for AcpiXtract (-a) to extract all tables found in the -input file. The default invocation extracts only the DSDTs and SSDTs. - -Fixed a couple of gcc generation issues for iASL and AcpiExec and added a -makefile for the AcpiXtract utility. - ----------------------------------------- -17 March 2006. Summary of changes for version 20060317: - -1) ACPI CA Core Subsystem: - -Implemented the use of a cache object for all internal namespace nodes. -Since there are about 1000 static nodes in a typical system, this will -decrease memory use for cache implementations that minimize per-allocation -overhead (such as a slab allocator.) - -Removed the reference count mechanism for internal namespace nodes, since it -was deemed unnecessary. This reduces the size of each namespace node by -about 5%-10% on all platforms. Nodes are now 20 bytes for the 32-bit case, -and 32 bytes for the 64-bit case. - -Optimized several internal data structures to reduce object size on 64-bit -platforms by packing data within the 64-bit alignment. This includes the -frequently used ACPI_OPERAND_OBJECT, of which there can be ~1000 static -instances corresponding to the namespace objects. - -Added two new strings for the predefined _OSI method: "Windows 2001.1 SP1" -and "Windows 2006". - -Split the allocation tracking mechanism out to a separate file, from -utalloc.c to uttrack.c. This mechanism appears to be only useful for -application-level code. Kernels may wish to not include uttrack.c in -distributions. - -Removed all remnants of the obsolete ACPI_REPORT_* macros and the associated -code. (These macros have been replaced by the ACPI_ERROR and ACPI_WARNING -macros.) - -Code and Data Size: These are the sizes for the acpica.lib produced by the -Microsoft Visual C++ 6.0 32-bit compiler. The 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 much 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: - Non-Debug Version: 81.1K Code, 17.8K Data, 98.9K Total - Debug Version: 161.6K Code, 65.7K Data, 227.3K Total - Current Release: - Non-Debug Version: 80.9K Code, 17.7K Data, 98.6K Total - Debug Version: 158.7K Code, 64.8K Data, 223.5K Total - - -2) iASL Compiler/Disassembler and Tools: - -Implemented an ANSI C version of the acpixtract utility. This version will -automatically extract the DSDT and all SSDTs from the input acpidump text -file and dump the binary output to separate files. It can also display a -summary of the input file including the headers for each table found and -will extract any single ACPI table, with any signature. (See -source/tools/acpixtract) - ----------------------------------------- -10 March 2006. Summary of changes for version 20060310: - -1) ACPI CA Core Subsystem: - -Tagged all external interfaces to the subsystem with the new -ACPI_EXPORT_SYMBOL macro. This macro can be defined as necessary to assist -kernel integration. For Linux, the macro resolves to the EXPORT_SYMBOL -macro. The default definition is NULL. - -Added the ACPI_THREAD_ID type for the return value from AcpiOsGetThreadId. -This allows the host to define this as necessary to simplify kernel -integration. The default definition is ACPI_NATIVE_UINT. - -Fixed two interpreter problems related to error processing, the deletion of -objects, and placing invalid pointers onto the internal operator result -stack. BZ 6028, 6151 (Valery Podrezov) - -Increased the reference count threshold where a warning is emitted for large -reference counts in order to eliminate unnecessary warnings on systems with -large namespaces (especially 64-bit.) Increased the value from 0x400 to -0x800. - -Due to universal disagreement as to the meaning of the 'c' in the calloc() -function, the ACPI_MEM_CALLOCATE macro has been renamed to -ACPI_ALLOCATE_ZEROED so that the purpose of the interface is 'clear'. -ACPI_MEM_ALLOCATE and ACPI_MEM_FREE are renamed to ACPI_ALLOCATE and -ACPI_FREE. - -Code and Data Size: These are the sizes for the acpica.lib produced by the -Microsoft Visual C++ 6.0 32-bit compiler. The 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 much 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: - Non-Debug Version: 81.0K Code, 17.8K Data, 98.8K Total - Debug Version: 161.4K Code, 65.7K Data, 227.1K Total - Current Release: - Non-Debug Version: 81.1K Code, 17.8K Data, 98.9K Total - Debug Version: 161.6K Code, 65.7K Data, 227.3K Total - - -2) iASL Compiler/Disassembler: - -Disassembler: implemented support for symbolic resource descriptor -references. If a CreateXxxxField operator references a fixed offset within a -resource descriptor, a name is assigned to the descriptor and the offset is -translated to the appropriate resource tag and pathname. The addition of -this support brings the disassembled code very close to the original ASL -source code and helps eliminate run-time errors when the disassembled code -is modified (and recompiled) in such a way as to invalidate the original -fixed offsets. - -Implemented support for a Descriptor Name as the last parameter to the ASL -Register() macro. This parameter was inadvertently left out of the ACPI -specification, and will be added for ACPI 3.0b. - -Fixed a problem where the use of the "_OSI" string (versus the full path -"\_OSI") caused an internal compiler error. ("No back ptr to op") - -Fixed a problem with the error message that occurs when an invalid string is -used for a _HID object (such as one with an embedded asterisk: "*PNP010A".) -The correct message is now displayed. - ----------------------------------------- -17 February 2006. Summary of changes for version 20060217: - -1) ACPI CA Core Subsystem: - -Implemented a change to the IndexField support to match the behavior of the -Microsoft AML interpreter. The value written to the Index register is now a -byte offset, no longer an index based upon the width of the Data register. -This should fix IndexField problems seen on some machines where the Data -register is not exactly one byte wide. The ACPI specification will be -clarified on this point. - -Fixed a problem where several resource descriptor types could overrun the -internal descriptor buffer due to size miscalculation: VendorShort, -VendorLong, and Interrupt. This was noticed on IA64 machines, but could -affect all platforms. - -Fixed a problem where individual resource descriptors were misaligned within -the internal buffer, causing alignment faults on IA64 platforms. - -Code and Data Size: These are the sizes for the acpica.lib produced by the -Microsoft Visual C++ 6.0 32-bit compiler. The 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 much 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: - Non-Debug Version: 81.1K Code, 17.8K Data, 98.9K Total - Debug Version: 161.3K Code, 65.6K Data, 226.9K Total - Current Release: - Non-Debug Version: 81.0K Code, 17.8K Data, 98.8K Total - Debug Version: 161.4K Code, 65.7K Data, 227.1K Total - - -2) iASL Compiler/Disassembler: - -Implemented support for new reserved names: _WDG and _WED are Microsoft -extensions for Windows Instrumentation Management, _TDL is a new ACPI- -defined method (Throttling Depth Limit.) - -Fixed a problem where a zero-length VendorShort or VendorLong resource -descriptor was incorrectly emitted as a descriptor of length one. - ----------------------------------------- -10 February 2006. Summary of changes for version 20060210: - -1) ACPI CA Core Subsystem: - -Removed a couple of extraneous ACPI_ERROR messages that appeared during -normal execution. These became apparent after the conversion from -ACPI_DEBUG_PRINT. - -Fixed a problem where the CreateField operator could hang if the BitIndex or -NumBits parameter referred to a named object. (Valery Podrezov, BZ 5359) - -Fixed a problem where a DeRefOf operation on a buffer object incorrectly -failed with an exception. This also fixes a couple of related RefOf and -DeRefOf issues. (Valery Podrezov, BZ 5360/5392/5387) - -Fixed a problem where the AE_BUFFER_LIMIT exception was returned instead of -AE_STRING_LIMIT on an out-of-bounds Index() operation. (Valery Podrezov, BZ -5480) - -Implemented a memory cleanup at the end of the execution of each iteration -of an AML While() loop, preventing the accumulation of outstanding objects. -(Valery Podrezov, BZ 5427) - -Eliminated a chunk of duplicate code in the object resolution code. (Valery -Podrezov, BZ 5336) - -Fixed several warnings during the 64-bit code generation. - -The AcpiSrc source code conversion tool now inserts one line of whitespace -after an if() statement that is followed immediately by a comment, improving -readability of the Linux code. - -Code and Data Size: The current and previous library sizes for the core -subsystem are shown below. These are the code and data sizes for the -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 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 much 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: - Non-Debug Version: 81.0K Code, 17.9K Data, 98.9K Total - Debug Version: 161.3K Code, 65.7K Data, 227.0K Total - Current Release: - Non-Debug Version: 81.1K Code, 17.8K Data, 98.9K Total - Debug Version: 161.3K Code, 65.6K Data, 226.9K Total - - -2) iASL Compiler/Disassembler: - -Fixed a problem with the disassembly of a BankField operator with a complex -expression for the BankValue parameter. - ----------------------------------------- -27 January 2006. Summary of changes for version 20060127: - -1) ACPI CA Core Subsystem: - -Implemented support in the Resource Manager to allow unresolved namestring -references within resource package objects for the _PRT method. This support -is in addition to the previously implemented unresolved reference support -within the AML parser. If the interpreter slack mode is enabled, these -unresolved references will be passed through to the caller as a NULL package -entry. - -Implemented and deployed new macros and functions for error and warning -messages across the subsystem. These macros are simpler and generate less -code than their predecessors. The new macros ACPI_ERROR, ACPI_EXCEPTION, -ACPI_WARNING, and ACPI_INFO replace the ACPI_REPORT_* macros. The older -macros remain defined to allow ACPI drivers time to migrate to the new -macros. - -Implemented the ACPI_CPU_FLAGS type to simplify host OS integration of the -Acquire/Release Lock OSL interfaces. - -Fixed a problem where Alias ASL operators are sometimes not correctly -resolved, in both the interpreter and the iASL compiler. - -Fixed several problems with the implementation of the ConcatenateResTemplate -ASL operator. As per the ACPI specification, zero length buffers are now -treated as a single EndTag. One-length buffers always cause a fatal -exception. Non-zero length buffers that do not end with a full 2-byte EndTag -cause a fatal exception. - -Fixed a possible structure overwrite in the AcpiGetObjectInfo external -interface. (With assistance from Thomas Renninger) - -Code and Data Size: The current and previous library sizes for the core -subsystem are shown below. These are the code and data sizes for the -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 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 much 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: - Non-Debug Version: 83.1K Code, 18.4K Data, 101.5K Total - Debug Version: 163.2K Code, 66.2K Data, 229.4K Total - Current Release: - Non-Debug Version: 81.0K Code, 17.9K Data, 98.9K Total - Debug Version: 161.3K Code, 65.7K Data, 227.0K Total - - -2) iASL Compiler/Disassembler: - -Fixed an internal error that was generated for any forward references to ASL -Alias objects. - ----------------------------------------- -13 January 2006. Summary of changes for version 20060113: - -1) ACPI CA Core Subsystem: - -Added 2006 copyright to all module headers and signons. This affects -virtually every file in the ACPICA core subsystem, iASL compiler, and the -utilities. - -Enhanced the ACPICA error reporting in order to simplify user migration to -the non-debug version of ACPICA. Replaced all instances of the -ACPI_DEBUG_PRINT macro invoked at the ACPI_DB_ERROR and ACPI_DB_WARN debug -levels with the ACPI_REPORT_ERROR and ACPI_REPORT_WARNING macros, -respectively. This preserves all error and warning messages in the non-debug -version of the ACPICA code (this has been referred to as the "debug lite" -option.) Over 200 cases were converted to create a total of over 380 -error/warning messages across the ACPICA code. This increases the code and -data size of the default non-debug version of the code somewhat (about 13K), -but all error/warning reporting may be disabled if desired (and code -eliminated) by specifying the ACPI_NO_ERROR_MESSAGES compile-time -configuration option. The size of the debug version of ACPICA remains about -the same. - -Fixed a memory leak within the AML Debugger "Set" command. One object was -not properly deleted for every successful invocation of the command. - -Code and Data Size: The current and previous library sizes for the core -subsystem are shown below. These are the code and data sizes for the -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 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 much 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: - Non-Debug Version: 76.6K Code, 12.3K Data, 88.9K Total - Debug Version: 163.7K Code, 67.5K Data, 231.2K Total - Current Release: - Non-Debug Version: 83.1K Code, 18.4K Data, 101.5K Total - Debug Version: 163.2K Code, 66.2K Data, 229.4K Total - - -2) iASL Compiler/Disassembler: - -The compiler now officially supports the ACPI 3.0a specification that was -released on December 30, 2005. (Specification is available at www.acpi.info) - ----------------------------------------- -16 December 2005. Summary of changes for version 20051216: - -1) ACPI CA Core Subsystem: - -Implemented optional support to allow unresolved names within ASL Package -objects. A null object is inserted in the package when a named reference -cannot be located in the current namespace. Enabled via the interpreter -slack flag, this should eliminate AE_NOT_FOUND exceptions seen on machines -that contain such code. - -Implemented an optimization to the initialization sequence that can improve -boot time. During ACPI device initialization, the _STA method is now run if -and only if the _INI method exists. The _STA method is used to determine if -the device is present; An _INI can only be run if _STA returns present, but -it is a waste of time to run the _STA method if the _INI does not exist. -(Prototype and assistance from Dong Wei) - -Implemented use of the C99 uintptr_t for the pointer casting macros if it is -available in the current compiler. Otherwise, the default (void *) cast is -used as before. - -Fixed some possible memory leaks found within the execution path of the -Break, Continue, If, and CreateField operators. (Valery Podrezov) - -Fixed a problem introduced in the 20051202 release where an exception is -generated during method execution if a control method attempts to declare -another method. - -Moved resource descriptor string constants that are used by both the AML -disassembler and AML debugger to the common utilities directory so that -these components are independent. - -Implemented support in the AcpiExec utility (-e switch) to globally ignore -exceptions during control method execution (method is not aborted.) - -Added the rsinfo.c source file to the AcpiExec makefile for Linux/Unix -generation. - -Code and Data Size: The current and previous library sizes for the core -subsystem are shown below. These are the code and data sizes for the -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 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 much 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: - Non-Debug Version: 76.3K Code, 12.3K Data, 88.6K Total - Debug Version: 163.2K Code, 67.4K Data, 230.6K Total - Current Release: - Non-Debug Version: 76.6K Code, 12.3K Data, 88.9K Total - Debug Version: 163.7K Code, 67.5K Data, 231.2K Total - - -2) iASL Compiler/Disassembler: - -Fixed a problem where a CPU stack overflow fault could occur if a recursive -method call was made from within a Return statement. - ----------------------------------------- -02 December 2005. Summary of changes for version 20051202: - -1) ACPI CA Core Subsystem: - -Modified the parsing of control methods to no longer create namespace -objects during the first pass of the parse. Objects are now created only -during the execute phase, at the moment the namespace creation operator is -encountered in the AML (Name, OperationRegion, CreateByteField, etc.) This -should eliminate ALREADY_EXISTS exceptions seen on some machines where -reentrant control methods are protected by an AML mutex. The mutex will now -correctly block multiple threads from attempting to create the same object -more than once. - -Increased the number of available Owner Ids for namespace object tracking -from 32 to 255. This should eliminate the OWNER_ID_LIMIT exceptions seen on -some machines with a large number of ACPI tables (either static or dynamic). - -Fixed a problem with the AcpiExec utility where a fault could occur when the --b switch (batch mode) is used. - -Enhanced the namespace dump routine to output the owner ID for each -namespace object. - -Code and Data Size: The current and previous library sizes for the core -subsystem are shown below. These are the code and data sizes for the -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 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 much 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: - Non-Debug Version: 76.3K Code, 12.3K Data, 88.6K Total - Debug Version: 163.0K Code, 67.4K Data, 230.4K Total - Current Release: - Non-Debug Version: 76.3K Code, 12.3K Data, 88.6K Total - Debug Version: 163.2K Code, 67.4K Data, 230.6K Total - - -2) iASL Compiler/Disassembler: - -Fixed a parse error during compilation of certain Switch/Case constructs. To -simplify the parse, the grammar now allows for multiple Default statements -and this error is now detected and flagged during the analysis phase. - -Disassembler: The disassembly now includes the contents of the original -table header within a comment at the start of the file. This includes the -name and version of the original ASL compiler. - ----------------------------------------- -17 November 2005. Summary of changes for version 20051117: - -1) ACPI CA Core Subsystem: - -Fixed a problem in the AML parser where the method thread count could be -decremented below zero if any errors occurred during the method parse phase. -This should eliminate AE_AML_METHOD_LIMIT exceptions seen on some machines. -This also fixed a related regression with the mechanism that detects and -corrects methods that cannot properly handle reentrancy (related to the -deployment of the new OwnerId mechanism.) - -Eliminated the pre-parsing of control methods (to detect errors) during -table load. Related to the problem above, this was causing unwind issues if -any errors occurred during the parse, and it seemed to be overkill. A table -load should not be aborted if there are problems with any single control -method, thus rendering this feature rather pointless. - -Fixed a problem with the new table-driven resource manager where an internal -buffer overflow could occur for small resource templates. - -Implemented a new external interface, AcpiGetVendorResource. This interface -will find and return a vendor-defined resource descriptor within a _CRS or -_PRS method via an ACPI 3.0 UUID match. With assistance from Bjorn Helgaas. - -Removed the length limit (200) on string objects as per the upcoming ACPI -3.0A specification. This affects the following areas of the interpreter: 1) -any implicit conversion of a Buffer to a String, 2) a String object result -of the ASL Concatentate operator, 3) the String object result of the ASL -ToString operator. - -Fixed a problem in the Windows OS interface layer (OSL) where a WAIT_FOREVER -on a semaphore object would incorrectly timeout. This allows the -multithreading features of the AcpiExec utility to work properly under -Windows. - -Updated the Linux makefiles for the iASL compiler and AcpiExec to include -the recently added file named "utresrc.c". - -Code and Data Size: The current and previous library sizes for the core -subsystem are shown below. These are the code and data sizes for the -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 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 much 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: - Non-Debug Version: 76.2K Code, 12.3K Data, 88.5K Total - Debug Version: 163.0K Code, 67.4K Data, 230.4K Total - Current Release: - Non-Debug Version: 76.3K Code, 12.3K Data, 88.6K Total - Debug Version: 163.0K Code, 67.4K Data, 230.4K Total - - -2) iASL Compiler/Disassembler: - -Removed the limit (200) on string objects as per the upcoming ACPI 3.0A -specification. For the iASL compiler, this means that string literals within -the source ASL can be of any length. - -Enhanced the listing output to dump the AML code for resource descriptors -immediately after the ASL code for each descriptor, instead of in a block at -the end of the entire resource template. - -Enhanced the compiler debug output to dump the entire original parse tree -constructed during the parse phase, before any transforms are applied to the -tree. The transformed tree is dumped also. - ----------------------------------------- -02 November 2005. Summary of changes for version 20051102: - -1) ACPI CA Core Subsystem: - -Modified the subsystem initialization sequence to improve GPE support. The -GPE initialization has been split into two parts in order to defer execution -of the _PRW methods (Power Resources for Wake) until after the hardware is -fully initialized and the SCI handler is installed. This allows the _PRW -methods to access fields protected by the Global Lock. This will fix systems -where a NO_GLOBAL_LOCK exception has been seen during initialization. - -Converted the ACPI internal object disassemble and display code within the -AML debugger to fully table-driven operation, reducing code size and -increasing maintainability. - -Fixed a regression with the ConcatenateResTemplate() ASL operator introduced -in the 20051021 release. - -Implemented support for "local" internal ACPI object types within the -debugger "Object" command and the AcpiWalkNamespace external interfaces. -These local types include RegionFields, BankFields, IndexFields, Alias, and -reference objects. - -Moved common AML resource handling code into a new file, "utresrc.c". This -code is shared by both the Resource Manager and the AML Debugger. - -Code and Data Size: The current and previous library sizes for the core -subsystem are shown below. These are the code and data sizes for the -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 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 much 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: - Non-Debug Version: 76.1K Code, 12.2K Data, 88.3K Total - Debug Version: 163.5K Code, 67.0K Data, 230.5K Total - Current Release: - Non-Debug Version: 76.2K Code, 12.3K Data, 88.5K Total - Debug Version: 163.0K Code, 67.4K Data, 230.4K Total - - -2) iASL Compiler/Disassembler: - -Fixed a problem with very large initializer lists (more than 4000 elements) -for both Buffer and Package objects where the parse stack could overflow. - -Enhanced the pre-compile source code scan for non-ASCII characters to ignore -characters within comment fields. The scan is now always performed and is no -longer optional, detecting invalid characters within a source file -immediately rather than during the parse phase or later. - -Enhanced the ASL grammar definition to force early reductions on all list- -style grammar elements so that the overall parse stack usage is greatly -reduced. This should improve performance and reduce the possibility of parse -stack overflow. - -Eliminated all reduce/reduce conflicts in the iASL parser generation. Also, -with the addition of a %expected statement, the compiler generates from -source with no warnings. - -Fixed a possible segment fault in the disassembler if the input filename -does not contain a "dot" extension (Thomas Renninger). - ----------------------------------------- -21 October 2005. Summary of changes for version 20051021: - -1) ACPI CA Core Subsystem: - -Implemented support for the EM64T and other x86-64 processors. This -essentially entails recognizing that these processors support non-aligned -memory transfers. Previously, all 64-bit processors were assumed to lack -hardware support for non-aligned transfers. - -Completed conversion of the Resource Manager to nearly full table-driven -operation. Specifically, the resource conversion code (convert AML to -internal format and the reverse) and the debug code to dump internal -resource descriptors are fully table-driven, reducing code and data size and -improving maintainability. - -The OSL interfaces for Acquire and Release Lock now use a 64-bit flag word -on 64-bit processors instead of a fixed 32-bit word. (With assistance from -Alexey Starikovskiy) - -Implemented support within the resource conversion code for the Type- -Specific byte within the various ACPI 3.0 *WordSpace macros. - -Fixed some issues within the resource conversion code for the type-specific -flags for both Memory and I/O address resource descriptors. For Memory, -implemented support for the MTP and TTP flags. For I/O, split the TRS and -TTP flags into two separate fields. - -Code and Data Size: The current and previous library sizes for the core -subsystem are shown below. These are the code and data sizes for the -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 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 much 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: - Non-Debug Version: 77.1K Code, 12.1K Data, 89.2K Total - Debug Version: 168.0K Code, 68.3K Data, 236.3K Total - Current Release: - Non-Debug Version: 76.1K Code, 12.2K Data, 88.3K Total - Debug Version: 163.5K Code, 67.0K Data, 230.5K Total - - - -2) iASL Compiler/Disassembler: - -Relaxed a compiler restriction that disallowed a ResourceIndex byte if the -corresponding ResourceSource string was not also present in a resource -descriptor declaration. This restriction caused problems with existing -AML/ASL code that includes the Index byte without the string. When such AML -was disassembled, it could not be compiled without modification. Further, -the modified code created a resource template with a different size than the -original, breaking code that used fixed offsets into the resource template -buffer. - -Removed a recent feature of the disassembler to ignore a lone ResourceIndex -byte. This byte is now emitted if present so that the exact AML can be -reproduced when the disassembled code is recompiled. - -Improved comments and text alignment for the resource descriptor code -emitted by the disassembler. - -Implemented disassembler support for the ACPI 3.0 AccessSize field within a -Register() resource descriptor. - ----------------------------------------- -30 September 2005. Summary of changes for version 20050930: - -1) ACPI CA Core Subsystem: - -Completed a major overhaul of the Resource Manager code - specifically, -optimizations in the area of the AML/internal resource conversion code. The -code has been optimized to simplify and eliminate duplicated code, CPU stack -use has been decreased by optimizing function parameters and local -variables, and naming conventions across the manager have been standardized -for clarity and ease of maintenance (this includes function, parameter, -variable, and struct/typedef names.) The update may force changes in some -driver code, depending on how resources are handled by the host OS. - -All Resource Manager dispatch and information tables have been moved to a -single location for clarity and ease of maintenance. One new file was -created, named "rsinfo.c". - -The ACPI return macros (return_ACPI_STATUS, etc.) have been modified to -guarantee that the argument is not evaluated twice, making them less prone -to macro side-effects. However, since there exists the possibility of -additional stack use if a particular compiler cannot optimize them (such as -in the debug generation case), the original macros are optionally available. -Note that some invocations of the return_VALUE macro may now cause size -mismatch warnings; the return_UINT8 and return_UINT32 macros are provided to -eliminate these. (From Randy Dunlap) - -Implemented a new mechanism to enable debug tracing for individual control -methods. A new external interface, AcpiDebugTrace, is provided to enable -this mechanism. The intent is to allow the host OS to easily enable and -disable tracing for problematic control methods. This interface can be -easily exposed to a user or debugger interface if desired. See the file -psxface.c for details. - -AcpiUtCallocate will now return a valid pointer if a length of zero is -specified - a length of one is used and a warning is issued. This matches -the behavior of AcpiUtAllocate. - -Code and Data Size: The current and previous library sizes for the core -subsystem are shown below. These are the code and data sizes for the -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 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 much 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: - Non-Debug Version: 77.5K Code, 12.0K Data, 89.5K Total - Debug Version: 168.1K Code, 68.4K Data, 236.5K Total - Current Release: - Non-Debug Version: 77.1K Code, 12.1K Data, 89.2K Total - Debug Version: 168.0K Code, 68.3K Data, 236.3K Total - - -2) iASL Compiler/Disassembler: - -A remark is issued if the effective compile-time length of a package or -buffer is zero. Previously, this was a warning. - ----------------------------------------- -16 September 2005. Summary of changes for version 20050916: - -1) ACPI CA Core Subsystem: - -Fixed a problem within the Resource Manager where support for the Generic -Register descriptor was not fully implemented. This descriptor is now fully -recognized, parsed, disassembled, and displayed. - -Completely restructured the Resource Manager code to utilize table-driven -dispatch and lookup, eliminating many of the large switch() statements. This -reduces overall subsystem code size and code complexity. Affects the -resource parsing and construction, disassembly, and debug dump output. - -Cleaned up and restructured the debug dump output for all resource -descriptors. Improved readability of the output and reduced code size. - -Fixed a problem where changes to internal data structures caused the -optional ACPI_MUTEX_DEBUG code to fail compilation if specified. - -Code and Data Size: The current and previous library sizes for the core -subsystem are shown below. These are the code and data sizes for the -acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. 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 much 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: - Non-Debug Version: 78.4K Code, 11.8K Data, 90.2K Total - Debug Version: 169.6K Code, 69.9K Data, 239.5K Total - Current Release: - Non-Debug Version: 77.5K Code, 12.0K Data, 89.5K Total - Debug Version: 168.1K Code, 68.4K Data, 236.5K Total - - -2) iASL Compiler/Disassembler: - -Updated the disassembler to automatically insert an EndDependentFn() macro -into the ASL stream if this macro is missing in the original AML code, -simplifying compilation of the resulting ASL module. - -Fixed a problem in the disassembler where a disassembled ResourceSource -string (within a large resource descriptor) was not surrounded by quotes and -not followed by a comma, causing errors when the resulting ASL module was -compiled. Also, escape sequences within a ResourceSource string are now -handled correctly (especially "\\") - ----------------------------------------- -02 September 2005. Summary of changes for version 20050902: - -1) ACPI CA Core Subsystem: - -Fixed a problem with the internal Owner ID allocation and deallocation -mechanisms for control method execution and recursive method invocation. -This should eliminate the OWNER_ID_LIMIT exceptions and "Invalid OwnerId" -messages seen on some systems. Recursive method invocation depth is -currently limited to 255. (Alexey Starikovskiy) - -Completely eliminated all vestiges of support for the "module-level -executable code" until this support is fully implemented and debugged. This -should eliminate the NO_RETURN_VALUE exceptions seen during table load on -some systems that invoke this support. - -Fixed a problem within the resource manager code where the transaction flags -for a 64-bit address descriptor were handled incorrectly in the type- -specific flag byte. - -Consolidated duplicate code within the address descriptor resource manager -code, reducing overall subsystem code size. - -Fixed a fault when using the AML debugger "disassemble" command to -disassemble individual control methods. - -Removed references to the "release_current" directory within the Unix -release package. - -Code and Data Size: The current and previous 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. 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 much 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: - Non-Debug Version: 78.6K Code, 11.7K Data, 90.3K Total - Debug Version: 170.0K Code, 69.9K Data, 239.9K Total - Current Release: - Non-Debug Version: 78.4K Code, 11.8K Data, 90.2K Total - Debug Version: 169.6K Code, 69.9K Data, 239.5K Total - - -2) iASL Compiler/Disassembler: - -Implemented an error check for illegal duplicate values in the interrupt and -dma lists for the following ASL macros: Dma(), Irq(), IrqNoFlags(), and -Interrupt(). - -Implemented error checking for the Irq() and IrqNoFlags() macros to detect -too many values in the interrupt list (16 max) and invalid values in the -list (range 0 - 15) - -The maximum length string literal within an ASL file is now restricted to -200 characters as per the ACPI specification. - -Fixed a fault when using the -ln option (generate namespace listing). - -Implemented an error check to determine if a DescriptorName within a -resource descriptor has already been used within the current scope. - ----------------------------------------- -15 August 2005. Summary of changes for version 20050815: - -1) ACPI CA Core Subsystem: - -Implemented a full bytewise compare to determine if a table load request is -attempting to load a duplicate table. The compare is performed if the table -signatures and table lengths match. This will allow different tables with -the same OEM Table ID and revision to be loaded - probably against the ACPI -specification, but discovered in the field nonetheless. - -Added the changes.txt logfile to each of the zipped release packages. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.6K Code, 11.7K Data, 90.3K Total - Debug Version: 167.0K Code, 69.9K Data, 236.9K Total - Current Release: - Non-Debug Version: 78.6K Code, 11.7K Data, 90.3K Total - Debug Version: 170.0K Code, 69.9K Data, 239.9K Total - - -2) iASL Compiler/Disassembler: - -Fixed a problem where incorrect AML code could be generated for Package -objects if optimization is disabled (via the -oa switch). - -Fixed a problem with where incorrect AML code is generated for variable- -length packages when the package length is not specified and the number of -initializer values is greater than 255. - - ----------------------------------------- -29 July 2005. Summary of changes for version 20050729: - -1) ACPI CA Core Subsystem: - -Implemented support to ignore an attempt to install/load a particular ACPI -table more than once. Apparently there exists BIOS code that repeatedly -attempts to load the same SSDT upon certain events. With assistance from -Venkatesh Pallipadi. - -Restructured the main interface to the AML parser in order to correctly -handle all exceptional conditions. This will prevent leakage of the OwnerId -resource and should eliminate the AE_OWNER_ID_LIMIT exceptions seen on some -machines. With assistance from Alexey Starikovskiy. - -Support for "module level code" has been disabled in this version due to a -number of issues that have appeared on various machines. The support can be -enabled by defining ACPI_ENABLE_MODULE_LEVEL_CODE during subsystem -compilation. When the issues are fully resolved, the code will be enabled by -default again. - -Modified the internal functions for debug print support to define the -FunctionName parameter as a (const char *) for compatibility with compiler -built-in macros such as __FUNCTION__, etc. - -Linted the entire ACPICA source tree for both 32-bit and 64-bit. - -Implemented support to display an object count summary for the AML Debugger -commands Object and Methods. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.6K Code, 11.6K Data, 90.2K Total - Debug Version: 170.0K Code, 69.7K Data, 239.7K Total - Current Release: - Non-Debug Version: 78.6K Code, 11.7K Data, 90.3K Total - Debug Version: 167.0K Code, 69.9K Data, 236.9K Total - - -2) iASL Compiler/Disassembler: - -Fixed a regression that appeared in the 20050708 version of the compiler -where an error message was inadvertently emitted for invocations of the _OSI -reserved control method. - ----------------------------------------- -08 July 2005. Summary of changes for version 20050708: - -1) ACPI CA Core Subsystem: - -The use of the CPU stack in the debug version of the subsystem has been -considerably reduced. Previously, a debug structure was declared in every -function that used the debug macros. This structure has been removed in -favor of declaring the individual elements as parameters to the debug -functions. This reduces the cumulative stack use during nested execution of -ACPI function calls at the cost of a small increase in the code size of the -debug version of the subsystem. With assistance from Alexey Starikovskiy and -Len Brown. - -Added the ACPI_GET_FUNCTION_NAME macro to enable the compiler-dependent -headers to define a macro that will return the current function name at -runtime (such as __FUNCTION__ or _func_, etc.) The function name is used by -the debug trace output. If ACPI_GET_FUNCTION_NAME is not defined in the -compiler-dependent header, the function name is saved on the CPU stack (one -pointer per function.) This mechanism is used because apparently there -exists no standard ANSI-C defined macro that that returns the function name. - -Redesigned and reimplemented the "Owner ID" mechanism used to track -namespace objects created/deleted by ACPI tables and control method -execution. A bitmap is now used to allocate and free the IDs, thus solving -the wraparound problem present in the previous implementation. The size of -the namespace node descriptor was reduced by 2 bytes as a result (Alexey -Starikovskiy). - -Removed the UINT32_BIT and UINT16_BIT types that were used for the bitfield -flag definitions within the headers for the predefined ACPI tables. These -have been replaced by UINT8_BIT in order to increase the code portability of -the subsystem. If the use of UINT8 remains a problem, we may be forced to -eliminate bitfields entirely because of a lack of portability. - -Enhanced the performance of the AcpiUtUpdateObjectReference procedure. This -is a frequently used function and this improvement increases the performance -of the entire subsystem (Alexey Starikovskiy). - -Fixed several possible memory leaks and the inverse - premature object -deletion (Alexey Starikovskiy). - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.6K Code, 11.5K Data, 90.1K Total - Debug Version: 165.2K Code, 69.6K Data, 234.8K Total - Current Release: - Non-Debug Version: 78.6K Code, 11.6K Data, 90.2K Total - Debug Version: 170.0K Code, 69.7K Data, 239.7K Total - ----------------------------------------- -24 June 2005. Summary of changes for version 20050624: - -1) ACPI CA Core Subsystem: - -Modified the new OSL cache interfaces to use ACPI_CACHE_T as the type for -the host-defined cache object. This allows the OSL implementation to define -and type this object in any manner desired, simplifying the OSL -implementation. For example, ACPI_CACHE_T is defined as kmem_cache_t for -Linux, and should be defined in the OS-specific header file for other -operating systems as required. - -Changed the interface to AcpiOsAcquireObject to directly return the -requested object as the function return (instead of ACPI_STATUS.) This -change was made for performance reasons, since this is the purpose of the -interface in the first place. AcpiOsAcquireObject is now similar to the -AcpiOsAllocate interface. - -Implemented a new AML debugger command named Businfo. This command displays -information about all devices that have an associate _PRT object. The _ADR, -_HID, _UID, and _CID are displayed for these devices. - -Modified the initialization sequence in AcpiInitializeSubsystem to call the -OSL interface AcpiOslInitialize first, before any local initialization. This -change was required because the global initialization now calls OSL -interfaces. - -Enhanced the Dump command to display the entire contents of Package objects -(including all sub-objects and their values.) - -Restructured the code base to split some files because of size and/or -because the code logically belonged in a separate file. New files are listed -below. All makefiles and project files included in the ACPI CA release have -been updated. - utilities/utcache.c /* Local cache interfaces */ - utilities/utmutex.c /* Local mutex support */ - utilities/utstate.c /* State object support */ - interpreter/parser/psloop.c /* Main AML parse loop */ - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.3K Code, 11.6K Data, 89.9K Total - Debug Version: 164.0K Code, 69.1K Data, 233.1K Total - Current Release: - Non-Debug Version: 78.6K Code, 11.5K Data, 90.1K Total - Debug Version: 165.2K Code, 69.6K Data, 234.8K Total - - -2) iASL Compiler/Disassembler: - -Fixed a regression introduced in version 20050513 where the use of a Package -object within a Case() statement caused a compile time exception. The -original behavior has been restored (a Match() operator is emitted.) - ----------------------------------------- -17 June 2005. Summary of changes for version 20050617: - -1) ACPI CA Core Subsystem: - -Moved the object cache operations into the OS interface layer (OSL) to allow -the host OS to handle these operations if desired (for example, the Linux -OSL will invoke the slab allocator). This support is optional; the compile -time define ACPI_USE_LOCAL_CACHE may be used to utilize the original cache -code in the ACPI CA core. The new OSL interfaces are shown below. See -utalloc.c for an example implementation, and acpiosxf.h for the exact -interface definitions. With assistance from Alexey Starikovskiy. - AcpiOsCreateCache - AcpiOsDeleteCache - AcpiOsPurgeCache - AcpiOsAcquireObject - AcpiOsReleaseObject - -Modified the interfaces to AcpiOsAcquireLock and AcpiOsReleaseLock to return -and restore a flags parameter. This fits better with many OS lock models. -Note: the current execution state (interrupt handler or not) is no longer -passed to these interfaces. If necessary, the OSL must determine this state -by itself, a simple and fast operation. With assistance from Alexey -Starikovskiy. - -Fixed a problem in the ACPI table handling where a valid XSDT was assumed -present if the revision of the RSDP was 2 or greater. According to the ACPI -specification, the XSDT is optional in all cases, and the table manager -therefore now checks for both an RSDP >=2 and a valid XSDT pointer. -Otherwise, the RSDT pointer is used. Some ACPI 2.0 compliant BIOSs contain -only the RSDT. - -Fixed an interpreter problem with the Mid() operator in the case of an input -string where the resulting output string is of zero length. It now correctly -returns a valid, null terminated string object instead of a string object -with a null pointer. - -Fixed a problem with the control method argument handling to allow a store -to an Arg object that already contains an object of type Device. The Device -object is now correctly overwritten. Previously, an error was returned. - - -Enhanced the debugger Find command to emit object values in addition to the -found object pathnames. The output format is the same as the dump namespace -command. - -Enhanced the debugger Set command. It now has the ability to set the value -of any Named integer object in the namespace (Previously, only method locals -and args could be set.) - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.1K Code, 11.6K Data, 89.7K Total - Debug Version: 164.0K Code, 69.3K Data, 233.3K Total - Current Release: - Non-Debug Version: 78.3K Code, 11.6K Data, 89.9K Total - Debug Version: 164.0K Code, 69.1K Data, 233.1K Total - - -2) iASL Compiler/Disassembler: - -Fixed a regression in the disassembler where if/else/while constructs were -output incorrectly. This problem was introduced in the previous release -(20050526). This problem also affected the single-step disassembly in the -debugger. - -Fixed a problem where compiling the reserved _OSI method would randomly (but -rarely) produce compile errors. - -Enhanced the disassembler to emit compilable code in the face of incorrect -AML resource descriptors. If the optional ResourceSourceIndex is present, -but the ResourceSource is not, do not emit the ResourceSourceIndex in the -disassembly. Otherwise, the resulting code cannot be compiled without -errors. - ----------------------------------------- -26 May 2005. Summary of changes for version 20050526: - -1) ACPI CA Core Subsystem: - -Implemented support to execute Type 1 and Type 2 AML opcodes appearing at -the module level (not within a control method.) These opcodes are executed -exactly once at the time the table is loaded. This type of code was legal up -until the release of ACPI 2.0B (2002) and is now supported within ACPI CA in -order to provide backwards compatibility with earlier BIOS implementations. -This eliminates the "Encountered executable code at module level" warning -that was previously generated upon detection of such code. - -Fixed a problem in the interpreter where an AE_NOT_FOUND exception could -inadvertently be generated during the lookup of namespace objects in the -second pass parse of ACPI tables and control methods. It appears that this -problem could occur during the resolution of forward references to namespace -objects. - -Added the ACPI_MUTEX_DEBUG #ifdef to the AcpiUtReleaseMutex function, -corresponding to the same #ifdef in the AcpiUtAcquireMutex function. This -allows the deadlock detection debug code to be compiled out in the normal -case, improving mutex performance (and overall subsystem performance) -considerably. - -Implemented a handful of miscellaneous fixes for possible memory leaks on -error conditions and error handling control paths. These fixes were -suggested by FreeBSD and the Coverity Prevent source code analysis tool. - -Added a check for a null RSDT pointer in AcpiGetFirmwareTable (tbxfroot.c) -to prevent a fault in this error case. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.2K Code, 11.6K Data, 89.8K Total - Debug Version: 163.7K Code, 69.3K Data, 233.0K Total - Current Release: - Non-Debug Version: 78.1K Code, 11.6K Data, 89.7K Total - Debug Version: 164.0K Code, 69.3K Data, 233.3K Total - - -2) iASL Compiler/Disassembler: - -Implemented support to allow Type 1 and Type 2 ASL operators to appear at -the module level (not within a control method.) These operators will be -executed once at the time the table is loaded. This type of code was legal -up until the release of ACPI 2.0B (2002) and is now supported by the iASL -compiler in order to provide backwards compatibility with earlier BIOS ASL -code. - -The ACPI integer width (specified via the table revision ID or the -r -override, 32 or 64 bits) is now used internally during compile-time constant -folding to ensure that constants are truncated to 32 bits if necessary. -Previously, the revision ID value was only emitted in the AML table header. - -An error message is now generated for the Mutex and Method operators if the -SyncLevel parameter is outside the legal range of 0 through 15. - -Fixed a problem with the Method operator ParameterTypes list handling (ACPI -3.0). Previously, more than 2 types or 2 arguments generated a syntax error. -The actual underlying implementation of method argument typechecking is -still under development, however. - ----------------------------------------- -13 May 2005. Summary of changes for version 20050513: - -1) ACPI CA Core Subsystem: - -Implemented support for PCI Express root bridges -- added support for device -PNP0A08 in the root bridge search within AcpiEvPciConfigRegionSetup. - -The interpreter now automatically truncates incoming 64-bit constants to 32 -bits if currently executing out of a 32-bit ACPI table (Revision < 2). This -also affects the iASL compiler constant folding. (Note: as per below, the -iASL compiler no longer allows 64-bit constants within 32-bit tables.) - -Fixed a problem where string and buffer objects with "static" pointers -(pointers to initialization data within an ACPI table) were not handled -consistently. The internal object copy operation now always copies the data -to a newly allocated buffer, regardless of whether the source object is -static or not. - -Fixed a problem with the FromBCD operator where an implicit result -conversion was improperly performed while storing the result to the target -operand. Since this is an "explicit conversion" operator, the implicit -conversion should never be performed on the output. - -Fixed a problem with the CopyObject operator where a copy to an existing -named object did not always completely overwrite the existing object stored -at name. Specifically, a buffer-to-buffer copy did not delete the existing -buffer. - -Replaced "InterruptLevel" with "InterruptNumber" in all GPE interfaces and -structs for consistency. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.2K Code, 11.6K Data, 89.8K Total - Debug Version: 163.7K Code, 69.3K Data, 233.0K Total - Current Release: (Same sizes) - Non-Debug Version: 78.2K Code, 11.6K Data, 89.8K Total - Debug Version: 163.7K Code, 69.3K Data, 233.0K Total - - -2) iASL Compiler/Disassembler: - -The compiler now emits a warning if an attempt is made to generate a 64-bit -integer constant from within a 32-bit ACPI table (Revision < 2). The integer -is truncated to 32 bits. - -Fixed a problem with large package objects: if the static length of the -package is greater than 255, the "variable length package" opcode is -emitted. Previously, this caused an error. This requires an update to the -ACPI spec, since it currently (incorrectly) states that packages larger than -255 elements are not allowed. - -The disassembler now correctly handles variable length packages and packages -larger than 255 elements. - ----------------------------------------- -08 April 2005. Summary of changes for version 20050408: - -1) ACPI CA Core Subsystem: - -Fixed three cases in the interpreter where an "index" argument to an ASL -function was still (internally) 32 bits instead of the required 64 bits. -This was the Index argument to the Index, Mid, and Match operators. - -The "strupr" function is now permanently local (AcpiUtStrupr), since this is -not a POSIX-defined function and not present in most kernel-level C -libraries. All references to the C library strupr function have been removed -from the headers. - -Completed the deployment of static functions/prototypes. All prototypes with -the static attribute have been moved from the headers to the owning C file. - -Implemented an extract option (-e) for the AcpiBin utility (AML binary -utility). This option allows the utility to extract individual ACPI tables -from the output of AcpiDmp. It provides the same functionality of the -acpixtract.pl perl script without the worry of setting the correct perl -options. AcpiBin runs on Windows and has not yet been generated/validated in -the Linux/Unix environment (but should be soon). - -Updated and fixed the table dump option for AcpiBin (-d). This option -converts a single ACPI table to a hex/ascii file, similar to the output of -AcpiDmp. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.0K Code, 11.6K Data, 89.6K Total - Debug Version: 163.5K Code, 69.3K Data, 232.8K Total - Current Release: - Non-Debug Version: 78.2K Code, 11.6K Data, 89.8K Total - Debug Version: 163.7K Code, 69.3K Data, 233.0K Total - - -2) iASL Compiler/Disassembler: - -Disassembler fix: Added a check to ensure that the table length found in the -ACPI table header within the input file is not longer than the actual input -file size. This indicates some kind of file or table corruption. - ----------------------------------------- -29 March 2005. Summary of changes for version 20050329: - -1) ACPI CA Core Subsystem: - -An error is now generated if an attempt is made to create a Buffer Field of -length zero (A CreateField with a length operand of zero.) - -The interpreter now issues a warning whenever executable code at the module -level is detected during ACPI table load. This will give some idea of the -prevalence of this type of code. - -Implemented support for references to named objects (other than control -methods) within package objects. - -Enhanced package object output for the debug object. Package objects are now -completely dumped, showing all elements. - -Enhanced miscellaneous object output for the debug object. Any object can -now be written to the debug object (for example, a device object can be -written, and the type of the object will be displayed.) - -The "static" qualifier has been added to all local functions across both the -core subsystem and the iASL compiler. - -The number of "long" lines (> 80 chars) within the source has been -significantly reduced, by about 1/3. - -Cleaned up all header files to ensure that all CA/iASL functions are -prototyped (even static functions) and the formatting is consistent. - -Two new header files have been added, acopcode.h and acnames.h. - -Removed several obsolete functions that were no longer used. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.3K Code, 11.5K Data, 89.8K Total - Debug Version: 165.4K Code, 69.7K Data, 236.1K Total - Current Release: - Non-Debug Version: 78.0K Code, 11.6K Data, 89.6K Total - Debug Version: 163.5K Code, 69.3K Data, 232.8K Total - - - -2) iASL Compiler/Disassembler: - -Fixed a problem with the resource descriptor generation/support. For the -ResourceSourceIndex and the ResourceSource fields, both must be present, or -both must be not present - can't have one without the other. - -The compiler now returns non-zero from the main procedure if any errors have -occurred during the compilation. - - ----------------------------------------- -09 March 2005. Summary of changes for version 20050309: - -1) ACPI CA Core Subsystem: - -The string-to-buffer implicit conversion code has been modified again after -a change to the ACPI specification. In order to match the behavior of the -other major ACPI implementation, the target buffer is no longer truncated if -the source string is smaller than an existing target buffer. This change -requires an update to the ACPI spec, and should eliminate the recent -AE_AML_BUFFER_LIMIT issues. - -The "implicit return" support was rewritten to a new algorithm that solves -the general case. Rather than attempt to determine when a method is about to -exit, the result of every ASL operator is saved momentarily until the very -next ASL operator is executed. Therefore, no matter how the method exits, -there will always be a saved implicit return value. This feature is only -enabled with the AcpiGbl_EnableInterpreterSlack flag, and should eliminate -AE_AML_NO_RETURN_VALUE errors when enabled. - -Implemented implicit conversion support for the predicate (operand) of the -If, Else, and While operators. String and Buffer arguments are automatically -converted to Integers. - -Changed the string-to-integer conversion behavior to match the new ACPI -errata: "If no integer object exists, a new integer is created. The ASCII -string is interpreted as a hexadecimal constant. Each string character is -interpreted as a hexadecimal value ('0'-'9', 'A'-'F', 'a', 'f'), starting -with the first character as the most significant digit, and ending with the -first non-hexadecimal character or end-of-string." This means that the first -non-hex character terminates the conversion and this is the code that was -changed. - -Fixed a problem where the ObjectType operator would fail (fault) when used -on an Index of a Package which pointed to a null package element. The -operator now properly returns zero (Uninitialized) in this case. - -Fixed a problem where the While operator used excessive memory by not -properly popping the result stack during execution. There was no memory leak -after execution, however. (Code provided by Valery Podrezov.) - -Fixed a problem where references to control methods within Package objects -caused the method to be invoked, instead of producing a reference object -pointing to the method. - -Restructured and simplified the pswalk.c module (AcpiPsDeleteParseTree) to -improve performance and reduce code size. (Code provided by Alexey -Starikovskiy.) - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.3K Code, 11.5K Data, 89.8K Total - Debug Version: 165.4K Code, 69.6K Data, 236.0K Total - Current Release: - Non-Debug Version: 78.3K Code, 11.5K Data, 89.8K Total - Debug Version: 165.4K Code, 69.7K Data, 236.1K Total - - -2) iASL Compiler/Disassembler: - -Fixed a problem with the Return operator with no arguments. Since the AML -grammar for the byte encoding requires an operand for the Return opcode, the -compiler now emits a Return(Zero) for this case. An ACPI specification -update has been written for this case. - -For tables other than the DSDT, namepath optimization is automatically -disabled. This is because SSDTs can be loaded anywhere in the namespace, the -compiler has no knowledge of where, and thus cannot optimize namepaths. - -Added "ProcessorObj" to the ObjectTypeKeyword list. This object type was -inadvertently omitted from the ACPI specification, and will require an -update to the spec. - -The source file scan for ASCII characters is now optional (-a). This change -was made because some vendors place non-ascii characters within comments. -However, the scan is simply a brute-force byte compare to ensure all -characters in the file are in the range 0x00 to 0x7F. - -Fixed a problem with the CondRefOf operator where the compiler was -inappropriately checking for the existence of the target. Since the point of -the operator is to check for the existence of the target at run-time, the -compiler no longer checks for the target existence. - -Fixed a problem where errors generated from the internal AML interpreter -during constant folding were not handled properly, causing a fault. - -Fixed a problem with overly aggressive range checking for the Stall -operator. The valid range (max 255) is now only checked if the operand is of -type Integer. All other operand types cannot be statically checked. - -Fixed a problem where control method references within the RefOf, DeRefOf, -and ObjectType operators were not treated properly. They are now treated as -actual references, not method invocations. - -Fixed and enhanced the "list namespace" option (-ln). This option was broken -a number of releases ago. - -Improved error handling for the Field, IndexField, and BankField operators. -The compiler now cleanly reports and recovers from errors in the field -component (FieldUnit) list. - -Fixed a disassembler problem where the optional ResourceDescriptor fields -TRS and TTP were not always handled correctly. - -Disassembler - Comments in output now use "//" instead of "/*" - ----------------------------------------- -28 February 2005. Summary of changes for version 20050228: - -1) ACPI CA Core Subsystem: - -Fixed a problem where the result of an Index() operator (an object -reference) must increment the reference count on the target object for the -life of the object reference. - -Implemented AML Interpreter and Debugger support for the new ACPI 3.0 -Extended Address (IO, Memory, Space), QwordSpace, DwordSpace, and WordSpace -resource descriptors. - -Implemented support in the _OSI method for the ACPI 3.0 "Extended Address -Space Descriptor" string, indicating interpreter support for the descriptors -above. - -Implemented header support for the new ACPI 3.0 FADT flag bits. - -Implemented header support for the new ACPI 3.0 PCI Express bits for the PM1 -status/enable registers. - -Updated header support for the MADT processor local Apic struct and MADT -platform interrupt source struct for new ACPI 3.0 fields. - -Implemented header support for the SRAT and SLIT ACPI tables. - -Implemented the -s switch in AcpiExec to enable the "InterpreterSlack" flag -at runtime. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.2K Code, 11.5K Data, 89.7K Total - Debug Version: 164.9K Code, 69.2K Data, 234.1K Total - Current Release: - Non-Debug Version: 78.3K Code, 11.5K Data, 89.8K Total - Debug Version: 165.4K Code, 69.6K Data, 236.0K Total - - -2) iASL Compiler/Disassembler: - -Fixed a problem with the internal 64-bit String-to-integer conversion with -strings less than two characters long. - -Fixed a problem with constant folding where the result of the Index() -operator can not be considered a constant. This means that Index() cannot be -a type3 opcode and this will require an update to the ACPI specification. - -Disassembler: Implemented support for the TTP, MTP, and TRS resource -descriptor fields. These fields were inadvertently ignored and not output in -the disassembly of the resource descriptor. - - - ---------------------------------------- -11 February 2005. Summary of changes for version 20050211: - -1) ACPI CA Core Subsystem: - -Implemented ACPI 3.0 support for implicit conversion within the Match() -operator. MatchObjects can now be of type integer, buffer, or string instead -of just type integer. Package elements are implicitly converted to the type -of the MatchObject. This change aligns the behavior of Match() with the -behavior of the other logical operators (LLess(), etc.) It also requires an -errata change to the ACPI specification as this support was intended for -ACPI 3.0, but was inadvertently omitted. - -Fixed a problem with the internal implicit "to buffer" conversion. Strings -that are converted to buffers will cause buffer truncation if the string is -smaller than the target buffer. Integers that are converted to buffers will -not cause buffer truncation, only zero extension (both as per the ACPI -spec.) The problem was introduced when code was added to truncate the -buffer, but this should not be performed in all cases, only the string case. - -Fixed a problem with the Buffer and Package operators where the interpreter -would get confused if two such operators were used as operands to an ASL -operator (such as LLess(Buffer(1){0},Buffer(1){1}). The internal result -stack was not being popped after the execution of these operators, resulting -in an AE_NO_RETURN_VALUE exception. - -Fixed a problem with constructs of the form Store(Index(...),...). The -reference object returned from Index was inadvertently resolved to an actual -value. This problem was introduced in version 20050114 when the behavior of -Store() was modified to restrict the object types that can be used as the -source operand (to match the ACPI specification.) - -Reduced excessive stack use within the AcpiGetObjectInfo procedure. - -Added a fix to aclinux.h to allow generation of AcpiExec on Linux. - -Updated the AcpiSrc utility to add the FADT_DESCRIPTOR_REV2_MINUS struct. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.1K Code, 11.5K Data, 89.6K Total - Debug Version: 164.8K Code, 69.2K Data, 234.0K Total - Current Release: - Non-Debug Version: 78.2K Code, 11.5K Data, 89.7K Total - Debug Version: 164.9K Code, 69.2K Data, 234.1K Total - - -2) iASL Compiler/Disassembler: - -Fixed a code generation problem in the constant folding optimization code -where incorrect code was generated if a constant was reduced to a buffer -object (i.e., a reduced type 5 opcode.) - -Fixed a typechecking problem for the ToBuffer operator. Caused by an -incorrect return type in the internal opcode information table. - ----------------------------------------- -25 January 2005. Summary of changes for version 20050125: - -1) ACPI CA Core Subsystem: - -Fixed a recently introduced problem with the Global Lock where the -underlying semaphore was not created. This problem was introduced in -version 20050114, and caused an AE_AML_NO_OPERAND exception during an -Acquire() operation on _GL. - -The local object cache is now optional, and is disabled by default. Both -AcpiExec and the iASL compiler enable the cache because they run in user -mode and this enhances their performance. #define ACPI_ENABLE_OBJECT_CACHE -to enable the local cache. - -Fixed an issue in the internal function AcpiUtEvaluateObject concerning the -optional "implicit return" support where an error was returned if no return -object was expected, but one was implicitly returned. AE_OK is now returned -in this case and the implicitly returned object is deleted. -AcpiUtEvaluateObject is only occasionally used, and only to execute reserved -methods such as _STA and _INI where the return type is known up front. - -Fixed a few issues with the internal convert-to-integer code. It now returns -an error if an attempt is made to convert a null string, a string of only -blanks/tabs, or a zero-length buffer. This affects both implicit conversion -and explicit conversion via the ToInteger() operator. - -The internal debug code in AcpiUtAcquireMutex has been commented out. It is -not needed for normal operation and should increase the performance of the -entire subsystem. The code remains in case it is needed for debug purposes -again. - -The AcpiExec source and makefile are included in the Unix/Linux package for -the first time. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.4K Code, 11.5K Data, 89.9K Total - Debug Version: 165.4K Code, 69.4K Data, 234.8K Total - Current Release: - Non-Debug Version: 78.1K Code, 11.5K Data, 89.6K Total - Debug Version: 164.8K Code, 69.2K Data, 234.0K Total - -2) iASL Compiler/Disassembler: - -Switch/Case support: A warning is now issued if the type of the Switch value -cannot be determined at compile time. For example, Switch(Arg0) will -generate the warning, and the type is assumed to be an integer. As per the -ACPI spec, use a construct such as Switch(ToInteger(Arg0)) to eliminate the -warning. - -Switch/Case support: Implemented support for buffer and string objects as -the switch value. This is an ACPI 3.0 feature, now that LEqual supports -buffers and strings. - -Switch/Case support: The emitted code for the LEqual() comparisons now uses -the switch value as the first operand, not the second. The case value is now -the second operand, and this allows the case value to be implicitly -converted to the type of the switch value, not the other way around. - -Switch/Case support: Temporary variables are now emitted immediately within -the control method, not at the global level. This means that there are now -36 temps available per-method, not 36 temps per-module as was the case with -the earlier implementation (_T_0 through _T_9 and _T_A through _T_Z.) - ----------------------------------------- -14 January 2005. Summary of changes for version 20050114: - -Added 2005 copyright to all module headers. This affects every module in -the core subsystem, iASL compiler, and the utilities. - -1) ACPI CA Core Subsystem: - -Fixed an issue with the String-to-Buffer conversion code where the string -null terminator was not included in the buffer after conversion, but there -is existing ASL that assumes the string null terminator is included. This is -the root of the ACPI_AML_BUFFER_LIMIT regression. This problem was -introduced in the previous version when the code was updated to correctly -set the converted buffer size as per the ACPI specification. The ACPI spec -is ambiguous and will be updated to specify that the null terminator must be -included in the converted buffer. This also affects the ToBuffer() ASL -operator. - -Fixed a problem with the Mid() ASL/AML operator where it did not work -correctly on Buffer objects. Newly created sub-buffers were not being marked -as initialized. - - -Fixed a problem in AcpiTbFindTable where incorrect string compares were -performed on the OemId and OemTableId table header fields. These fields are -not null terminated, so strncmp is now used instead of strcmp. - -Implemented a restriction on the Store() ASL/AML operator to align the -behavior with the ACPI specification. Previously, any object could be used -as the source operand. Now, the only objects that may be used are Integers, -Buffers, Strings, Packages, Object References, and DDB Handles. If -necessary, the original behavior can be restored by enabling the -EnableInterpreterSlack flag. - -Enhanced the optional "implicit return" support to allow an implicit return -value from methods that are invoked externally via the AcpiEvaluateObject -interface. This enables implicit returns from the _STA and _INI methods, -for example. - -Changed the Revision() ASL/AML operator to return the current version of the -AML interpreter, in the YYYYMMDD format. Previously, it incorrectly returned -the supported ACPI version (This is the function of the _REV method). - -Updated the _REV predefined method to return the currently supported version -of ACPI, now 3. - -Implemented batch mode option for the AcpiExec utility (-b). - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.3K Code, 11.5K Data, 89.8K Total - Debug Version: 165.3K Code, 69.4K Data, 234.7K Total - Current Release: - Non-Debug Version: 78.4K Code, 11.5K Data, 89.9K Total - Debug Version: 165.4K Code, 69.4K Data, 234.8K Total - ----------------------------------------- -10 December 2004. Summary of changes for version 20041210: - -ACPI 3.0 support is nearing completion in both the iASL compiler and the -ACPI CA core subsystem. - -1) ACPI CA Core Subsystem: - -Fixed a problem in the ToDecimalString operator where the resulting string -length was incorrectly calculated. The length is now calculated exactly, -eliminating incorrect AE_STRING_LIMIT exceptions. - -Fixed a problem in the ToHexString operator to allow a maximum 200 character -string to be produced. - -Fixed a problem in the internal string-to-buffer and buffer-to-buffer copy -routine where the length of the resulting buffer was not truncated to the -new size (if the target buffer already existed). - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.3K Code, 11.5K Data, 89.8K Total - Debug Version: 164.7K Code, 68.5K Data, 233.2K Total - Current Release: - Non-Debug Version: 78.3K Code, 11.5K Data, 89.8K Total - Debug Version: 165.3K Code, 69.4K Data, 234.7K Total - - -2) iASL Compiler/Disassembler: - -Implemented the new ACPI 3.0 resource template macros - DWordSpace, -ExtendedIO, ExtendedMemory, ExtendedSpace, QWordSpace, and WordSpace. -Includes support in the disassembler. - -Implemented support for the new (ACPI 3.0) parameter to the Register macro, -AccessSize. - -Fixed a problem where the _HE resource name for the Interrupt macro was -referencing bit 0 instead of bit 1. - -Implemented check for maximum 255 interrupts in the Interrupt macro. - -Fixed a problem with the predefined resource descriptor names where -incorrect AML code was generated if the offset within the resource buffer -was 0 or 1. The optimizer shortened the AML code to a single byte opcode -but did not update the surrounding package lengths. - -Changes to the Dma macro: All channels within the channel list must be in -the range 0-7. Maximum 8 channels can be specified. BusMaster operand is -optional (default is BusMaster). - -Implemented check for maximum 7 data bytes for the VendorShort macro. - -The ReadWrite parameter is now optional for the Memory32 and similar macros. - ----------------------------------------- -03 December 2004. Summary of changes for version 20041203: - -1) ACPI CA Core Subsystem: - -The low-level field insertion/extraction code (exfldio) has been completely -rewritten to eliminate unnecessary complexity, bugs, and boundary -conditions. - -Fixed a problem in the ToInteger, ToBuffer, ToHexString, and ToDecimalString -operators where the input operand could be inadvertently deleted if no -conversion was necessary (e.g., if the input to ToInteger was an Integer -object.) - -Fixed a problem with the ToDecimalString and ToHexString where an incorrect -exception code was returned if the resulting string would be > 200 chars. -AE_STRING_LIMIT is now returned. - -Fixed a problem with the Concatenate operator where AE_OK was always -returned, even if the operation failed. - -Fixed a problem in oswinxf (used by AcpiExec and iASL) to allow > 128 -semaphores to be allocated. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.5K Code, 11.5K Data, 90.0K Total - Debug Version: 165.2K Code, 68.6K Data, 233.8K Total - Current Release: - Non-Debug Version: 78.3K Code, 11.5K Data, 89.8K Total - Debug Version: 164.7K Code, 68.5K Data, 233.2K Total - - -2) iASL Compiler/Disassembler: - -Fixed typechecking for the ObjectType and SizeOf operators. Problem was -recently introduced in 20041119. - -Fixed a problem with the ToUUID macro where the upper nybble of each buffer -byte was inadvertently set to zero. - ----------------------------------------- -19 November 2004. Summary of changes for version 20041119: - -1) ACPI CA Core Subsystem: - -Fixed a problem in the internal ConvertToInteger routine where new integers -were not truncated to 32 bits for 32-bit ACPI tables. This routine converts -buffers and strings to integers. - -Implemented support to store a value to an Index() on a String object. This -is an ACPI 2.0 feature that had not yet been implemented. - -Implemented new behavior for storing objects to individual package elements -(via the Index() operator). The previous behavior was to invoke the implicit -conversion rules if an object was already present at the index. The new -behavior is to simply delete any existing object and directly store the new -object. Although the ACPI specification seems unclear on this subject, other -ACPI implementations behave in this manner. (This is the root of the -AE_BAD_HEX_CONSTANT issue.) - -Modified the RSDP memory scan mechanism to support the extended checksum for -ACPI 2.0 (and above) RSDPs. Note that the search continues until a valid -RSDP signature is found with a valid checksum. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.5K Code, 11.5K Data, 90.0K Total - Debug Version: 165.2K Code, 68.6K Data, 233.8K Total - Current Release: - Non-Debug Version: 78.5K Code, 11.5K Data, 90.0K Total - Debug Version: 165.2K Code, 68.6K Data, 233.8K Total - - -2) iASL Compiler/Disassembler: - -Fixed a missing semicolon in the aslcompiler.y file. - ----------------------------------------- -05 November 2004. Summary of changes for version 20041105: - -1) ACPI CA Core Subsystem: - -Implemented support for FADT revision 2. This was an interim table (between -ACPI 1.0 and ACPI 2.0) that adds support for the FADT reset register. - -Implemented optional support to allow uninitialized LocalX and ArgX -variables in a control method. The variables are initialized to an Integer -object with a value of zero. This support is enabled by setting the -AcpiGbl_EnableInterpreterSlack flag to TRUE. - -Implemented support for Integer objects for the SizeOf operator. Either 4 -or 8 is returned, depending on the current integer size (32-bit or 64-bit, -depending on the parent table revision). - -Fixed a problem in the implementation of the SizeOf and ObjectType operators -where the operand was resolved to a value too early, causing incorrect -return values for some objects. - -Fixed some possible memory leaks during exceptional conditions. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.0K Code, 11.5K Data, 89.5K Total - Debug Version: 164.8K Code, 68.6K Data, 233.4K Total - Current Release: - Non-Debug Version: 78.5K Code, 11.5K Data, 90.0K Total - Debug Version: 165.2K Code, 68.6K Data, 233.8K Total - - -2) iASL Compiler/Disassembler: - -Implemented support for all ACPI 3.0 reserved names and methods. - -Implemented all ACPI 3.0 grammar elements in the front-end, including -support for semicolons. - -Implemented the ACPI 3.0 Function() and ToUUID() macros - -Fixed a problem in the disassembler where a Scope() operator would not be -emitted properly if the target of the scope was in another table. - ----------------------------------------- -15 October 2004. Summary of changes for version 20041015: - -Note: ACPI CA is currently undergoing an in-depth and complete formal -evaluation to test/verify the following areas. Other suggestions are -welcome. This will result in an increase in the frequency of releases and -the number of bug fixes in the next few months. - - Functional tests for all ASL/AML operators - - All implicit/explicit type conversions - - Bit fields and operation regions - - 64-bit math support and 32-bit-only "truncated" math support - - Exceptional conditions, both compiler and interpreter - - Dynamic object deletion and memory leaks - - ACPI 3.0 support when implemented - - External interfaces to the ACPI subsystem - - -1) ACPI CA Core Subsystem: - -Fixed two alignment issues on 64-bit platforms - within debug statements in -AcpiEvGpeDetect and AcpiEvCreateGpeBlock. Removed references to the Address -field within the non-aligned ACPI generic address structure. - -Fixed a problem in the Increment and Decrement operators where incorrect -operand resolution could result in the inadvertent modification of the -original integer when the integer is passed into another method as an -argument and the arg is then incremented/decremented. - -Fixed a problem in the FromBCD operator where the upper 32-bits of a 64-bit -BCD number were truncated during conversion. - -Fixed a problem in the ToDecimal operator where the length of the resulting -string could be set incorrectly too long if the input operand was a Buffer -object. - -Fixed a problem in the Logical operators (LLess, etc.) where a NULL byte (0) -within a buffer would prematurely terminate a compare between buffer -objects. - -Added a check for string overflow (>200 characters as per the ACPI -specification) during the Concatenate operator with two string operands. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 77.8K Code, 11.5K Data, 89.3K Total - Debug Version: 164.6K Code, 68.5K Data, 233.1K Total - Current Release: - Non-Debug Version: 78.0K Code, 11.5K Data, 89.5K Total - Debug Version: 164.8K Code, 68.6K Data, 233.4K Total - - - -2) iASL Compiler/Disassembler: - -Allow the use of the ObjectType operator on uninitialized Locals and Args -(returns 0 as per the ACPI specification). - -Fixed a problem where the compiler would fault if there was a syntax error -in the FieldName of all of the various CreateXXXField operators. - -Disallow the use of lower case letters within the EISAID macro, as per the -ACPI specification. All EISAID strings must be of the form "UUUNNNN" Where -U is an uppercase letter and N is a hex digit. - - ----------------------------------------- -06 October 2004. Summary of changes for version 20041006: - -1) ACPI CA Core Subsystem: - -Implemented support for the ACPI 3.0 Timer operator. This ASL function -implements a 64-bit timer with 100 nanosecond granularity. - -Defined a new OSL interface, AcpiOsGetTimer. This interface is used to -implement the ACPI 3.0 Timer operator. This allows the host OS to implement -the timer with the best clock available. Also, it keeps the core subsystem -out of the clock handling business, since the host OS (usually) performs -this function. - -Fixed an alignment issue on 64-bit platforms. The HwLowLevelRead(Write) -functions use a 64-bit address which is part of the packed ACPI Generic -Address Structure. Since the structure is non-aligned, the alignment macros -are now used to extract the address to a local variable before use. - -Fixed a problem where the ToInteger operator assumed all input strings were -hexadecimal. The operator now handles both decimal strings and hex strings -(prefixed with "0x"). - -Fixed a problem where the string length in the string object created as a -result of the internal ConvertToString procedure could be incorrect. This -potentially affected all implicit conversions and also the ToDecimalString -and ToHexString operators. - -Fixed two problems in the ToString operator. If the length parameter was -zero, an incorrect string object was created and the value of the input -length parameter was inadvertently changed from zero to Ones. - -Fixed a problem where the optional ResourceSource string in the ExtendedIRQ -resource macro was ignored. - -Simplified the interfaces to the internal division functions, reducing code -size and complexity. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 77.9K Code, 11.4K Data, 89.3K Total - Debug Version: 164.5K Code, 68.3K Data, 232.8K Total - Current Release: - Non-Debug Version: 77.8K Code, 11.5K Data, 89.3K Total - Debug Version: 164.6K Code, 68.5K Data, 233.1K Total - - -2) iASL Compiler/Disassembler: - -Implemented support for the ACPI 3.0 Timer operator. - -Fixed a problem where the Default() operator was inadvertently ignored in a -Switch/Case block. This was a problem in the translation of the Switch -statement to If...Else pairs. - -Added support to allow a standalone Return operator, with no parentheses (or -operands). - -Fixed a problem with code generation for the ElseIf operator where the -translated Else...If parse tree was improperly constructed leading to the -loss of some code. - ----------------------------------------- -22 September 2004. Summary of changes for version 20040922: - -1) ACPI CA Core Subsystem: - -Fixed a problem with the implementation of the LNot() operator where "Ones" -was not returned for the TRUE case. Changed the code to return Ones instead -of (!Arg) which was usually 1. This change affects iASL constant folding for -this operator also. - -Fixed a problem in AcpiUtInitializeBuffer where an existing buffer was not -initialized properly -- Now zero the entire buffer in this case where the -buffer already exists. - -Changed the interface to AcpiOsSleep from (UINT32 Seconds, UINT32 -Milliseconds) to simply (ACPI_INTEGER Milliseconds). This simplifies all -related code considerably. This will require changes/updates to all OS -interface layers (OSLs.) - -Implemented a new external interface, AcpiInstallExceptionHandler, to allow -a system exception handler to be installed. This handler is invoked upon any -run-time exception that occurs during control method execution. - -Added support for the DSDT in AcpiTbFindTable. This allows the -DataTableRegion() operator to access the local copy of the DSDT. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 77.8K Code, 11.4K Data, 89.2K Total - Debug Version: 164.2K Code, 68.2K Data, 232.4K Total - Current Release: - Non-Debug Version: 77.9K Code, 11.4K Data, 89.3K Total - Debug Version: 164.5K Code, 68.3K Data, 232.8K Total - - -2) iASL Compiler/Disassembler: - -Fixed a problem with constant folding and the LNot operator. LNot was -returning 1 in the TRUE case, not Ones as per the ACPI specification. This -could result in the generation of an incorrect folded/reduced constant. - -End-Of-File is now allowed within a "//"-style comment. A parse error no -longer occurs if such a comment is at the very end of the input ASL source -file. - -Implemented the "-r" option to override the Revision in the table header. -The initial use of this option will be to simplify the evaluation of the AML -interpreter by allowing a single ASL source module to be compiled for either -32-bit or 64-bit integers. - - ----------------------------------------- -27 August 2004. Summary of changes for version 20040827: - -1) ACPI CA Core Subsystem: - -- Implemented support for implicit object conversion in the non-numeric -logical operators (LEqual, LGreater, LGreaterEqual, LLess, LLessEqual, and -LNotEqual.) Any combination of Integers/Strings/Buffers may now be used; -the second operand is implicitly converted on the fly to match the type of -the first operand. For example: - - LEqual (Source1, Source2) - -Source1 and Source2 must each evaluate to an integer, a string, or a buffer. -The data type of Source1 dictates the required type of Source2. Source2 is -implicitly converted if necessary to match the type of Source1. - -- Updated and corrected the behavior of the string conversion support. The -rules concerning conversion of buffers to strings (according to the ACPI -specification) are as follows: - -ToDecimalString - explicit byte-wise conversion of buffer to string of -decimal values (0-255) separated by commas. ToHexString - explicit byte-wise -conversion of buffer to string of hex values (0-FF) separated by commas. -ToString - explicit byte-wise conversion of buffer to string. Byte-by-byte -copy with no transform except NULL terminated. Any other implicit buffer-to- -string conversion - byte-wise conversion of buffer to string of hex values -(0-FF) separated by spaces. - -- Fixed typo in definition of AcpiGbl_EnableInterpreterSlack. - -- Fixed a problem in AcpiNsGetPathnameLength where the returned length was -one byte too short in the case of a node in the root scope. This could -cause a fault during debug output. - -- Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 77.9K Code, 11.5K Data, 89.4K Total - Debug Version: 164.1K Code, 68.3K Data, 232.4K Total - Current Release: - Non-Debug Version: 77.8K Code, 11.4K Data, 89.2K Total - Debug Version: 164.2K Code, 68.2K Data, 232.4K Total - - -2) iASL Compiler/Disassembler: - -- Fixed a Linux generation error. - - ----------------------------------------- -16 August 2004. Summary of changes for version 20040816: - -1) ACPI CA Core Subsystem: - -Designed and implemented support within the AML interpreter for the so- -called "implicit return". This support returns the result of the last ASL -operation within a control method, in the absence of an explicit Return() -operator. A few machines depend on this behavior, even though it is not -explicitly supported by the ASL language. It is optional support that can -be enabled at runtime via the AcpiGbl_EnableInterpreterSlack flag. - -Removed support for the PCI_Config address space from the internal low level -hardware interfaces (AcpiHwLowLevelRead and AcpiHwLowLevelWrite). This -support was not used internally, and would not work correctly anyway because -the PCI bus number and segment number were not supported. There are -separate interfaces for PCI configuration space access because of the unique -interface. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 78.0K Code, 11.5K Data, 89.5K Total - Debug Version: 164.1K Code, 68.2K Data, 232.3K Total - Current Release: - Non-Debug Version: 77.9K Code, 11.5K Data, 89.4K Total - Debug Version: 164.1K Code, 68.3K Data, 232.4K Total - - -2) iASL Compiler/Disassembler: - -Fixed a problem where constants in ASL expressions at the root level (not -within a control method) could be inadvertently truncated during code -generation. This problem was introduced in the 20040715 release. - - ----------------------------------------- -15 July 2004. Summary of changes for version 20040715: - -1) ACPI CA Core Subsystem: - -Restructured the internal HW GPE interfaces to pass/track the current state -of interrupts (enabled/disabled) in order to avoid possible deadlock and -increase flexibility of the interfaces. - -Implemented a "lexicographical compare" for String and Buffer objects within -the logical operators -- LGreater, LLess, LGreaterEqual, and LLessEqual -- -as per further clarification to the ACPI specification. Behavior is similar -to C library "strcmp". - -Completed a major reduction in CPU stack use for the AcpiGetFirmwareTable -external function. In the 32-bit non-debug case, the stack use has been -reduced from 168 bytes to 32 bytes. - -Deployed a new run-time configuration flag, AcpiGbl_EnableInterpreterSlack, -whose purpose is to allow the AML interpreter to forgive certain bad AML -constructs. Default setting is FALSE. - -Implemented the first use of AcpiGbl_EnableInterpreterSlack in the Field IO -support code. If enabled, it allows field access to go beyond the end of a -region definition if the field is within the region length rounded up to the -next access width boundary (a common coding error.) - -Renamed OSD_HANDLER to ACPI_OSD_HANDLER, and OSD_EXECUTION_CALLBACK to -ACPI_OSD_EXEC_CALLBACK for consistency with other ACPI symbols. Also, these -symbols are lowercased by the latest version of the AcpiSrc tool. - -The prototypes for the PCI interfaces in acpiosxf.h have been updated to -rename "Register" to simply "Reg" to prevent certain compilers from -complaining. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 77.8K Code, 11.5K Data, 89.3K Total - Debug Version: 163.8K Code, 68.2K Data, 232.0K Total - Current Release: - Non-Debug Version: 78.0K Code, 11.5K Data, 89.5K Total - Debug Version: 164.1K Code, 68.2K Data, 232.3K Total - - -2) iASL Compiler/Disassembler: - -Implemented full support for Package objects within the Case() operator. -Note: The Break() operator is currently not supported within Case blocks -(TermLists) as there is some question about backward compatibility with ACPI -1.0 interpreters. - - -Fixed a problem where complex terms were not supported properly within the -Switch() operator. - -Eliminated extraneous warning for compiler-emitted reserved names of the -form "_T_x". (Used in Switch/Case operators.) - -Eliminated optimization messages for "_T_x" objects and small constants -within the DefinitionBlock operator. - - ----------------------------------------- -15 June 2004. Summary of changes for version 20040615: - -1) ACPI CA Core Subsystem: - -Implemented support for Buffer and String objects (as per ACPI 2.0) for the -following ASL operators: LEqual, LGreater, LLess, LGreaterEqual, and -LLessEqual. - -All directory names in the entire source package are lower case, as they -were in earlier releases. - -Implemented "Disassemble" command in the AML debugger that will disassemble -a single control method. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 77.7K Code, 11.5K Data, 89.2K Total - Debug Version: 163.3K Code, 67.2K Data, 230.5K Total - - Current Release: - Non-Debug Version: 77.8K Code, 11.5K Data, 89.3K Total - Debug Version: 163.8K Code, 68.2K Data, 232.0K Total - - -2) iASL Compiler/Disassembler: - -Implemented support for Buffer and String objects (as per ACPI 2.0) for the -following ASL operators: LEqual, LGreater, LLess, LGreaterEqual, and -LLessEqual. - -All directory names in the entire source package are lower case, as they -were in earlier releases. - -Fixed a fault when using the -g or -d options if the FADT was -not found. - -Fixed an issue with the Windows version of the compiler where later versions -of Windows place the FADT in the registry under the name "FADT" and not -"FACP" as earlier versions did. This applies when using the -g or - -d options. The compiler now looks for both strings as -necessary. - -Fixed a problem with compiler namepath optimization where a namepath within -the Scope() operator could not be optimized if the namepath was a subpath of -the current scope path. - ----------------------------------------- -27 May 2004. Summary of changes for version 20040527: - -1) ACPI CA Core Subsystem: - -Completed a new design and implementation for EBDA (Extended BIOS Data Area) -support in the RSDP scan code. The original code improperly scanned for the -EBDA by simply scanning from memory location 0 to 0x400. The correct method -is to first obtain the EBDA pointer from within the BIOS data area, then -scan 1K of memory starting at the EBDA pointer. There appear to be few if -any machines that place the RSDP in the EBDA, however. - -Integrated a fix for a possible fault during evaluation of BufferField -arguments. Obsolete code that was causing the problem was removed. - -Found and fixed a problem in the Field Support Code where data could be -corrupted on a bit field read that starts on an aligned boundary but does -not end on an aligned boundary. Merged the read/write "datum length" -calculation code into a common procedure. - -Rolled in a couple of changes to the FreeBSD-specific header. - - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 77.6K Code, 11.5K Data, 89.1K Total - Debug Version: 163.2K Code, 67.2K Data, 230.4K Total - Current Release: - Non-Debug Version: 77.7K Code, 11.5K Data, 89.2K Total - Debug Version: 163.3K Code, 67.2K Data, 230.5K Total - - -2) iASL Compiler/Disassembler: - -Fixed a generation warning produced by some overly-verbose compilers for a -64-bit constant. - ----------------------------------------- -14 May 2004. Summary of changes for version 20040514: - -1) ACPI CA Core Subsystem: - -Fixed a problem where hardware GPE enable bits sometimes not set properly -during and after GPE method execution. Result of 04/27 changes. - -Removed extra "clear all GPEs" when sleeping/waking. - -Removed AcpiHwEnableGpe and AcpiHwDisableGpe, replaced by the single -AcpiHwWriteGpeEnableReg. Changed a couple of calls to the functions above to -the new AcpiEv* calls as appropriate. - -ACPI_OS_NAME was removed from the OS-specific headers. The default name is -now "Microsoft Windows NT" for maximum compatibility. However this can be -changed by modifying the acconfig.h file. - -Allow a single invocation of AcpiInstallNotifyHandler for a handler that -traps both types of notifies (System, Device). Use ACPI_ALL_NOTIFY flag. - -Run _INI methods on ThermalZone objects. This is against the ACPI -specification, but there is apparently ASL code in the field that has these -_INI methods, and apparently "other" AML interpreters execute them. - -Performed a full 16/32/64 bit lint that resulted in some small changes. - -Added a sleep simulation command to the AML debugger to test sleep code. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 77.6K Code, 11.5K Data, 89.1K Total - Debug Version: 162.9K Code, 67.0K Data, 229.9K Total - Current Release: - Non-Debug Version: 77.6K Code, 11.5K Data, 89.1K Total - Debug Version: 163.2K Code, 67.2K Data, 230.4K Total - ----------------------------------------- -27 April 2004. Summary of changes for version 20040427: - -1) ACPI CA Core Subsystem: - -Completed a major overhaul of the GPE handling within ACPI CA. There are -now three types of GPEs: wake-only, runtime-only, and combination wake/run. -The only GPEs allowed to be combination wake/run are for button-style -devices such as a control-method power button, control-method sleep button, -or a notebook lid switch. GPEs that have an _Lxx or _Exx method and are not -referenced by any _PRW methods are marked for "runtime" and hardware -enabled. Any GPE that is referenced by a _PRW method is marked for "wake" -(and disabled at runtime). However, at sleep time, only those GPEs that -have been specifically enabled for wake via the AcpiEnableGpe interface will -actually be hardware enabled. - -A new external interface has been added, AcpiSetGpeType(), that is meant to -be used by device drivers to force a GPE to a particular type. It will be -especially useful for the drivers for the button devices mentioned above. - -Completed restructuring of the ACPI CA initialization sequence so that -default operation region handlers are installed before GPEs are initialized -and the _PRW methods are executed. This will prevent errors when the _PRW -methods attempt to access system memory or I/O space. - -GPE enable/disable no longer reads the GPE enable register. We now keep the -enable info for runtime and wake separate and in the GPE_EVENT_INFO. We -thus no longer depend on the hardware to maintain these bits. - -Always clear the wake status and fixed/GPE status bits before sleep, even -for state S5. - -Improved the AML debugger output for displaying the GPE blocks and their -current status. - -Added new strings for the _OSI method, of the form "Windows 2001 SPx" where -x = 0,1,2,3,4. - -Fixed a problem where the physical address was incorrectly calculated when -the Load() operator was used to directly load from an Operation Region (vs. -loading from a Field object.) Also added check for minimum table length for -this case. - -Fix for multiple mutex acquisition. Restore original thread SyncLevel on -mutex release. - -Added ACPI_VALID_SXDS flag to the AcpiGetObjectInfo interface for -consistency with the other fields returned. - -Shrunk the ACPI_GPE_EVENT_INFO structure by 40%. There is one such -structure for each GPE in the system, so the size of this structure is -important. - -CPU stack requirement reduction: Cleaned up the method execution and object -evaluation paths so that now a parameter structure is passed, instead of -copying the various method parameters over and over again. - -In evregion.c: Correctly exit and reenter the interpreter region if and -only if dispatching an operation region request to a user-installed handler. -Do not exit/reenter when dispatching to a default handler (e.g., default -system memory or I/O handlers) - - -Notes for updating drivers for the new GPE support. The following changes -must be made to ACPI-related device drivers that are attached to one or more -GPEs: (This information will be added to the ACPI CA Programmer Reference.) - -1) AcpiInstallGpeHandler no longer automatically enables the GPE, you must -explicitly call AcpiEnableGpe. -2) There is a new interface called AcpiSetGpeType. This should be called -before enabling the GPE. Also, this interface will automatically disable -the GPE if it is currently enabled. -3) AcpiEnableGpe no longer supports a GPE type flag. - -Specific drivers that must be changed: -1) EC driver: - AcpiInstallGpeHandler (NULL, GpeNum, ACPI_GPE_EDGE_TRIGGERED, -AeGpeHandler, NULL); - AcpiSetGpeType (NULL, GpeNum, ACPI_GPE_TYPE_RUNTIME); - AcpiEnableGpe (NULL, GpeNum, ACPI_NOT_ISR); - -2) Button Drivers (Power, Lid, Sleep): -Run _PRW method under parent device -If _PRW exists: /* This is a control-method button */ - Extract GPE number and possibly GpeDevice - AcpiSetGpeType (GpeDevice, GpeNum, ACPI_GPE_TYPE_WAKE_RUN); - AcpiEnableGpe (GpeDevice, GpeNum, ACPI_NOT_ISR); - -For all other devices that have _PRWs, we automatically set the GPE type to -ACPI_GPE_TYPE_WAKE, but the GPE is NOT automatically (wake) enabled. This -must be done on a selective basis, usually requiring some kind of user app -to allow the user to pick the wake devices. - - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 77.0K Code, 11.4K Data, 88.4K Total - Debug Version: 161.0K Code, 66.3K Data, 227.3K Total - Current Release: - - Non-Debug Version: 77.6K Code, 11.5K Data, 89.1K Total - Debug Version: 162.9K Code, 67.0K Data, 229.9K Total - - - ----------------------------------------- -02 April 2004. Summary of changes for version 20040402: - -1) ACPI CA Core Subsystem: - -Fixed an interpreter problem where an indirect store through an ArgX -parameter was incorrectly applying the "implicit conversion rules" during -the store. From the ACPI specification: "If the target is a method local or -argument (LocalX or ArgX), no conversion is performed and the result is -stored directly to the target". The new behavior is to disable implicit -conversion during ALL stores to an ArgX. - -Changed the behavior of the _PRW method scan to ignore any and all errors -returned by a given _PRW. This prevents the scan from aborting from the -failure of any single _PRW. - -Moved the runtime configuration parameters from the global init procedure to -static variables in acglobal.h. This will allow the host to override the -default values easily. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 76.9K Code, 11.4K Data, 88.3K Total - Debug Version: 160.8K Code, 66.1K Data, 226.9K Total - Current Release: - Non-Debug Version: 77.0K Code, 11.4K Data, 88.4K Total - Debug Version: 161.0K Code, 66.3K Data, 227.3K Total - - -2) iASL Compiler/Disassembler: - -iASL now fully disassembles SSDTs. However, External() statements are not -generated automatically for unresolved symbols at this time. This is a -planned feature for future implementation. - -Fixed a scoping problem in the disassembler that occurs when the type of the -target of a Scope() operator is overridden. This problem caused an -incorrectly nested internal namespace to be constructed. - -Any warnings or errors that are emitted during disassembly are now commented -out automatically so that the resulting file can be recompiled without any -hand editing. - ----------------------------------------- -26 March 2004. Summary of changes for version 20040326: - -1) ACPI CA Core Subsystem: - -Implemented support for "wake" GPEs via interaction between GPEs and the -_PRW methods. Every GPE that is pointed to by one or more _PRWs is -identified as a WAKE GPE and by default will no longer be enabled at -runtime. Previously, we were blindly enabling all GPEs with a corresponding -_Lxx or _Exx method - but most of these turn out to be WAKE GPEs anyway. We -believe this has been the cause of thousands of "spurious" GPEs on some -systems. - -This new GPE behavior is can be reverted to the original behavior (enable -ALL GPEs at runtime) via a runtime flag. - -Fixed a problem where aliased control methods could not access objects -properly. The proper scope within the namespace was not initialized -(transferred to the target of the aliased method) before executing the -target method. - -Fixed a potential race condition on internal object deletion on the return -object in AcpiEvaluateObject. - -Integrated a fix for resource descriptors where both _MEM and _MTP were -being extracted instead of just _MEM. (i.e. bitmask was incorrectly too -wide, 0x0F instead of 0x03.) - -Added a special case for ACPI_ROOT_OBJECT in AcpiUtGetNodeName, preventing a -fault in some cases. - -Updated Notify() values for debug statements in evmisc.c - -Return proper status from AcpiUtMutexInitialize, not just simply AE_OK. - -Code and Data Size: Current and previous 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 much 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: - - Non-Debug Version: 76.5K Code, 11.3K Data, 87.8K Total - Debug Version: 160.3K Code, 66.0K Data, 226.3K Total - Current Release: - Non-Debug Version: 76.9K Code, 11.4K Data, 88.3K Total - Debug Version: 160.8K Code, 66.1K Data, 226.9K Total - ----------------------------------------- -11 March 2004. Summary of changes for version 20040311: - -1) ACPI CA Core Subsystem: - -Fixed a problem where errors occurring during the parse phase of control -method execution did not abort cleanly. For example, objects created and -installed in the namespace were not deleted. This caused all subsequent -invocations of the method to return the AE_ALREADY_EXISTS exception. - -Implemented a mechanism to force a control method to "Serialized" execution -if the method attempts to create namespace objects. (The root of the -AE_ALREADY_EXISTS problem.) - -Implemented support for the predefined _OSI "internal" control method. -Initial supported strings are "Linux", "Windows 2000", "Windows 2001", and -"Windows 2001.1", and can be easily upgraded for new strings as necessary. -This feature will allow "other" operating systems to execute the fully -tested, "Windows" code path through the ASL code - -Global Lock Support: Now allows multiple acquires and releases with any -internal thread. Removed concept of "owning thread" for this special mutex. - -Fixed two functions that were inappropriately declaring large objects on the -CPU stack: PsParseLoop, NsEvaluateRelative. Reduces the stack usage during -method execution considerably. - -Fixed a problem in the ACPI 2.0 FACS descriptor (actbl2.h) where the -S4Bios_f field was incorrectly defined as UINT32 instead of UINT32_BIT. - -Fixed a problem where AcpiEvGpeDetect would fault if there were no GPEs -defined on the machine. - -Implemented two runtime options: One to force all control method execution -to "Serialized" to mimic Windows behavior, another to disable _OSI support -if it causes problems on a given machine. - -Code and Data Size: Current and previous 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 much 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: - Non-Debug Version: 74.8K Code, 10.1K Data, 84.9K Total - Debug Version: 158.7K Code, 65.1K Data, 223.8K Total - Current Release: - Non-Debug Version: 76.5K Code, 11.3K Data, 87.8K Total - Debug Version: 160.3K Code, 66.0K Data, 226.3K Total - -2) iASL Compiler/Disassembler: - -Fixed an array size problem for FreeBSD that would cause the compiler to -fault. - ----------------------------------------- -20 February 2004. Summary of changes for version 20040220: - - -1) ACPI CA Core Subsystem: - -Implemented execution of _SxD methods for Device objects in the -GetObjectInfo interface. - -Fixed calls to _SST method to pass the correct arguments. - -Added a call to _SST on wake to restore to "working" state. - -Check for End-Of-Buffer failure case in the WalkResources interface. - -Integrated fix for 64-bit alignment issue in acglobal.h by moving two -structures to the beginning of the file. - -After wake, clear GPE status register(s) before enabling GPEs. - -After wake, clear/enable power button. (Perhaps we should clear/enable all -fixed events upon wake.) - -Fixed a couple of possible memory leaks in the Namespace manager. - -Integrated latest acnetbsd.h file. - ----------------------------------------- -11 February 2004. Summary of changes for version 20040211: - - -1) ACPI CA Core Subsystem: - -Completed investigation and implementation of the call-by-reference -mechanism for control method arguments. - -Fixed a problem where a store of an object into an indexed package could -fail if the store occurs within a different method than the method that -created the package. - -Fixed a problem where the ToDecimal operator could return incorrect results. - -Fixed a problem where the CopyObject operator could fail on some of the more -obscure objects (e.g., Reference objects.) - -Improved the output of the Debug object to display buffer, package, and -index objects. - -Fixed a problem where constructs of the form "RefOf (ArgX)" did not return -the expected result. - -Added permanent ACPI_REPORT_ERROR macros for all instances of the -ACPI_AML_INTERNAL exception. - -Integrated latest version of acfreebsd.h - ----------------------------------------- -16 January 2004. Summary of changes for version 20040116: - -The purpose of this release is primarily to update the copyright years in -each module, thus causing a huge number of diffs. There are a few small -functional changes, however. - -1) ACPI CA Core Subsystem: - -Improved error messages when there is a problem finding one or more of the -required base ACPI tables - -Reintroduced the definition of APIC_HEADER in actbl.h - -Changed definition of MADT_ADDRESS_OVERRIDE to 64 bits (actbl.h) - -Removed extraneous reference to NewObj in dsmthdat.c - -2) iASL compiler - -Fixed a problem introduced in December that disabled the correct disassembly -of Resource Templates - - ----------------------------------------- -03 December 2003. Summary of changes for version 20031203: - -1) ACPI CA Core Subsystem: - -Changed the initialization of Operation Regions during subsystem -init to perform two entire walks of the ACPI namespace; The first -to initialize the regions themselves, the second to execute the -_REG methods. This fixed some interdependencies across _REG -methods found on some machines. - -Fixed a problem where a Store(Local0, Local1) could simply update -the object reference count, and not create a new copy of the -object if the Local1 is uninitialized. - -Implemented support for the _SST reserved method during sleep -transitions. - -Implemented support to clear the SLP_TYP and SLP_EN bits when -waking up, this is apparently required by some machines. - -When sleeping, clear the wake status only if SleepState is not S5. - -Fixed a problem in AcpiRsExtendedIrqResource() where an incorrect -pointer arithmetic advanced a string pointer too far. - -Fixed a problem in AcpiTbGetTablePtr() where a garbage pointer -could be returned if the requested table has not been loaded. - -Within the support for IRQ resources, restructured the handling of -the active and edge/level bits. - -Fixed a few problems in AcpiPsxExecute() where memory could be -leaked under certain error conditions. - -Improved error messages for the cases where the ACPI mode could -not be entered. - -Code and Data Size: Current and previous 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 much 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 (20031029): - Non-Debug Version: 74.4K Code, 10.1K Data, 84.5K Total - Debug Version: 158.3K Code, 65.0K Data, 223.3K Total - Current Release: - Non-Debug Version: 74.8K Code, 10.1K Data, 84.9K Total - Debug Version: 158.7K Code, 65.1K Data, 223.8K Total - -2) iASL Compiler/Disassembler: - -Implemented a fix for the iASL disassembler where a bad index was -generated. This was most noticeable on 64-bit platforms - - ----------------------------------------- -29 October 2003. Summary of changes for version 20031029: - -1) ACPI CA Core Subsystem: - - -Fixed a problem where a level-triggered GPE with an associated -_Lxx control method was incorrectly cleared twice. - -Fixed a problem with the Field support code where an access can -occur beyond the end-of-region if the field is non-aligned but -extends to the very end of the parent region (resulted in an -AE_AML_REGION_LIMIT exception.) - -Fixed a problem with ACPI Fixed Events where an RT Clock handler -would not get invoked on an RTC event. The RTC event bitmasks for -the PM1 registers were not being initialized properly. - -Implemented support for executing _STA and _INI methods for -Processor objects. Although this is currently not part of the -ACPI specification, there is existing ASL code that depends on the -init-time execution of these methods. - -Implemented and deployed a GetDescriptorName function to decode -the various types of internal descriptors. Guards against null -descriptors during debug output also. - -Implemented and deployed a GetNodeName function to extract the 4- -character namespace node name. This function simplifies the debug -and error output, as well as guarding against null pointers during -output. - -Implemented and deployed the ACPI_FORMAT_UINT64 helper macro to -simplify the debug and error output of 64-bit integers. This -macro replaces the HIDWORD and LODWORD macros for dumping these -integers. - -Updated the implementation of the Stall() operator to only call -AcpiOsStall(), and also return an error if the operand is larger -than 255. This preserves the required behavior of not -relinquishing the processor, as would happen if AcpiOsSleep() was -called for "long stalls". - -Constructs of the form "Store(LocalX,LocalX)" where LocalX is not -initialized are now treated as NOOPs. - -Cleaned up a handful of warnings during 64-bit generation. - -Fixed a reported error where and incorrect GPE number was passed -to the GPE dispatch handler. This value is only used for error -output, however. Used this opportunity to clean up and streamline -the GPE dispatch code. - -Code and Data Size: Current and previous 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 much 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 (20031002): - Non-Debug Version: 74.1K Code, 9.7K Data, 83.8K Total - Debug Version: 157.9K Code, 64.8K Data, 222.7K Total - Current Release: - Non-Debug Version: 74.4K Code, 10.1K Data, 84.5K Total - Debug Version: 158.3K Code, 65.0K Data, 223.3K Total - - -2) iASL Compiler/Disassembler: - -Updated the iASL compiler to return an error if the operand to the -Stall() operator is larger than 255. - - ----------------------------------------- -02 October 2003. Summary of changes for version 20031002: - - -1) ACPI CA Core Subsystem: - -Fixed a problem with Index Fields where the index was not -incremented for fields that require multiple writes to the -index/data registers (Fields that are wider than the data -register.) - -Fixed a problem with all Field objects where a write could go -beyond the end-of-field if the field was larger than the access -granularity and therefore required multiple writes to complete the -request. An extra write beyond the end of the field could happen -inadvertently. - -Fixed a problem with Index Fields where a BUFFER_OVERFLOW error -would incorrectly be returned if the width of the Data Register -was larger than the specified field access width. - -Completed fixes for LoadTable() and Unload() and verified their -operation. Implemented full support for the "DdbHandle" object -throughout the ACPI CA subsystem. - -Implemented full support for the MADT and ECDT tables in the ACPI -CA header files. Even though these tables are not directly -consumed by ACPI CA, the header definitions are useful for ACPI -device drivers. - -Integrated resource descriptor fixes posted to the Linux ACPI -list. This included checks for minimum descriptor length, and -support for trailing NULL strings within descriptors that have -optional string elements. - -Code and Data Size: Current and previous 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 much 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 (20030918): - Non-Debug Version: 73.9K Code, 9.7K Data, 83.6K Total - Debug Version: 157.3K Code, 64.5K Data, 221.8K Total - Current Release: - Non-Debug Version: 74.1K Code, 9.7K Data, 83.8K Total - Debug Version: 157.9K Code, 64.8K Data, 222.7K Total - - -2) iASL Compiler: - -Implemented detection of non-ASCII characters within the input -source ASL file. This catches attempts to compile binary (AML) -files early in the compile, with an informative error message. - -Fixed a problem where the disassembler would fault if the output -filename could not be generated or if the output file could not be -opened. - ----------------------------------------- -18 September 2003. Summary of changes for version 20030918: - - -1) ACPI CA Core Subsystem: - -Found and fixed a longstanding problem with the late execution of -the various deferred AML opcodes (such as Operation Regions, -Buffer Fields, Buffers, and Packages). If the name string -specified for the name of the new object placed the object in a -scope other than the current scope, the initialization/execution -of the opcode failed. The solution to this problem was to -implement a mechanism where the late execution of such opcodes -does not attempt to lookup/create the name a second time in an -incorrect scope. This fixes the "region size computed -incorrectly" problem. - -Fixed a call to AcpiHwRegisterWrite in hwregs.c that was causing a -Global Lock AE_BAD_PARAMETER error. - -Fixed several 64-bit issues with prototypes, casting and data -types. - -Removed duplicate prototype from acdisasm.h - -Fixed an issue involving EC Operation Region Detach (Shaohua Li) - -Code and Data Size: Current and previous 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 much 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: - - Non-Debug Version: 73.7K Code, 9.7K Data, 83.4K Total - Debug Version: 156.9K Code, 64.2K Data, 221.1K Total - Current Release: - Non-Debug Version: 73.9K Code, 9.7K Data, 83.6K Total - Debug Version: 157.3K Code, 64.5K Data, 221.8K Total - - -2) Linux: - -Fixed the AcpiOsSleep implementation in osunixxf.c to pass the -correct sleep time in seconds. - ----------------------------------------- -14 July 2003. Summary of changes for version 20030619: - -1) ACPI CA Core Subsystem: - -Parse SSDTs in order discovered, as opposed to reverse order -(Hrvoje Habjanic) - -Fixes from FreeBSD and NetBSD. (Frank van der Linden, Thomas -Klausner, - Nate Lawson) - - -2) Linux: - -Dynamically allocate SDT list (suggested by Andi Kleen) - -proc function return value cleanups (Andi Kleen) - -Correctly handle NMI watchdog during long stalls (Andrew Morton) - -Make it so acpismp=force works (reported by Andrew Morton) - - ----------------------------------------- -19 June 2003. Summary of changes for version 20030619: - -1) ACPI CA Core Subsystem: - -Fix To/FromBCD, eliminating the need for an arch-specific #define. - -Do not acquire a semaphore in the S5 shutdown path. - -Fix ex_digits_needed for 0. (Takayoshi Kochi) - -Fix sleep/stall code reversal. (Andi Kleen) - -Revert a change having to do with control method calling -semantics. - -2) Linux: - -acpiphp update (Takayoshi Kochi) - -Export acpi_disabled for sonypi (Stelian Pop) - -Mention acpismp=force in config help - -Re-add acpitable.c and acpismp=force. This improves backwards - -compatibility and also cleans up the code to a significant degree. - -Add ASUS Value-add driver (Karol Kozimor and Julien Lerouge) - ----------------------------------------- -22 May 2003. Summary of changes for version 20030522: - -1) ACPI CA Core Subsystem: - -Found and fixed a reported problem where an AE_NOT_FOUND error -occurred occasionally during _BST evaluation. This turned out to -be an Owner ID allocation issue where a called method did not get -a new ID assigned to it. Eventually, (after 64k calls), the Owner -ID UINT16 would wraparound so that the ID would be the same as the -caller's and the called method would delete the caller's -namespace. - -Implemented extended error reporting for control methods that are -aborted due to a run-time exception. Output includes the exact -AML instruction that caused the method abort, a dump of the method -locals and arguments at the time of the abort, and a trace of all -nested control method calls. - -Modified the interpreter to allow the creation of buffers of zero -length from the AML code. Implemented new code to ensure that no -attempt is made to actually allocate a memory buffer (of length -zero) - instead, a simple buffer object with a NULL buffer pointer -and length zero is created. A warning is no longer issued when -the AML attempts to create a zero-length buffer. - -Implemented a workaround for the "leading asterisk issue" in -_HIDs, _UIDs, and _CIDs in the AML interpreter. One leading -asterisk is automatically removed if present in any HID, UID, or -CID strings. The iASL compiler will still flag this asterisk as -an error, however. - -Implemented full support for _CID methods that return a package of -multiple CIDs (Compatible IDs). The AcpiGetObjectInfo() interface -now additionally returns a device _CID list if present. This -required a change to the external interface in order to pass an -ACPI_BUFFER object as a parameter since the _CID list is of -variable length. - -Fixed a problem with the new AE_SAME_HANDLER exception where -handler initialization code did not know about this exception. - -Code and Data Size: Current and previous 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 much 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 (20030509): - Non-Debug Version: 73.4K Code, 9.7K Data, 83.1K Total - Debug Version: 156.1K Code, 63.9K Data, 220.0K Total - Current Release: - Non-Debug Version: 73.7K Code, 9.7K Data, 83.4K Total - Debug Version: 156.9K Code, 64.2K Data, 221.1K Total - - -2) Linux: - -Fixed a bug in which we would reinitialize the ACPI interrupt -after it was already working, thus disabling all ACPI and the IRQs -for any other device sharing the interrupt. (Thanks to Stian -Jordet) - -Toshiba driver update (John Belmonte) - -Return only 0 or 1 for our interrupt handler status (Andrew -Morton) - - -3) iASL Compiler: - -Fixed a reported problem where multiple (nested) ElseIf() -statements were not handled correctly by the compiler, resulting -in incorrect warnings and incorrect AML code. This was a problem -in both the ASL parser and the code generator. - - -4) Documentation: - -Added changes to existing interfaces, new exception codes, and new -text concerning reference count object management versus garbage -collection. - ----------------------------------------- -09 May 2003. Summary of changes for version 20030509. - - -1) ACPI CA Core Subsystem: - -Changed the subsystem initialization sequence to hold off -installation of address space handlers until the hardware has been -initialized and the system has entered ACPI mode. This is because -the installation of space handlers can cause _REG methods to be -run. Previously, the _REG methods could potentially be run before -ACPI mode was enabled. - -Fixed some memory leak issues related to address space handler and -notify handler installation. There were some problems with the -reference count mechanism caused by the fact that the handler -objects are shared across several namespace objects. - -Fixed a reported problem where reference counts within the -namespace were not properly updated when named objects created by -method execution were deleted. - -Fixed a reported problem where multiple SSDTs caused a deletion -issue during subsystem termination. Restructured the table data -structures to simplify the linked lists and the related code. - -Fixed a problem where the table ID associated with secondary -tables (SSDTs) was not being propagated into the namespace objects -created by those tables. This would only present a problem for -tables that are unloaded at run-time, however. - -Updated AcpiOsReadable and AcpiOsWritable to use the ACPI_SIZE -type as the length parameter (instead of UINT32). - -Solved a long-standing problem where an ALREADY_EXISTS error -appears on various systems. This problem could happen when there -are multiple PCI_Config operation regions under a single PCI root -bus. This doesn't happen very frequently, but there are some -systems that do this in the ASL. - -Fixed a reported problem where the internal DeleteNode function -was incorrectly handling the case where a namespace node was the -first in the parent's child list, and had additional peers (not -the only child, but first in the list of children.) - -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 much 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 - Non-Debug Version: 73.7K Code, 9.5K Data, 83.2K Total - Debug Version: 156.1K Code, 63.6K Data, 219.7K Total - Current Release: - Non-Debug Version: 73.4K Code, 9.7K Data, 83.1K Total - Debug Version: 156.1K Code, 63.9K Data, 220.0K Total - - -2) Linux: - -Allow ":" in OS override string (Ducrot Bruno) - -Kobject fix (Greg KH) - - -3 iASL Compiler/Disassembler: - -Fixed a problem in the generation of the C source code files (AML -is emitted in C source statements for BIOS inclusion) where the -Ascii dump that appears within a C comment at the end of each line -could cause a compile time error if the AML sequence happens to -have an open comment or close comment sequence embedded. - - ----------------------------------------- -24 April 2003. Summary of changes for version 20030424. - - -1) ACPI CA Core Subsystem: - -Support for big-endian systems has been implemented. Most of the -support has been invisibly added behind big-endian versions of the -ACPI_MOVE_* macros. - -Fixed a problem in AcpiHwDisableGpeBlock() and -AcpiHwClearGpeBlock() where an incorrect offset was passed to the -low level hardware write routine. The offset parameter was -actually eliminated from the low level read/write routines because -they had become obsolete. - -Fixed a problem where a handler object was deleted twice during -the removal of a fixed event handler. - - -2) Linux: - -A fix for SMP systems with link devices was contributed by - -Compaq's Dan Zink. - -(2.5) Return whether we handled the interrupt in our IRQ handler. -(Linux ISRs no longer return void, so we can propagate the handler -return value from the ACPI CA core back to the OS.) - - - -3) Documentation: - -The ACPI CA Programmer Reference has been updated to reflect new -interfaces and changes to existing interfaces. - ----------------------------------------- -28 March 2003. Summary of changes for version 20030328. - -1) ACPI CA Core Subsystem: - -The GPE Block Device support has been completed. New interfaces -are AcpiInstallGpeBlock and AcpiRemoveGpeBlock. The Event -interfaces (enable, disable, clear, getstatus) have been split -into separate interfaces for Fixed Events and General Purpose -Events (GPEs) in order to support GPE Block Devices properly. - -Fixed a problem where the error message "Failed to acquire -semaphore" would appear during operations on the embedded -controller (EC). - -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 much 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 - Non-Debug Version: 72.3K Code, 9.5K Data, 81.8K Total - Debug Version: 154.0K Code, 63.4K Data, 217.4K Total - Current Release: - Non-Debug Version: 73.7K Code, 9.5K Data, 83.2K Total - Debug Version: 156.1K Code, 63.6K Data, 219.7K Total - - ----------------------------------------- -28 February 2003. Summary of changes for version 20030228. - - -1) ACPI CA Core Subsystem: - -The GPE handling and dispatch code has been completely overhauled -in preparation for support of GPE Block Devices (ID ACPI0006). -This affects internal data structures and code only; there should -be no differences visible externally. One new file has been -added, evgpeblk.c - -The FADT fields GPE0_BLK_LEN and GPE1_BLK_LEN are now the only -fields that are used to determine the GPE block lengths. The -REGISTER_BIT_WIDTH field of the X_GPEx_BLK extended address -structures are ignored. This is per the ACPI specification but it -isn't very clear. The full 256 Block 0/1 GPEs are now supported -(the use of REGISTER_BIT_WIDTH limited the number of GPEs to 128). - -In the SCI interrupt handler, removed the read of the PM1_CONTROL -register to look at the SCI_EN bit. On some machines, this read -causes an SMI event and greatly slows down SCI events. (This may -in fact be the cause of slow battery status response on some -systems.) - -Fixed a problem where a store of a NULL string to a package object -could cause the premature deletion of the object. This was seen -during execution of the battery _BIF method on some systems, -resulting in no battery data being returned. - -Added AcpiWalkResources interface to simplify parsing of resource -lists. - -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 much 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 - Non-Debug Version: 72.0K Code, 9.5K Data, 81.5K Total - Debug Version: 153.0K Code, 62.9K Data, 215.9K Total - Current Release: - Non-Debug Version: 72.3K Code, 9.5K Data, 81.8K Total - Debug Version: 154.0K Code, 63.4K Data, 217.4K Total - - -2) Linux - -S3 fixes (Ole Rohne) - -Update ACPI PHP driver with to use new acpi_walk_resource API -(Bjorn Helgaas) - -Add S4BIOS support (Pavel Machek) - -Map in entire table before performing checksum (John Stultz) - -Expand the mem= cmdline to allow the specification of reserved and -ACPI DATA blocks (Pavel Machek) - -Never use ACPI on VISWS - -Fix derive_pci_id (Ducrot Bruno, Alvaro Lopez) - -Revert a change that allowed P_BLK lengths to be 4 or 5. This is -causing us to think that some systems support C2 when they really -don't. - -Do not count processor objects for non-present CPUs (Thanks to -Dominik Brodowski) - - -3) iASL Compiler: - -Fixed a problem where ASL include files could not be found and -opened. - -Added support for the _PDC reserved name. - - ----------------------------------------- -22 January 2003. Summary of changes for version 20030122. - - -1) ACPI CA Core Subsystem: - -Added a check for constructs of the form: Store (Local0, Local0) -where Local0 is not initialized. Apparently, some BIOS -programmers believe that this is a NOOP. Since this store doesn't -do anything anyway, the new prototype behavior will ignore this -error. This is a case where we can relax the strict checking in -the interpreter in the name of compatibility. - - -2) Linux - -The AcpiSrc Source Conversion Utility has been released with the -Linux package for the first time. This is the utility that is -used to convert the ACPI CA base source code to the Linux version. - -(Both) Handle P_BLK lengths shorter than 6 more gracefully - -(Both) Move more headers to include/acpi, and delete an unused -header. - -(Both) Move drivers/acpi/include directory to include/acpi - -(Both) Boot functions don't use cmdline, so don't pass it around - -(Both) Remove include of unused header (Adrian Bunk) - -(Both) acpiphp.h includes both linux/acpi.h and acpi_bus.h. Since -the -former now also includes the latter, acpiphp.h only needs the one, -now. - -(2.5) Make it possible to select method of bios restoring after S3 -resume. [=> no more ugly ifdefs] (Pavel Machek) - -(2.5) Make proc write interfaces work (Pavel Machek) - -(2.5) Properly init/clean up in cpufreq/acpi (Dominik Brodowski) - -(2.5) Break out ACPI Perf code into its own module, under cpufreq -(Dominik Brodowski) - -(2.4) S4BIOS support (Ducrot Bruno) - -(2.4) Fix acpiphp_glue.c for latest ACPI struct changes (Sergio -Visinoni) - - -3) iASL Compiler: - -Added support to disassemble SSDT and PSDTs. - -Implemented support to obtain SSDTs from the Windows registry if -available. - - ----------------------------------------- -09 January 2003. Summary of changes for version 20030109. - -1) ACPI CA Core Subsystem: - -Changed the behavior of the internal Buffer-to-String conversion -function. The current ACPI specification states that the contents -of the buffer are "converted to a string of two-character -hexadecimal numbers, each separated by a space". Unfortunately, -this definition is not backwards compatible with existing ACPI 1.0 -implementations (although the behavior was not defined in the ACPI -1.0 specification). The new behavior simply copies data from the -buffer to the string until a null character is found or the end of -the buffer is reached. The new String object is always null -terminated. This problem was seen during the generation of _BIF -battery data where incorrect strings were returned for battery -type, etc. This will also require an errata to the ACPI -specification. - -Renamed all instances of NATIVE_UINT and NATIVE_INT to -ACPI_NATIVE_UINT and ACPI_NATIVE_INT, respectively. - -Copyright in all module headers (both Linux and non-Linux) has be -updated to 2003. - -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 much 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 - Non-Debug Version: 72.0K Code, 9.5K Data, 81.5K Total - Debug Version: 153.0K Code, 62.9K Data, 215.9K Total - Current Release: - Non-Debug Version: 72.0K Code, 9.5K Data, 81.5K Total - Debug Version: 153.0K Code, 62.9K Data, 215.9K Total - - -2) Linux - -Fixed an oops on module insertion/removal (Matthew Tippett) - -(2.4) Fix to handle dynamic size of mp_irqs (Joerg Prante) - -(2.5) Replace pr_debug (Randy Dunlap) - -(2.5) Remove usage of CPUFREQ_ALL_CPUS (Dominik Brodowski) - -(Both) Eliminate spawning of thread from timer callback, in favor -of schedule_work() - -(Both) Show Lid status in /proc (Zdenek OGAR Skalak) - -(Both) Added define for Fixed Function HW region (Matthew Wilcox) - -(Both) Add missing statics to button.c (Pavel Machek) - -Several changes have been made to the source code translation -utility that generates the Linux Code in order to make the code -more "Linux-like": - -All typedefs on structs and unions have been removed in keeping -with the Linux coding style. - -Removed the non-Linux SourceSafe module revision number from each -module header. - -Completed major overhaul of symbols to be lowercased for linux. -Doubled the number of symbols that are lowercased. - -Fixed a problem where identifiers within procedure headers and -within quotes were not fully lower cased (they were left with a -starting capital.) - -Some C macros whose only purpose is to allow the generation of 16- -bit code are now completely removed in the Linux code, increasing -readability and maintainability. - ----------------------------------------- - -12 December 2002. Summary of changes for version 20021212. - - -1) ACPI CA Core Subsystem: - -Fixed a problem where the creation of a zero-length AML Buffer -would cause a fault. - -Fixed a problem where a Buffer object that pointed to a static AML -buffer (in an ACPI table) could inadvertently be deleted, causing -memory corruption. - -Fixed a problem where a user buffer (passed in to the external -ACPI CA interfaces) could be overwritten if the buffer was too -small to complete the operation, causing memory corruption. - -Fixed a problem in the Buffer-to-String conversion code where a -string of length one was always returned, regardless of the size -of the input Buffer object. - -Removed the NATIVE_CHAR data type across the entire source due to -lack of need and lack of consistent use. - -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 much 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 - Non-Debug Version: 72.1K Code, 9.5K Data, 81.6K Total - Debug Version: 152.7K Code, 62.7K Data, 215.4K Total - Current Release: - Non-Debug Version: 72.0K Code, 9.5K Data, 81.5K Total - Debug Version: 153.0K Code, 62.9K Data, 215.9K Total - - ----------------------------------------- -05 December 2002. Summary of changes for version 20021205. - -1) ACPI CA Core Subsystem: - -Fixed a problem where a store to a String or Buffer object could -cause corruption of the DSDT if the object type being stored was -the same as the target object type and the length of the object -being stored was equal to or smaller than the original (existing) -target object. This was seen to cause corruption of battery _BIF -buffers if the _BIF method modified the buffer on the fly. - -Fixed a problem where an internal error was generated if a control -method invocation was used in an OperationRegion, Buffer, or -Package declaration. This was caused by the deferred parsing of -the control method and thus the deferred creation of the internal -method object. The solution to this problem was to create the -internal method object at the moment the method is encountered in -the first pass - so that subsequent references to the method will -able to obtain the required parameter count and thus properly -parse the method invocation. This problem presented itself as an -AE_AML_INTERNAL during the pass 1 parse phase during table load. - -Fixed a problem where the internal String object copy routine did -not always allocate sufficient memory for the target String object -and caused memory corruption. This problem was seen to cause -"Allocation already present in list!" errors as memory allocation -became corrupted. - -Implemented a new function for the evaluation of namespace objects -that allows the specification of the allowable return object -types. This simplifies a lot of code that checks for a return -object of one or more specific objects returned from the -evaluation (such as _STA, etc.) This may become and external -function if it would be useful to ACPI-related drivers. - -Completed another round of prefixing #defines with "ACPI_" for -clarity. - -Completed additional code restructuring to allow more modular -linking for iASL compiler and AcpiExec. Several files were split -creating new files. New files: nsparse.c dsinit.c evgpe.c - -Implemented an abort mechanism to terminate an executing control -method via the AML debugger. This feature is useful for debugging -control methods that depend (wait) for specific hardware -responses. - -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 much 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 - Non-Debug Version: 71.4K Code, 9.0K Data, 80.4K Total - Debug Version: 152.9K Code, 63.3K Data, 216.2K Total - Current Release: - Non-Debug Version: 72.1K Code, 9.5K Data, 81.6K Total - Debug Version: 152.7K Code, 62.7K Data, 215.4K Total - - -2) iASL Compiler/Disassembler - -Fixed a compiler code generation problem for "Interrupt" Resource -Descriptors. If specified in the ASL, the optional "Resource -Source Index" and "Resource Source" fields were not inserted into -the correct location within the AML resource descriptor, creating -an invalid descriptor. - -Fixed a disassembler problem for "Interrupt" resource descriptors. -The optional "Resource Source Index" and "Resource Source" fields -were ignored. - - ----------------------------------------- -22 November 2002. Summary of changes for version 20021122. - - -1) ACPI CA Core Subsystem: - -Fixed a reported problem where an object stored to a Method Local -or Arg was not copied to a new object during the store - the -object pointer was simply copied to the Local/Arg. This caused -all subsequent operations on the Local/Arg to also affect the -original source of the store operation. - -Fixed a problem where a store operation to a Method Local or Arg -was not completed properly if the Local/Arg contained a reference -(from RefOf) to a named field. The general-purpose store-to- -namespace-node code is now used so that this case is handled -automatically. - -Fixed a problem where the internal object copy routine would cause -a protection fault if the object being copied was a Package and -contained either 1) a NULL package element or 2) a nested sub- -package. - -Fixed a problem with the GPE initialization that resulted from an -ambiguity in the ACPI specification. One section of the -specification states that both the address and length of the GPE -block must be zero if the block is not supported. Another section -implies that only the address need be zero if the block is not -supported. The code has been changed so that both the address and -the length must be non-zero to indicate a valid GPE block (i.e., -if either the address or the length is zero, the GPE block is -invalid.) - -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 much 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 - Non-Debug Version: 71.3K Code, 9.0K Data, 80.3K Total - Debug Version: 152.7K Code, 63.2K Data, 215.5K Total - Current Release: - Non-Debug Version: 71.4K Code, 9.0K Data, 80.4K Total - Debug Version: 152.9K Code, 63.3K Data, 216.2K Total - - -2) Linux - -Cleaned up EC driver. Exported an external EC read/write -interface. By going through this, other drivers (most notably -sonypi) will be able to serialize access to the EC. - - -3) iASL Compiler/Disassembler - -Implemented support to optionally generate include files for both -ASM and C (the -i switch). This simplifies BIOS development by -automatically creating include files that contain external -declarations for the symbols that are created within the - -(optionally generated) ASM and C AML source files. - - ----------------------------------------- -15 November 2002. Summary of changes for version 20021115. - -1) ACPI CA Core Subsystem: - -Fixed a memory leak problem where an error during resolution of - -method arguments during a method invocation from another method -failed to cleanup properly by deleting all successfully resolved -argument objects. - -Fixed a problem where the target of the Index() operator was not -correctly constructed if the source object was a package. This -problem has not been detected because the use of a target operand -with Index() is very rare. - -Fixed a problem with the Index() operator where an attempt was -made to delete the operand objects twice. - -Fixed a problem where an attempt was made to delete an operand -twice during execution of the CondRefOf() operator if the target -did not exist. - -Implemented the first of perhaps several internal create object -functions that create and initialize a specific object type. This -consolidates duplicated code wherever the object is created, thus -shrinking the size of the subsystem. - -Implemented improved debug/error messages for errors that occur -during nested method invocations. All executing method pathnames -are displayed (with the error) as the call stack is unwound - thus -simplifying debug. - -Fixed a problem introduced in the 10/02 release that caused -premature deletion of a buffer object if a buffer was used as an -ASL operand where an integer operand is required (Thus causing an -implicit object conversion from Buffer to Integer.) The change in -the 10/02 release was attempting to fix a memory leak (albeit -incorrectly.) - -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 much 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 - Non-Debug Version: 71.9K Code, 9.1K Data, 81.0K Total - Debug Version: 153.1K Code, 63.3K Data, 216.4K Total - Current Release: - Non-Debug Version: 71.3K Code, 9.0K Data, 80.3K Total - Debug Version: 152.7K Code, 63.2K Data, 215.5K Total - - -2) Linux - -Changed the implementation of the ACPI semaphores to use down() -instead of down_interruptable(). It is important that the -execution of ACPI control methods not be interrupted by signals. -Methods must run to completion, or the system may be left in an -unknown/unstable state. - -Fixed a compilation error when CONFIG_SOFTWARE_SUSPEND is not set. -(Shawn Starr) - - -3) iASL Compiler/Disassembler - - -Changed the default location of output files. All output files -are now placed in the current directory by default instead of in -the directory of the source file. This change may affect some -existing makefiles, but it brings the behavior of the compiler in -line with other similar tools. The location of the output files -can be overridden with the -p command line switch. - - ----------------------------------------- -11 November 2002. Summary of changes for version 20021111. - - -0) ACPI Specification 2.0B is released and is now available at: -http://www.acpi.info/index.html - - -1) ACPI CA Core Subsystem: - -Implemented support for the ACPI 2.0 SMBus Operation Regions. -This includes the early detection and handoff of the request to -the SMBus region handler (avoiding all of the complex field -support code), and support for the bidirectional return packet -from an SMBus write operation. This paves the way for the -development of SMBus drivers in each host operating system. - -Fixed a problem where the semaphore WAIT_FOREVER constant was -defined as 32 bits, but must be 16 bits according to the ACPI -specification. This had the side effect of causing ASL -Mutex/Event timeouts even though the ASL code requested a wait -forever. Changed all internal references to the ACPI timeout -parameter to 16 bits to prevent future problems. Changed the name -of WAIT_FOREVER to ACPI_WAIT_FOREVER. - -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 much 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 - Non-Debug Version: 71.4K Code, 9.0K Data, 80.4K Total - Debug Version: 152.3K Code, 63.0K Data, 215.3K Total - Current Release: - Non-Debug Version: 71.9K Code, 9.1K Data, 81.0K Total - Debug Version: 153.1K Code, 63.3K Data, 216.4K Total - - -2) Linux - -Module loading/unloading fixes (John Cagle) - - -3) iASL Compiler/Disassembler - -Added support for the SMBBlockProcessCall keyword (ACPI 2.0) - -Implemented support for the disassembly of all SMBus protocol -keywords (SMBQuick, SMBWord, etc.) - ----------------------------------------- -01 November 2002. Summary of changes for version 20021101. - - -1) ACPI CA Core Subsystem: - -Fixed a problem where platforms that have a GPE1 block but no GPE0 -block were not handled correctly. This resulted in a "GPE -overlap" error message. GPE0 is no longer required. - -Removed code added in the previous release that inserted nodes -into the namespace in alphabetical order. This caused some side- -effects on various machines. The root cause of the problem is -still under investigation since in theory, the internal ordering -of the namespace nodes should not matter. - - -Enhanced error reporting for the case where a named object is not -found during control method execution. The full ACPI namepath -(name reference) of the object that was not found is displayed in -this case. - -Note: as a result of the overhaul of the namespace object types in -the previous release, the namespace nodes for the predefined -scopes (_TZ, _PR, etc.) are now of the type ACPI_TYPE_LOCAL_SCOPE -instead of ACPI_TYPE_ANY. This simplifies the namespace -management code but may affect code that walks the namespace tree -looking for specific object types. - -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 much 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 - Non-Debug Version: 70.7K Code, 8.6K Data, 79.3K Total - Debug Version: 151.7K Code, 62.4K Data, 214.1K Total - Current Release: - Non-Debug Version: 71.4K Code, 9.0K Data, 80.4K Total - Debug Version: 152.3K Code, 63.0K Data, 215.3K Total - - -2) Linux - -Fixed a problem introduced in the previous release where the -Processor and Thermal objects were not recognized and installed in -/proc. This was related to the scope type change described above. - - -3) iASL Compiler/Disassembler - -Implemented the -g option to get all of the required ACPI tables -from the registry and save them to files (Windows version of the -compiler only.) The required tables are the FADT, FACS, and DSDT. - -Added ACPI table checksum validation during table disassembly in -order to catch corrupted tables. - - ----------------------------------------- -22 October 2002. Summary of changes for version 20021022. - -1) ACPI CA Core Subsystem: - -Implemented a restriction on the Scope operator that the target -must already exist in the namespace at the time the operator is -encountered (during table load or method execution). In other -words, forward references are not allowed and Scope() cannot -create a new object. This changes the previous behavior where the -interpreter would create the name if not found. This new behavior -correctly enables the search-to-root algorithm during namespace -lookup of the target name. Because of this upsearch, this fixes -the known Compaq _SB_.OKEC problem and makes both the AML -interpreter and iASL compiler compatible with other ACPI -implementations. - -Completed a major overhaul of the internal ACPI object types for -the ACPI Namespace and the associated operand objects. Many of -these types had become obsolete with the introduction of the two- -pass namespace load. This cleanup simplifies the code and makes -the entire namespace load mechanism much clearer and easier to -understand. - -Improved debug output for tracking scope opening/closing to help -diagnose scoping issues. The old scope name as well as the new -scope name are displayed. Also improved error messages for -problems with ASL Mutex objects and error messages for GPE -problems. - -Cleaned up the namespace dump code, removed obsolete code. - -All string output (for all namespace/object dumps) now uses the -common ACPI string output procedure which handles escapes properly -and does not emit non-printable characters. - -Fixed some issues with constants in the 64-bit version of the -local C library (utclib.c) - - -2) Linux - -EC Driver: No longer attempts to acquire the Global Lock at -interrupt level. - - -3) iASL Compiler/Disassembler - -Implemented ACPI 2.0B grammar change that disallows all Type 1 and -2 opcodes outside of a control method. This means that the -"executable" operators (versus the "namespace" operators) cannot -be used at the table level; they can only be used within a control -method. - -Implemented the restriction on the Scope() operator where the -target must already exist in the namespace at the time the -operator is encountered (during ASL compilation). In other words, -forward references are not allowed and Scope() cannot create a new -object. This makes the iASL compiler compatible with other ACPI -implementations and makes the Scope() implementation adhere to the -ACPI specification. - -Fixed a problem where namepath optimization for the Alias operator -was optimizing the wrong path (of the two namepaths.) This caused -a "Missing alias link" error message. - -Fixed a problem where an "unknown reserved name" warning could be -incorrectly generated for names like "_SB" when the trailing -underscore is not used in the original ASL. - -Fixed a problem where the reserved name check did not handle -NamePaths with multiple NameSegs correctly. The first nameseg of -the NamePath was examined instead of the last NameSeg. - - ----------------------------------------- - -02 October 2002. Summary of changes for this release. - - -1) ACPI CA Core Subsystem version 20021002: - -Fixed a problem where a store/copy of a string to an existing -string did not always set the string length properly in the String -object. - -Fixed a reported problem with the ToString operator where the -behavior was identical to the ToHexString operator instead of just -simply converting a raw buffer to a string data type. - -Fixed a problem where CopyObject and the other "explicit" -conversion operators were not updating the internal namespace node -type as part of the store operation. - -Fixed a memory leak during implicit source operand conversion -where the original object was not deleted if it was converted to a -new object of a different type. - -Enhanced error messages for all problems associated with namespace -lookups. Common procedure generates and prints the lookup name as -well as the formatted status. - -Completed implementation of a new design for the Alias support -within the namespace. The existing design did not handle the case -where a new object was assigned to one of the two names due to the -use of an explicit conversion operator, resulting in the two names -pointing to two different objects. The new design simply points -the Alias name to the original name node - not to the object. -This results in a level of indirection that must be handled in the -name resolution mechanism. - -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 - Non-Debug Version: 69.6K Code, 8.3K Data, 77.9K Total - Debug Version: 150.0K Code, 61.7K Data, 211.7K Total - Current Release: - Non-Debug Version: 70.7K Code, 8.6K Data, 79.3K Total - Debug Version: 151.7K Code, 62.4K Data, 214.1K Total - - -2) Linux - -Initialize thermal driver's timer before it is used. (Knut -Neumann) - -Allow handling negative celsius values. (Kochi Takayoshi) - -Fix thermal management and make trip points. R/W (Pavel Machek) - -Fix /proc/acpi/sleep. (P. Christeas) - -IA64 fixes. (David Mosberger) - -Fix reversed logic in blacklist code. (Sergio Monteiro Basto) - -Replace ACPI_DEBUG define with ACPI_DEBUG_OUTPUT. (Dominik -Brodowski) - - -3) iASL Compiler/Disassembler - -Clarified some warning/error messages. - - ----------------------------------------- -18 September 2002. Summary of changes for this release. - - -1) ACPI CA Core Subsystem version 20020918: - -Fixed a reported problem with reference chaining (via the Index() -and RefOf() operators) in the ObjectType() and SizeOf() operators. -The definition of these operators includes the dereferencing of -all chained references to return information on the base object. - -Fixed a problem with stores to indexed package elements - the -existing code would not complete the store if an "implicit -conversion" was not performed. In other words, if the existing -object (package element) was to be replaced completely, the code -didn't handle this case. - -Relaxed typechecking on the ASL "Scope" operator to allow the -target name to refer to an object of type Integer, String, or -Buffer, in addition to the scoping object types (Device, -predefined Scopes, Processor, PowerResource, and ThermalZone.) -This allows existing AML code that has workarounds for a bug in -Windows to function properly. A warning is issued, however. This -affects both the AML interpreter and the iASL compiler. Below is -an example of this type of ASL code: - - Name(DEB,0x00) - Scope(DEB) - { - -Fixed some reported problems with 64-bit integer support in the -local implementation of C library functions (clib.c) - - -2) Linux - -Use ACPI fix map region instead of IOAPIC region, since it is -undefined in non-SMP. - -Ensure that the SCI has the proper polarity and trigger, even on -systems that do not have an interrupt override entry in the MADT. - -2.5 big driver reorganization (Pat Mochel) - -Use early table mapping code from acpitable.c (Andi Kleen) - -New blacklist entries (Andi Kleen) - -Blacklist improvements. Split blacklist code out into a separate -file. Move checking the blacklist to very early. Previously, we -would use ACPI tables, and then halfway through init, check the -blacklist -- too late. Now, it's early enough to completely fall- -back to non-ACPI. - - -3) iASL Compiler/Disassembler version 20020918: - -Fixed a problem where the typechecking code didn't know that an -alias could point to a method. In other words, aliases were not -being dereferenced during typechecking. - - ----------------------------------------- -29 August 2002. Summary of changes for this release. - -1) ACPI CA Core Subsystem Version 20020829: - -If the target of a Scope() operator already exists, it must be an -object type that actually opens a scope -- such as a Device, -Method, Scope, etc. This is a fatal runtime error. Similar error -check has been added to the iASL compiler also. - -Tightened up the namespace load to disallow multiple names in the -same scope. This previously was allowed if both objects were of -the same type. (i.e., a lookup was the same as entering a new -name). - - -2) Linux - -Ensure that the ACPI interrupt has the proper trigger and -polarity. - -local_irq_disable is extraneous. (Matthew Wilcox) - -Make "acpi=off" actually do what it says, and not use the ACPI -interpreter *or* the tables. - -Added arch-neutral support for parsing SLIT and SRAT tables (Kochi -Takayoshi) - - -3) iASL Compiler/Disassembler Version 20020829: - -Implemented namepath optimization for name declarations. For -example, a declaration like "Method (\_SB_.ABCD)" would get -optimized to "Method (ABCD)" if the declaration is within the -\_SB_ scope. This optimization is in addition to the named -reference path optimization first released in the previous -version. This would seem to complete all possible optimizations -for namepaths within the ASL/AML. - -If the target of a Scope() operator already exists, it must be an -object type that actually opens a scope -- such as a Device, -Method, Scope, etc. - -Implemented a check and warning for unreachable code in the same -block below a Return() statement. - -Fixed a problem where the listing file was not generated if the -compiler aborted if the maximum error count was exceeded (200). - -Fixed a problem where the typechecking of method return values was -broken. This includes the check for a return value when the -method is invoked as a TermArg (a return value is expected.) - -Fixed a reported problem where EOF conditions during a quoted -string or comment caused a fault. - - ----------------------------------------- -15 August 2002. Summary of changes for this release. - -1) ACPI CA Core Subsystem Version 20020815: - -Fixed a reported problem where a Store to a method argument that -contains a reference did not perform the indirect store correctly. -This problem was created during the conversion to the new -reference object model - the indirect store to a method argument -code was not updated to reflect the new model. - -Reworked the ACPI mode change code to better conform to ACPI 2.0, -handle corner cases, and improve code legibility (Kochi Takayoshi) - -Fixed a problem with the pathname parsing for the carat (^) -prefix. The heavy use of the carat operator by the new namepath -optimization in the iASL compiler uncovered a problem with the AML -interpreter handling of this prefix. In the case where one or -more carats precede a single nameseg, the nameseg was treated as -standalone and the search rule (to root) was inadvertently -applied. This could cause both the iASL compiler and the -interpreter to find the wrong object or to miss the error that -should occur if the object does not exist at that exact pathname. - -Found and fixed the problem where the HP Pavilion DSDT would not -load. This was a relatively minor tweak to the table loading code -(a problem caused by the unexpected encounter with a method -invocation not within a control method), but it does not solve the -overall issue of the execution of AML code at the table level. -This investigation is still ongoing. - -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 - Non-Debug Version: 69.1K Code, 8.2K Data, 77.3K Total - Debug Version: 149.4K Code, 61.6K Data, 211.0K Total - Current Release: - Non-Debug Version: 69.6K Code, 8.3K Data, 77.9K Total - Debug Version: 150.0K Code, 61.7K Data, 211.7K Total - - -2) Linux - -Remove redundant slab.h include (Brad Hards) - -Fix several bugs in thermal.c (Herbert Nachtnebel) - -Make CONFIG_ACPI_BOOT work properly (Pavel Machek) - -Change acpi_system_suspend to use updated irq functions (Pavel -Machek) - -Export acpi_get_firmware_table (Matthew Wilcox) - -Use proper root proc entry for ACPI (Kochi Takayoshi) - -Fix early-boot table parsing (Bjorn Helgaas) - - -3) iASL Compiler/Disassembler - -Reworked the compiler options to make them more consistent and to -use two-letter options where appropriate. We were running out of -sensible letters. This may break some makefiles, so check the -current options list by invoking the compiler with no parameters. - -Completed the design and implementation of the ASL namepath -optimization option for the compiler. This option optimizes all -references to named objects to the shortest possible path. The -first attempt tries to utilize a single nameseg (4 characters) and -the "search-to-root" algorithm used by the interpreter. If that -cannot be used (because either the name is not in the search path -or there is a conflict with another object with the same name), -the pathname is optimized using the carat prefix (usually a -shorter string than specifying the entire path from the root.) - -Implemented support to obtain the DSDT from the Windows registry -(when the disassembly option is specified with no input file). -Added this code as the implementation for AcpiOsTableOverride in -the Windows OSL. Migrated the 16-bit code (used in the AcpiDump -utility) to scan memory for the DSDT to the AcpiOsTableOverride -function in the DOS OSL to make the disassembler truly OS -independent. - -Implemented a new option to disassemble and compile in one step. -When used without an input filename, this option will grab the -DSDT from the local machine, disassemble it, and compile it in one -step. - -Added a warning message for invalid escapes (a backslash followed -by any character other than the allowable escapes). This catches -the quoted string error "\_SB_" (which should be "\\_SB_" ). - -Also, there are numerous instances in the ACPI specification where -this error occurs. - -Added a compiler option to disable all optimizations. This is -basically the "compatibility mode" because by using this option, -the AML code will come out exactly the same as other ASL -compilers. - -Added error messages for incorrectly ordered dependent resource -functions. This includes: missing EndDependentFn macro at end of -dependent resource list, nested dependent function macros (both -start and end), and missing StartDependentFn macro. These are -common errors that should be caught at compile time. - -Implemented _OSI support for the disassembler and compiler. _OSI -must be included in the namespace for proper disassembly (because -the disassembler must know the number of arguments.) - -Added an "optimization" message type that is optional (off by -default). This message is used for all optimizations - including -constant folding, integer optimization, and namepath optimization. - ----------------------------------------- -25 July 2002. Summary of changes for this release. - - -1) ACPI CA Core Subsystem Version 20020725: - -The AML Disassembler has been enhanced to produce compilable ASL -code and has been integrated into the iASL compiler (see below) as -well as the single-step disassembly for the AML debugger and the -disassembler for the AcpiDump utility. All ACPI 2.0A opcodes, -resource templates and macros are fully supported. The -disassembler has been tested on over 30 different AML files, -producing identical AML when the resulting disassembled ASL file -is recompiled with the same ASL compiler. - -Modified the Resource Manager to allow zero interrupts and zero -dma channels during the GetCurrentResources call. This was -causing problems on some platforms. - -Added the AcpiOsRedirectOutput interface to the OSL to simplify -output redirection for the AcpiOsPrintf and AcpiOsVprintf -interfaces. - -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 - Non-Debug Version: 68.7K Code, 7.4K Data, 76.1K Total - Debug Version: 142.9K Code, 58.7K Data, 201.6K Total - Current Release: - Non-Debug Version: 69.1K Code, 8.2K Data, 77.3K Total - Debug Version: 149.4K Code, 61.6K Data, 211.0K Total - - -2) Linux - -Fixed a panic in the EC driver (Dominik Brodowski) - -Implemented checksum of the R/XSDT itself during Linux table scan -(Richard Schaal) - - -3) iASL compiler - -The AML disassembler is integrated into the compiler. The "-d" -option invokes the disassembler to completely disassemble an -input AML file, producing as output a text ASL file with the -extension ".dsl" (to avoid name collisions with existing .asl -source files.) A future enhancement will allow the disassembler -to obtain the BIOS DSDT from the registry under Windows. - -Fixed a problem with the VendorShort and VendorLong resource -descriptors where an invalid AML sequence was created. - -Implemented a fix for BufferData term in the ASL parser. It was -inadvertently defined twice, allowing invalid syntax to pass and -causing reduction conflicts. - -Fixed a problem where the Ones opcode could get converted to a -value of zero if "Ones" was used where a byte, word or dword value -was expected. The 64-bit value is now truncated to the correct -size with the correct value. - - - ----------------------------------------- -02 July 2002. Summary of changes for this release. - - -1) ACPI CA Core Subsystem Version 20020702: - -The Table Manager code has been restructured to add several new -features. Tables that are not required by the core subsystem -(other than the FADT, DSDT, FACS, PSDTs, etc.) are no longer -validated in any way and are returned from AcpiGetFirmwareTable if -requested. The AcpiOsTableOverride interface is now called for -each table that is loaded by the subsystem in order to allow the -host to override any table it chooses. Previously, only the DSDT -could be overridden. Added one new files, tbrsdt.c and -tbgetall.c. - -Fixed a problem with the conversion of internal package objects to -external objects (when a package is returned from a control -method.) The return buffer length was set to zero instead of the -proper length of the package object. - -Fixed a reported problem with the use of the RefOf and DeRefOf -operators when passing reference arguments to control methods. A -new type of Reference object is used internally for references -produced by the RefOf operator. - -Added additional error messages in the Resource Manager to explain -AE_BAD_DATA errors when they occur during resource parsing. - -Split the AcpiEnableSubsystem into two primitives to enable a -finer granularity initialization sequence. These two calls should -be called in this order: AcpiEnableSubsystem (flags), -AcpiInitializeObjects (flags). The flags parameter remains the -same. - - -2) Linux - -Updated the ACPI utilities module to understand the new style of -fully resolved package objects that are now returned from the core -subsystem. This eliminates errors of the form: - - ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PPB_._PRT] - acpi_utils-0430 [145] acpi_evaluate_reference: - Invalid element in package (not a device reference) - -The method evaluation utility uses the new buffer allocation -scheme instead of calling AcpiEvaluate Object twice. - -Added support for ECDT. This allows the use of the Embedded - -Controller before the namespace has been fully initialized, which -is necessary for ACPI 2.0 support, and for some laptops to -initialize properly. (Laptops using ECDT are still rare, so only -limited testing was performed of the added functionality.) - -Fixed memory leaks in the EC driver. - -Eliminated a brittle code structure in acpi_bus_init(). - -Eliminated the acpi_evaluate() helper function in utils.c. It is -no longer needed since acpi_evaluate_object can optionally -allocate memory for the return object. - -Implemented fix for keyboard hang when getting battery readings on -some systems (Stephen White) - -PCI IRQ routing update (Dominik Brodowski) - -Fix an ifdef to allow compilation on UP with LAPIC but no IOAPIC -support - ----------------------------------------- -11 June 2002. Summary of changes for this release. - - -1) ACPI CA Core Subsystem Version 20020611: - -Fixed a reported problem where constants such as Zero and One -appearing within _PRT packages were not handled correctly within -the resource manager code. Originally reported against the ASL -compiler because the code generator now optimizes integers to -their minimal AML representation (i.e. AML constants if possible.) -The _PRT code now handles all AML constant opcodes correctly -(Zero, One, Ones, Revision). - -Fixed a problem with the Concatenate operator in the AML -interpreter where a buffer result object was incorrectly marked as -not fully evaluated, causing a run-time error of AE_AML_INTERNAL. - -All package sub-objects are now fully resolved before they are -returned from the external ACPI interfaces. This means that name -strings are resolved to object handles, and constant operators -(Zero, One, Ones, Revision) are resolved to Integers. - -Implemented immediate resolution of the AML Constant opcodes -(Zero, One, Ones, Revision) to Integer objects upon detection -within the AML stream. This has simplified and reduced the -generated code size of the subsystem by eliminating about 10 -switch statements for these constants (which previously were -contained in Reference objects.) The complicating issues are that -the Zero opcode is used as a "placeholder" for unspecified -optional target operands and stores to constants are defined to be -no-ops. - -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 - Non-Debug Version: 69.3K Code, 7.4K Data, 76.7K Total - Debug Version: 143.8K Code, 58.8K Data, 202.6K Total - Current Release: - Non-Debug Version: 68.7K Code, 7.4K Data, 76.1K Total - Debug Version: 142.9K Code, 58.7K Data, 201.6K Total - - -2) Linux - - -Added preliminary support for obtaining _TRA data for PCI root -bridges (Bjorn Helgaas). - - -3) iASL Compiler Version X2046: - -Fixed a problem where the "_DDN" reserved name was defined to be a -control method with one argument. There are no arguments, and -_DDN does not have to be a control method. - -Fixed a problem with the Linux version of the compiler where the -source lines printed with error messages were the wrong lines. -This turned out to be the "LF versus CR/LF" difference between -Windows and Unix. This appears to be the longstanding issue -concerning listing output and error messages. - -Fixed a problem with the Linux version of compiler where opcode -names within error messages were wrong. This was caused by a -slight difference in the output of the Flex tool on Linux versus -Windows. - -Fixed a problem with the Linux compiler where the hex output files -contained some garbage data caused by an internal buffer overrun. - - ----------------------------------------- -17 May 2002. Summary of changes for this release. - - -1) ACPI CA Core Subsystem Version 20020517: - -Implemented a workaround to an BIOS bug discovered on the HP -OmniBook where the FADT revision number and the table size are -inconsistent (ACPI 2.0 revision vs. ACPI 1.0 table size). The new -behavior is to fallback to using only the ACPI 1.0 fields of the -FADT if the table is too small to be a ACPI 2.0 table as claimed -by the revision number. Although this is a BIOS bug, this is a -case where the workaround is simple enough and with no side -effects, so it seemed prudent to add it. A warning message is -issued, however. - -Implemented minimum size checks for the fixed-length ACPI tables - -- the FADT and FACS, as well as consistency checks between the -revision number and the table size. - -Fixed a reported problem in the table override support where the -new table pointer was incorrectly treated as a physical address -instead of a logical address. - -Eliminated the use of the AE_AML_ERROR exception and replaced it -with more descriptive codes. - -Fixed a problem where an exception would occur if an ASL Field was -defined with no named Field Units underneath it (used by some -index fields). - -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 - Non-Debug Version: 68.8K Code, 7.1K Data, 75.9K Total - Debug Version: 142.9K Code, 58.4K Data, 201.3K Total - Current Release: - Non-Debug Version: 69.3K Code, 7.4K Data, 76.7K Total - Debug Version: 143.8K Code, 58.8K Data, 202.6K Total - - - -2) Linux - -Much work done on ACPI init (MADT and PCI IRQ routing support). -(Paul D. and Dominik Brodowski) - -Fix PCI IRQ-related panic on boot (Sam Revitch) - -Set BM_ARB_DIS when entering a sleep state (Ducrot Bruno) - -Fix "MHz" typo (Dominik Brodowski) - -Fix RTC year 2000 issue (Dominik Brodowski) - -Preclude multiple button proc entries (Eric Brunet) - -Moved arch-specific code out of include/platform/aclinux.h - -3) iASL Compiler Version X2044: - -Implemented error checking for the string used in the EISAID macro -(Usually used in the definition of the _HID object.) The code now -strictly enforces the PnP format - exactly 7 characters, 3 -uppercase letters and 4 hex digits. - -If a raw string is used in the definition of the _HID object -(instead of the EISAID macro), the string must contain all -alphanumeric characters (e.g., "*PNP0011" is not allowed because -of the asterisk.) - -Implemented checking for invalid use of ACPI reserved names for -most of the name creation operators (Name, Device, Event, Mutex, -OperationRegion, PowerResource, Processor, and ThermalZone.) -Previously, this check was only performed for control methods. - -Implemented an additional check on the Name operator to emit an -error if a reserved name that must be implemented in ASL as a -control method is used. We know that a reserved name must be a -method if it is defined with input arguments. - -The warning emitted when a namespace object reference is not found -during the cross reference phase has been changed into an error. -The "External" directive should be used for names defined in other -modules. - - -4) Tools and Utilities - -The 16-bit tools (adump16 and aexec16) have been regenerated and -tested. - -Fixed a problem with the output of both acpidump and adump16 where -the indentation of closing parentheses and brackets was not - -aligned properly with the parent block. - - ----------------------------------------- -03 May 2002. Summary of changes for this release. - - -1) ACPI CA Core Subsystem Version 20020503: - -Added support a new OSL interface that allows the host operating - -system software to override the DSDT found in the firmware - -AcpiOsTableOverride. With this interface, the OSL can examine the -version of the firmware DSDT and replace it with a different one -if desired. - -Added new external interfaces for accessing ACPI registers from -device drivers and other system software - AcpiGetRegister and -AcpiSetRegister. This was simply an externalization of the -existing AcpiHwBitRegister interfaces. - -Fixed a regression introduced in the previous build where the -ASL/AML CreateField operator always returned an error, -"destination must be a NS Node". - -Extended the maximum time (before failure) to successfully enable -ACPI mode to 3 seconds. - -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 - Non-Debug Version: 68.5K Code, 7.0K Data, 75.5K Total - Debug Version: 142.4K Code, 58.3K Data, 200.7K Total - Current Release: - Non-Debug Version: 68.8K Code, 7.1K Data, 75.9K Total - Debug Version: 142.9K Code, 58.4K Data, 201.3K Total - - -2) Linux - -Enhanced ACPI init code for SMP. We are now fully MPS and $PIR- -free. While 3 out of 4 of our in-house systems work fine, the last -one still hangs when testing the LAPIC timer. - -Renamed many files in 2.5 kernel release to omit "acpi_" from the -name. - -Added warning on boot for Presario 711FR. - -Sleep improvements (Pavel Machek) - -ACPI can now be built without CONFIG_PCI enabled. - -IA64: Fixed memory map functions (JI Lee) - - -3) iASL Compiler Version X2043: - -Added support to allow the compiler to be integrated into the MS -VC++ development environment for one-button compilation of single -files or entire projects -- with error-to-source-line mapping. - -Implemented support for compile-time constant folding for the -Type3, Type4, and Type5 opcodes first defined in the ACPI 2.0 -specification. This allows the ASL writer to use expressions -instead of Integer/Buffer/String constants in terms that must -evaluate to constants at compile time and will also simplify the -emitted AML in any such sub-expressions that can be folded -(evaluated at compile-time.) This increases the size of the -compiler significantly because a portion of the ACPI CA AML -interpreter is included within the compiler in order to pre- -evaluate constant expressions. - - -Fixed a problem with the "Unicode" ASL macro that caused the -compiler to fault. (This macro is used in conjunction with the -_STR reserved name.) - -Implemented an AML opcode optimization to use the Zero, One, and -Ones opcodes where possible to further reduce the size of integer -constants and thus reduce the overall size of the generated AML -code. - -Implemented error checking for new reserved terms for ACPI version -2.0A. - -Implemented the -qr option to display the current list of ACPI -reserved names known to the compiler. - -Implemented the -qc option to display the current list of ASL -operators that are allowed within constant expressions and can -therefore be folded at compile time if the operands are constants. - - -4) Documentation - -Updated the Programmer's Reference for new interfaces, data types, -and memory allocation model options. - -Updated the iASL Compiler User Reference to apply new format and -add information about new features and options. - ----------------------------------------- -19 April 2002. Summary of changes for this release. - -1) ACPI CA Core Subsystem Version 20020419: - -The source code base for the Core Subsystem has been completely -cleaned with PC-lint (FlexLint) for both 32-bit and 64-bit -versions. The Lint option files used are included in the -/acpi/generate/lint directory. - -Implemented enhanced status/error checking across the entire -Hardware manager subsystem. Any hardware errors (reported from -the OSL) are now bubbled up and will abort a running control -method. - - -Fixed a problem where the per-ACPI-table integer width (32 or 64) -was stored only with control method nodes, causing a fault when -non-control method code was executed during table loading. The -solution implemented uses a global variable to indicate table -width across the entire ACPI subsystem. Therefore, ACPI CA does -not support mixed integer widths across different ACPI tables -(DSDT, SSDT). - -Fixed a problem where NULL extended fields (X fields) in an ACPI -2.0 ACPI FADT caused the table load to fail. Although the -existing ACPI specification is a bit fuzzy on this topic, the new -behavior is to fall back on a ACPI 1.0 field if the corresponding -ACPI 2.0 X field is zero (even though the table revision indicates -a full ACPI 2.0 table.) The ACPI specification will be updated to -clarify this issue. - -Fixed a problem with the SystemMemory operation region handler -where memory was always accessed byte-wise even if the AML- -specified access width was larger than a byte. This caused -problems on systems with memory-mapped I/O. Memory is now -accessed with the width specified. On systems that do not support -non-aligned transfers, a check is made to guarantee proper address -alignment before proceeding in order to avoid an AML-caused -alignment fault within the kernel. - - -Fixed a problem with the ExtendedIrq resource where only one byte -of the 4-byte Irq field was extracted. - -Fixed the AcpiExDigitsNeeded() procedure to support _UID. This -function was out of date and required a rewrite. - -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 - Non-Debug Version: 66.6K Code, 6.5K Data, 73.1K Total - Debug Version: 139.8K Code, 57.4K Data, 197.2K Total - Current Release: - Non-Debug Version: 68.5K Code, 7.0K Data, 75.5K Total - Debug Version: 142.4K Code, 58.3K Data, 200.7K Total - - -2) Linux - -PCI IRQ routing fixes (Dominik Brodowski) - - -3) iASL Compiler Version X2042: - -Implemented an additional compile-time error check for a field -unit whose size + minimum access width would cause a run-time -access beyond the end-of-region. Previously, only the field size -itself was checked. - -The Core subsystem and iASL compiler now share a common parse -object in preparation for compile-time evaluation of the type -3/4/5 ASL operators. - - ----------------------------------------- -Summary of changes for this release: 03_29_02 - -1) ACPI CA Core Subsystem Version 20020329: - -Implemented support for late evaluation of TermArg operands to -Buffer and Package objects. This allows complex expressions to be -used in the declarations of these object types. - -Fixed an ACPI 1.0 compatibility issue when reading Fields. In ACPI -1.0, if the field was larger than 32 bits, it was returned as a -buffer - otherwise it was returned as an integer. In ACPI 2.0, -the field is returned as a buffer only if the field is larger than -64 bits. The TableRevision is now considered when making this -conversion to avoid incompatibility with existing ASL code. - -Implemented logical addressing for AcpiOsGetRootPointer. This -allows an RSDP with either a logical or physical address. With -this support, the host OS can now override all ACPI tables with -one logical RSDP. Includes implementation of "typed" pointer -support to allow a common data type for both physical and logical -pointers internally. This required a change to the -AcpiOsGetRootPointer interface. - -Implemented the use of ACPI 2.0 Generic Address Structures for all -GPE, Fixed Event, and PM Timer I/O. This allows the use of memory -mapped I/O for these ACPI features. - -Initialization now ignores not only non-required tables (All -tables other than the FADT, FACS, DSDT, and SSDTs), but also does -not validate the table headers of unrecognized tables. - -Fixed a problem where a notify handler could only be -installed/removed on an object of type Device. All "notify" - -objects are now supported -- Devices, Processor, Power, and -Thermal. - -Removed most verbosity from the ACPI_DB_INFO debug level. Only -critical information is returned when this debug level is enabled. - -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 - Non-Debug Version: 65.4K Code, 6.2K Data, 71.6K Total - Debug Version: 138.0K Code, 56.6K Data, 194.6K Total - Current Release: - Non-Debug Version: 66.6K Code, 6.5K Data, 73.1K Total - Debug Version: 139.8K Code, 57.4K Data, 197.2K Total - - -2) Linux: - -The processor driver (acpi_processor.c) now fully supports ACPI -2.0-based processor performance control (e.g. Intel(R) -SpeedStep(TM) technology) Note that older laptops that only have -the Intel "applet" interface are not supported through this. The -'limit' and 'performance' interface (/proc) are fully functional. -[Note that basic policy for controlling performance state -transitions will be included in the next version of ospmd.] The -idle handler was modified to more aggressively use C2, and PIIX4 -errata handling underwent a complete overhaul (big thanks to -Dominik Brodowski). - -Added support for ACPI-PCI device binding (acpi_pci_root.c). _ADR- -based devices in the ACPI namespace are now dynamically bound -(associated) with their PCI counterparts (e.g. PCI1->01:00.0). -This allows, among other things, ACPI to resolve bus numbers for -subordinate PCI bridges. - -Enhanced PCI IRQ routing to get the proper bus number for _PRT -entries defined underneath PCI bridges. - -Added IBM 600E to bad bios list due to invalid _ADR value for -PIIX4 PCI-ISA bridge, resulting in improper PCI IRQ routing. - -In the process of adding full MADT support (e.g. IOAPIC) for IA32 -(acpi.c, mpparse.c) -- stay tuned. - -Added back visual differentiation between fixed-feature and -control-method buttons in dmesg. Buttons are also subtyped (e.g. -button/power/PWRF) to simplify button identification. - -We no longer use -Wno-unused when compiling debug. Please ignore -any "_THIS_MODULE defined but not used" messages. - -Can now shut down the system using "magic sysrq" key. - - -3) iASL Compiler version 2041: - -Fixed a problem where conversion errors for hex/octal/decimal -constants were not reported. - -Implemented a fix for the General Register template Address field. -This field was 8 bits when it should be 64. - -Fixed a problem where errors/warnings were no longer being emitted -within the listing output file. - -Implemented the ACPI 2.0A restriction on ACPI Table Signatures to -exactly 4 characters, alphanumeric only. - - - - ----------------------------------------- -Summary of changes for this release: 03_08_02 - - -1) ACPI CA Core Subsystem Version 20020308: - -Fixed a problem with AML Fields where the use of the "AccessAny" -keyword could cause an interpreter error due to attempting to read -or write beyond the end of the parent Operation Region. - -Fixed a problem in the SystemMemory Operation Region handler where -an attempt was made to map memory beyond the end of the region. -This was the root cause of the "AE_ERROR" and "AE_NO_MEMORY" -errors on some Linux systems. - -Fixed a problem where the interpreter/namespace "search to root" -algorithm was not functioning for some object types. Relaxed the -internal restriction on the search to allow upsearches for all -external object types as well as most internal types. - - -2) Linux: - -We now use safe_halt() macro versus individual calls to sti | hlt. - -Writing to the processor limit interface should now work. "echo 1" -will increase the limit, 2 will decrease, and 0 will reset to the - -default. - - -3) ASL compiler: - -Fixed segfault on Linux version. - - ----------------------------------------- -Summary of changes for this release: 02_25_02 - -1) ACPI CA Core Subsystem: - - -Fixed a problem where the GPE bit masks were not initialized -properly, causing erratic GPE behavior. - -Implemented limited support for multiple calling conventions. The -code can be generated with either the VPL (variable parameter -list, or "C") convention, or the FPL (fixed parameter list, or -"Pascal") convention. The core subsystem is about 3.4% smaller -when generated with FPL. - - -2) Linux - -Re-add some /proc/acpi/event functionality that was lost during -the rewrite - -Resolved issue with /proc events for fixed-feature buttons showing -up as the system device. - -Fixed checks on C2/C3 latencies to be inclusive of maximum values. - -Replaced AE_ERRORs in acpi_osl.c with more specific error codes. - -Changed ACPI PRT option from "pci=noacpi-routing" to "pci=noacpi" - -Fixed limit interface & usage to fix bugs with passive cooling -hysterisis. - -Restructured PRT support. - - ----------------------------------------- -Summary of changes for this label: 02_14_02 - - -1) ACPI CA Core Subsystem: - -Implemented support in AcpiLoadTable to allow loading of FACS and -FADT tables. - -Suport for the now-obsolete interim 0.71 64-bit ACPI tables has -been removed. All 64-bit platforms should be migrated to the ACPI -2.0 tables. The actbl71.h header has been removed from the source -tree. - -All C macros defined within the subsystem have been prefixed with -"ACPI_" to avoid collision with other system include files. - -Removed the return value for the two AcpiOsPrint interfaces, since -it is never used and causes lint warnings for ignoring the return -value. - -Added error checking to all internal mutex acquire and release -calls. Although a failure from one of these interfaces is -probably a fatal system error, these checks will cause the -immediate abort of the currently executing method or interface. - -Fixed a problem where the AcpiSetCurrentResources interface could -fault. This was a side effect of the deployment of the new memory -allocation model. - -Fixed a couple of problems with the Global Lock support introduced -in the last major build. The "common" (1.0/2.0) internal FACS was -being overwritten with the FACS signature and clobbering the -Global Lock pointer. Also, the actual firmware FACS was being -unmapped after construction of the "common" FACS, preventing -access to the actual Global Lock field within it. The "common" -internal FACS is no longer installed as an actual ACPI table; it -is used simply as a global. - -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 (02_07_01) - Non-Debug Version: 65.2K Code, 6.2K Data, 71.4K Total - Debug Version: 136.9K Code, 56.4K Data, 193.3K Total - Current Release: - Non-Debug Version: 65.4K Code, 6.2K Data, 71.6K Total - Debug Version: 138.0K Code, 56.6K Data, 194.6K Total - - -2) Linux - -Updated Linux-specific code for core macro and OSL interface -changes described above. - -Improved /proc/acpi/event. It now can be opened only once and has -proper poll functionality. - -Fixed and restructured power management (acpi_bus). - -Only create /proc "view by type" when devices of that class exist. - -Fixed "charging/discharging" bug (and others) in acpi_battery. - -Improved thermal zone code. - - -3) ASL Compiler, version X2039: - - -Implemented the new compiler restriction on ASL String hex/octal -escapes to non-null, ASCII values. An error results if an invalid -value is used. (This will require an ACPI 2.0 specification -change.) - -AML object labels that are output to the optional C and ASM source -are now prefixed with both the ACPI table signature and table ID -to help guarantee uniqueness within a large BIOS project. - - ----------------------------------------- -Summary of changes for this label: 02_01_02 - -1) 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 - -2) Linux - - 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) - -Supports ACPI PCI IRQ routing (PCI Link and PCI root drivers) - -IA32 - IA64 initialization unification, no longer experimental - -Menuconfig options redesigned - -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. - - - - ----------------------------------------- -Summary of changes for this label: 12_18_01 - -1) Linux - -Enhanced blacklist with reason and severity fields. Any table's -signature may now be used to identify a blacklisted system. - -Call _PIC control method to inform the firmware which interrupt -model the OS is using. Turn on any disabled link devices. - -Cleaned up busmgr /proc error handling (Andreas Dilger) - - 2) ACPI CA Core Subsystem: - -Implemented ACPI 2.0 semantics for the "Break" operator (Exit from -while loop) - -Completed implementation of the ACPI 2.0 "Continue", -"ConcatenateResTemplate", "DataTableRegion", and "LoadTable" -operators. All new ACPI 2.0 operators are now implemented in both -the ASL compiler and the AML interpreter. The only remaining ACPI -2.0 task is support for the String data type in the DerefOf -operator. Fixed a problem with AcquireMutex where the status code -was lost if the caller had to actually wait for the mutex. - -Increased the maximum ASL Field size from 64K bits to 4G bits. - -Completed implementation of the external Global Lock interfaces -- -AcpiAcquireGlobalLock and AcpiReleaseGlobalLock. The Timeout and -Handler parameters were added. - -Completed another pass at removing warnings and issues when -compiling with 64-bit compilers. The code now compiles cleanly -with the Intel 64-bit C/C++ compiler. Most notably, the pointer -add and subtract (diff) macros have changed considerably. - - -Created and deployed a new ACPI_SIZE type that is 64-bits wide on -64-bit platforms, 32-bits on all others. This type is used -wherever memory allocation and/or the C sizeof() operator is used, -and affects the OSL memory allocation interfaces AcpiOsAllocate -and AcpiOsCallocate. - -Implemented sticky user breakpoints in the AML debugger. - -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_05_01) - Non-Debug Version: 64.7K Code, 5.3K Data, 70.0K Total - Debug Version: 136.2K Code, 55.6K Data, 191.8K Total - Current Release: - Non-Debug Version: 66.1K Code, 5.5K Data, 71.6K Total - Debug Version: 138.3K Code, 55.9K Data, 194.2K Total - - 3) ASL Compiler, version X2034: - -Now checks for (and generates an error if detected) the use of a -Break or Continue statement without an enclosing While statement. - - -Successfully generated the compiler with the Intel 64-bit C -compiler. - - ---------------------------------------- -Summary of changes for this label: 12_05_01 - - 1) ACPI CA Core Subsystem: - -The ACPI 2.0 CopyObject operator is fully implemented. This -operator creates a new copy of an object (and is also used to -bypass the "implicit conversion" mechanism of the Store operator.) - -The ACPI 2.0 semantics for the SizeOf operator are fully -implemented. The change is that performing a SizeOf on a -reference object causes an automatic dereference of the object to -tha actual value before the size is evaluated. This behavior was -undefined in ACPI 1.0. - -The ACPI 2.0 semantics for the Extended IRQ resource descriptor -have been implemented. The interrupt polarity and mode are now -independently set. - -Fixed a problem where ASL Constants (Zero, One, Ones, Revision) -appearing in Package objects were not properly converted to -integers when the internal Package was converted to an external -object (via the AcpiEvaluateObject interface.) - -Fixed a problem with the namespace object deletion mechanism for -objects created by control methods. There were two parts to this -problem: 1) Objects created during the initialization phase method -parse were not being deleted, and 2) The object owner ID mechanism -to track objects was broken. - -Fixed a problem where the use of the ASL Scope operator within a -control method would result in an invalid opcode exception. - -Fixed a problem introduced in the previous label where the buffer -length required for the _PRT structure was not being returned -correctly. - -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 (11_20_01) - Non-Debug Version: 64.1K Code, 5.3K Data, 69.4K Total - Debug Version: 135.1K Code, 55.4K Data, 190.5K Total - - Current Release: - Non-Debug Version: 64.7K Code, 5.3K Data, 70.0K Total - Debug Version: 136.2K Code, 55.6K Data, 191.8K Total - - 2) Linux: - -Updated all files to apply cleanly against 2.4.16. - -Added basic PCI Interrupt Routing Table (PRT) support for IA32 -(acpi_pci.c), and unified the PRT code for IA32 and IA64. This -version supports both static and dyanmic PRT entries, but dynamic -entries are treated as if they were static (not yet -reconfigurable). Architecture- specific code to use this data is -absent on IA32 but should be available shortly. - -Changed the initialization sequence to start the ACPI interpreter -(acpi_init) prior to initialization of the PCI driver (pci_init) -in init/main.c. This ordering is required to support PRT and -facilitate other (future) enhancement. A side effect is that the -ACPI bus driver and certain device drivers can no longer be loaded -as modules. - -Modified the 'make menuconfig' options to allow PCI Interrupt -Routing support to be included without the ACPI Bus and other -device drivers. - - 3) ASL Compiler, version X2033: - -Fixed some issues with the use of the new CopyObject and -DataTableRegion operators. Both are fully functional. - - ---------------------------------------- -Summary of changes for this label: 11_20_01 - - 20 November 2001. Summary of changes for this release. - - 1) ACPI CA Core Subsystem: - -Updated Index support to match ACPI 2.0 semantics. Storing a -Integer, String, or Buffer to an Index of a Buffer will store only -the least-significant byte of the source to the Indexed buffer -byte. Multiple writes are not performed. - -Fixed a problem where the access type used in an AccessAs ASL -operator was not recorded correctly into the field object. - -Fixed a problem where ASL Event objects were created in a -signalled state. Events are now created in an unsignalled state. - -The internal object cache is now purged after table loading and -initialization to reduce the use of dynamic kernel memory -- on -the assumption that object use is greatest during the parse phase -of the entire table (versus the run-time use of individual control -methods.) - -ACPI 2.0 variable-length packages are now fully operational. - -Code and Data Size: Code and Data optimizations have permitted new -feature development with an actual reduction in the library 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 (11_09_01): - Non-Debug Version: 63.7K Code, 5.2K Data, 68.9K Total - Debug Version: 134.5K Code, 55.4K Data, 189.9K Total - - Current Release: - Non-Debug Version: 64.1K Code, 5.3K Data, 69.4K Total - Debug Version: 135.1K Code, 55.4K Data, 190.5K Total - - 2) Linux: - -Enhanced the ACPI boot-time initialization code to allow the use -of Local APIC tables for processor enumeration on IA-32, and to -pave the way for a fully MPS-free boot (on SMP systems) in the -near future. This functionality replaces -arch/i386/kernel/acpitables.c, which was introduced in an earlier -2.4.15-preX release. To enable this feature you must add -"acpi_boot=on" to the kernel command line -- see the help entry -for CONFIG_ACPI_BOOT for more information. An IA-64 release is in -the works... - -Restructured the configuration options to allow boot-time table -parsing support without inclusion of the ACPI Interpreter (and -other) code. - -NOTE: This release does not include fixes for the reported events, -power-down, and thermal passive cooling issues (coming soon). - - 3) ASL Compiler: - -Added additional typechecking for Fields within restricted access -Operation Regions. All fields within EC and CMOS regions must be -declared with ByteAcc. All fields withing SMBus regions must be -declared with the BufferAcc access type. - -Fixed a problem where the listing file output of control methods -no longer interleaved the actual AML code with the ASL source -code. - - - - ----------------------------------------- -Summary of changes for this label: 11_09_01 - -1) ACPI CA Core Subsystem: - -Implemented ACPI 2.0-defined support for writes to fields with a -Buffer, String, or Integer source operand that is smaller than the -target field. In these cases, the source operand is zero-extended -to fill the target field. - -Fixed a problem where a Field starting bit offset (within the -parent operation region) was calculated incorrectly if the - -alignment of the field differed from the access width. This -affected CreateWordField, CreateDwordField, CreateQwordField, and -possibly other fields that use the "AccessAny" keyword. - -Fixed a problem introduced in the 11_02_01 release where indirect -stores through method arguments did not operate correctly. - -2) Linux: - -Implemented boot-time ACPI table parsing support -(CONFIG_ACPI_BOOT) for IA32 and IA64 UP/SMP systems. This code -facilitates the use of ACPI tables (e.g. MADT, SRAT) rather than -legacy BIOS interfaces (e.g. MPS) for the configuration of system -processors, memory, and interrupts during setup_arch(). Note that -this patch does not include the required architecture-specific -changes required to apply this information -- subsequent patches -will be posted for both IA32 and IA64 to achieve this. - -Added low-level sleep support for IA32 platforms, courtesy of Pat -Mochel. This allows IA32 systems to transition to/from various -sleeping states (e.g. S1, S3), although the lack of a centralized -driver model and power-manageable drivers will prevent its -(successful) use on most systems. - -Revamped the ACPI 'menuconfig' layout: created new "ACPI Support" -submenu, unified IA32 and IA64 options, added new "Boot using ACPI -tables" option, etc. - -Increased the default timeout for the EC driver from 1ms to 10ms -(1000 cycles of 10us) to try to address AE_TIME errors during EC -transactions. - - ---------------------------------------- -Summary of changes for this label: 11_02_01 - -1) ACPI CA Core Subsystem: - -ACPI 2.0 Support: Implemented ACPI 2.0 64-bit Field access -(QWordAcc keyword). All ACPI 2.0 64-bit support is now -implemented. - -OSL Interfaces: Several of the OSL (AcpiOs*) interfaces required -changes to support ACPI 2.0 Qword field access. Read/Write -PciConfiguration(), Read/Write Memory(), and Read/Write Port() now -accept an ACPI_INTEGER (64 bits) as the value parameter. Also, -the value parameter for the address space handler interface is now -an ACPI_INTEGER. OSL implementations of these interfaces must now -handle the case where the Width parameter is 64. - -Index Fields: Fixed a problem where unaligned bit assembly and -disassembly for IndexFields was not supported correctly. - -Index and Bank Fields: Nested Index and Bank Fields are now -supported. During field access, a check is performed to ensure -that the value written to an Index or Bank register is not out of -the range of the register. The Index (or Bank) register is -written before each access to the field data. Future support will -include allowing individual IndexFields to be wider than the -DataRegister width. - -Fields: Fixed a problem where the AML interpreter was incorrectly -attempting to write beyond the end of a Field/OpRegion. This was -a boundary case that occurred when a DWORD field was written to a -BYTE access OpRegion, forcing multiple writes and causing the -interpreter to write one datum too many. - -Fields: Fixed a problem with Field/OpRegion access where the -starting bit address of a field was incorrectly calculated if the -current access type was wider than a byte (WordAcc, DwordAcc, or -QwordAcc). - -Fields: Fixed a problem where forward references to individual -FieldUnits (individual Field names within a Field definition) were -not resolved during the AML table load. - -Fields: Fixed a problem where forward references from a Field -definition to the parent Operation Region definition were not -resolved during the AML table load. - -Fields: Duplicate FieldUnit names within a scope are now detected -during AML table load. - -Acpi Interfaces: Fixed a problem where the AcpiGetName() interface -returned an incorrect name for the root node. - -Code and Data Size: Code and Data optimizations have permitted new -feature development with an actual reduction in the library 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 (10_18_01): - Non-Debug Version: 63.9K Code, 5.1K Data, 69.0K Total - Debug Version: 136.7K Code, 57.4K Data, 194.2K Total - - Current Release: - Non-Debug Version: 63.7K Code, 5.2K Data, 68.9K Total - Debug Version: 134.5K Code, 55.4K Data, 189.9K Total - - 2) Linux: - -Improved /proc processor output (Pavel Machek) Re-added -MODULE_LICENSE("GPL") to all modules. - - 3) ASL Compiler version X2030: - -Duplicate FieldUnit names within a scope are now detected and -flagged as errors. - - 4) Documentation: - -Programmer Reference updated to reflect OSL and address space -handler interface changes described above. - ----------------------------------------- -Summary of changes for this label: 10_18_01 - -ACPI CA Core Subsystem: - -Fixed a problem with the internal object reference count mechanism -that occasionally caused premature object deletion. This resolves -all of the outstanding problem reports where an object is deleted -in the middle of an interpreter evaluation. Although this problem -only showed up in rather obscure cases, the solution to the -problem involved an adjustment of all reference counts involving -objects attached to namespace nodes. - -Fixed a problem with Field support in the interpreter where -writing to an aligned field whose length is an exact multiple (2 -or greater) of the field access granularity would cause an attempt -to write beyond the end of the field. - -The top level AML opcode execution functions within the -interpreter have been renamed with a more meaningful and -consistent naming convention. The modules exmonad.c and -exdyadic.c were eliminated. New modules are exoparg1.c, -exoparg2.c, exoparg3.c, and exoparg6.c. - -Support for the ACPI 2.0 "Mid" ASL operator has been implemented. - -Fixed a problem where the AML debugger was causing some internal -objects to not be deleted during subsystem termination. - -Fixed a problem with the external AcpiEvaluateObject interface -where the subsystem would fault if the named object to be -evaluated refered to a constant such as Zero, Ones, etc. - -Fixed a problem with IndexFields and BankFields where the -subsystem would fault if the index, data, or bank registers were -not defined in the same scope as the field itself. - -Added printf format string checking for compilers that support -this feature. Corrected more than 50 instances of issues with -format specifiers within invocations of ACPI_DEBUG_PRINT -throughout the core subsystem code. - -The ASL "Revision" operator now returns the ACPI support level -implemented in the core - the value "2" since the ACPI 2.0 support -is more than 50% implemented. - -Enhanced the output of the AML debugger "dump namespace" command -to output in a more human-readable form. - -Current core subsystem library code 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 full debug trace mechanism -- leading to a much - -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 Label (09_20_01): - Non-Debug Version: 65K Code, 5K Data, 70K Total - Debug Version: 138K Code, 58K Data, 196K Total - - This Label: - - Non-Debug Version: 63.9K Code, 5.1K Data, 69.0K Total - Debug Version: 136.7K Code, 57.4K Data, 194.2K Total - -Linux: - -Implemented a "Bad BIOS Blacklist" to track machines that have -known ASL/AML problems. - -Enhanced the /proc interface for the thermal zone driver and added -support for _HOT (the critical suspend trip point). The 'info' -file now includes threshold/policy information, and allows setting -of _SCP (cooling preference) and _TZP (polling frequency) values -to the 'info' file. Examples: "echo tzp=5 > info" sets the polling -frequency to 5 seconds, and "echo scp=1 > info" sets the cooling -preference to the passive/quiet mode (if supported by the ASL). - -Implemented a workaround for a gcc bug that resuted in an OOPs -when loading the control method battery driver. - - ---------------------------------------- -Summary of changes for this label: 09_20_01 - - ACPI CA Core Subsystem: - -The AcpiEnableEvent and AcpiDisableEvent interfaces have been -modified to allow individual GPE levels to be flagged as wake- -enabled (i.e., these GPEs are to remain enabled when the platform -sleeps.) - -The AcpiEnterSleepState and AcpiLeaveSleepState interfaces now -support wake-enabled GPEs. This means that upon entering the -sleep state, all GPEs that are not wake-enabled are disabled. -When leaving the sleep state, these GPEs are reenabled. - -A local double-precision divide/modulo module has been added to -enhance portability to OS kernels where a 64-bit math library is -not available. The new module is "utmath.c". - -Several optimizations have been made to reduce the use of CPU -stack. Originally over 2K, the maximum stack usage is now below -2K at 1860 bytes (1.82k) - -Fixed a problem with the AcpiGetFirmwareTable interface where the -root table pointer was not mapped into a logical address properly. - -Fixed a problem where a NULL pointer was being dereferenced in the -interpreter code for the ASL Notify operator. - -Fixed a problem where the use of the ASL Revision operator -returned an error. This operator now returns the current version -of the ACPI CA core subsystem. - -Fixed a problem where objects passed as control method parameters -to AcpiEvaluateObject were always deleted at method termination. -However, these objects may end up being stored into the namespace -by the called method. The object reference count mechanism was -applied to these objects instead of a force delete. - -Fixed a problem where static strings or buffers (contained in the -AML code) that are declared as package elements within the ASL -code could cause a fault because the interpreter would attempt to -delete them. These objects are now marked with the "static -object" flag to prevent any attempt to delete them. - -Implemented an interpreter optimization to use operands directly -from the state object instead of extracting the operands to local -variables. This reduces stack use and code size, and improves -performance. - -The module exxface.c was eliminated as it was an unnecessary extra -layer of code. - -Current core subsystem library code 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 full debug trace mechanism -- leading to a much -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. - - Non-Debug Version: 65K Code, 5K Data, 70K Total -(Previously 69K) Debug Version: 138K Code, 58K Data, 196K -Total (Previously 195K) - -Linux: - -Support for ACPI 2.0 64-bit integers has been added. All ACPI -Integer objects are now 64 bits wide - -All Acpi data types and structures are now in lower case. Only -Acpi macros are upper case for differentiation. - - Documentation: - -Changes to the external interfaces as described above. - - ---------------------------------------- -Summary of changes for this label: 08_31_01 - - ACPI CA Core Subsystem: - -A bug with interpreter implementation of the ASL Divide operator -was found and fixed. The implicit function return value (not the -explicit store operands) was returning the remainder instead of -the quotient. This was a longstanding bug and it fixes several -known outstanding issues on various platforms. - -The ACPI_DEBUG_PRINT and function trace entry/exit macros have -been further optimized for size. There are 700 invocations of the -DEBUG_PRINT macro alone, so each optimization reduces the size of -the debug version of the subsystem significantly. - -A stack trace mechanism has been implemented. The maximum stack -usage is about 2K on 32-bit platforms. The debugger command "stat -stack" will display the current maximum stack usage. - -All public symbols and global variables within the subsystem are -now prefixed with the string "Acpi". This keeps all of the -symbols grouped together in a kernel map, and avoids conflicts -with other kernel subsystems. - -Most of the internal fixed lookup tables have been moved into the -code segment via the const operator. - -Several enhancements have been made to the interpreter to both -reduce the code size and improve performance. - -Current core subsystem library code 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 full debug trace mechanism which contains over 700 -invocations of the DEBUG_PRINT macro, 500 function entry macro -invocations, and over 900 function exit macro invocations -- -leading to a much 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. - - Non-Debug Version: 64K Code, 5K Data, 69K Total -Debug Version: 137K Code, 58K Data, 195K Total - - Linux: - -Implemented wbinvd() macro, pending a kernel-wide definition. - -Fixed /proc/acpi/event to handle poll() and short reads. - - ASL Compiler, version X2026: - -Fixed a problem introduced in the previous label where the AML - -code emitted for package objects produced packages with zero -length. - - ---------------------------------------- -Summary of changes for this label: 08_16_01 - -ACPI CA Core Subsystem: - -The following ACPI 2.0 ASL operators have been implemented in the -AML interpreter (These are already supported by the Intel ASL -compiler): ToDecimalString, ToHexString, ToString, ToInteger, and -ToBuffer. Support for 64-bit AML constants is implemented in the -AML parser, debugger, and disassembler. - -The internal memory tracking mechanism (leak detection code) has -been upgraded to reduce the memory overhead (a separate tracking -block is no longer allocated for each memory allocation), and now -supports all of the internal object caches. - -The data structures and code for the internal object caches have -been coelesced and optimized so that there is a single cache and -memory list data structure and a single group of functions that -implement generic cache management. This has reduced the code -size in both the debug and release versions of the subsystem. - -The DEBUG_PRINT macro(s) have been optimized for size and replaced -by ACPI_DEBUG_PRINT. The syntax for this macro is slightly -different, because it generates a single call to an internal -function. This results in a savings of about 90 bytes per -invocation, resulting in an overall code and data savings of about -16% in the debug version of the subsystem. - - Linux: - -Fixed C3 disk corruption problems and re-enabled C3 on supporting -machines. - -Integrated low-level sleep code by Patrick Mochel. - -Further tweaked source code Linuxization. - -Other minor fixes. - - ASL Compiler: - -Support for ACPI 2.0 variable length packages is fixed/completed. - -Fixed a problem where the optional length parameter for the ACPI -2.0 ToString operator. - -Fixed multiple extraneous error messages when a syntax error is -detected within the declaration line of a control method. - - ---------------------------------------- -Summary of changes for this label: 07_17_01 - -ACPI CA Core Subsystem: - -Added a new interface named AcpiGetFirmwareTable to obtain any -ACPI table via the ACPI signature. The interface can be called at -any time during kernel initialization, even before the kernel -virtual memory manager is initialized and paging is enabled. This -allows kernel subsystems to obtain ACPI tables very early, even -before the ACPI CA subsystem is initialized. - -Fixed a problem where Fields defined with the AnyAcc attribute -could be resolved to the incorrect address under the following -conditions: 1) the field width is larger than 8 bits and 2) the -parent operation region is not defined on a DWORD boundary. - -Fixed a problem where the interpreter is not being locked during -namespace initialization (during execution of the _INI control -methods), causing an error when an attempt is made to release it -later. - -ACPI 2.0 support in the AML Interpreter has begun and will be -ongoing throughout the rest of this year. In this label, The Mod -operator is implemented. - -Added a new data type to contain full PCI addresses named -ACPI_PCI_ID. This structure contains the PCI Segment, Bus, Device, -and Function values. - - Linux: - -Enhanced the Linux version of the source code to change most -capitalized ACPI type names to lowercase. For example, all -instances of ACPI_STATUS are changed to acpi_status. This will -result in a large diff, but the change is strictly cosmetic and -aligns the CA code closer to the Linux coding standard. - -OSL Interfaces: - -The interfaces to the PCI configuration space have been changed to -add the PCI Segment number and to split the single 32-bit combined -DeviceFunction field into two 16-bit fields. This was -accomplished by moving the four values that define an address in -PCI configuration space (segment, bus, device, and function) to -the new ACPI_PCI_ID structure. - -The changes to the PCI configuration space interfaces led to a -reexamination of the complete set of address space access -interfaces for PCI, I/O, and Memory. The previously existing 18 -interfaces have proven difficult to maintain (any small change -must be propagated across at least 6 interfaces) and do not easily -allow for future expansion to 64 bits if necessary. Also, on some -systems, it would not be appropriate to demultiplex the access -width (8, 16, 32,or 64) before calling the OSL if the -corresponding native OS interfaces contain a similar access width -parameter. For these reasons, the 18 address space interfaces -have been replaced by these 6 new ones: - -AcpiOsReadPciConfiguration -AcpiOsWritePciConfiguration -AcpiOsReadMemory -AcpiOsWriteMemory -AcpiOsReadPort -AcpiOsWritePort - -Added a new interface named AcpiOsGetRootPointer to allow the OSL -to perform the platform and/or OS-specific actions necessary to -obtain the ACPI RSDP table pointer. On IA-32 platforms, this -interface will simply call down to the CA core to perform the low- -memory search for the table. On IA-64, the RSDP is obtained from -EFI. Migrating this interface to the OSL allows the CA core to - -remain OS and platform independent. - -Added a new interface named AcpiOsSignal to provide a generic -"function code and pointer" interface for various miscellaneous -signals and notifications that must be made to the host OS. The -first such signals are intended to support the ASL Fatal and -Breakpoint operators. In the latter case, the AcpiOsBreakpoint -interface has been obsoleted. - -The definition of the AcpiFormatException interface has been -changed to simplify its use. The caller no longer must supply a -buffer to the call; A pointer to a const string is now returned -directly. This allows the call to be easily used in printf -statements, etc. since the caller does not have to manage a local -buffer. - - - ASL Compiler, Version X2025: - -The ACPI 2.0 Switch/Case/Default operators have been implemented -and are fully functional. They will work with all ACPI 1.0 -interpreters, since the operators are simply translated to If/Else -pairs. - -The ACPI 2.0 ElseIf operator is implemented and will also work -with 1.0 interpreters, for the same reason. - -Implemented support for ACPI 2.0 variable-length packages. These -packages have a separate opcode, and their size is determined by -the interpreter at run-time. - -Documentation The ACPI CA Programmer Reference has been updated to -reflect the new interfaces and changes to existing interfaces. - - ------------------------------------------ -Summary of changes for this label: 06_15_01 - - ACPI CA Core Subsystem: - -Fixed a problem where a DWORD-accessed field within a Buffer -object would get its byte address inadvertently rounded down to -the nearest DWORD. Buffers are always Byte-accessible. - - ASL Compiler, version X2024: - -Fixed a problem where the Switch() operator would either fault or -hang the compiler. Note however, that the AML code for this ACPI -2.0 operator is not yet implemented. - -Compiler uses the new AcpiOsGetTimer interface to obtain compile -timings. - -Implementation of the CreateField operator automatically converts -a reference to a named field within a resource descriptor from a -byte offset to a bit offset if required. - -Added some missing named fields from the resource descriptor -support. These are the names that are automatically created by the -compiler to reference fields within a descriptor. They are only -valid at compile time and are not passed through to the AML -interpreter. - -Resource descriptor named fields are now typed as Integers and -subject to compile-time typechecking when used in expressions. - - ------------------------------------------ -Summary of changes for this label: 05_18_01 - - ACPI CA Core Subsystem: - -Fixed a couple of problems in the Field support code where bits -from adjacent fields could be returned along with the proper field -bits. Restructured the field support code to improve performance, -readability and maintainability. - -New DEBUG_PRINTP macro automatically inserts the procedure name -into the output, saving hundreds of copies of procedure name -strings within the source, shrinking the memory footprint of the -debug version of the core subsystem. - - Source Code Structure: - -The source code directory tree was restructured to reflect the -current organization of the component architecture. Some files -and directories have been moved and/or renamed. - - Linux: - -Fixed leaking kacpidpc processes. - -Fixed queueing event data even when /proc/acpi/event is not -opened. - - ASL Compiler, version X2020: - -Memory allocation performance enhancement - over 24X compile time -improvement on large ASL files. Parse nodes and namestring -buffers are now allocated from a large internal compiler buffer. - -The temporary .SRC file is deleted unless the "-s" option is -specified - -The "-d" debug output option now sends all output to the .DBG file -instead of the console. - -"External" second parameter is now optional - -"ElseIf" syntax now properly allows the predicate - -Last operand to "Load" now recognized as a Target operand - -Debug object can now be used anywhere as a normal object. - -ResourceTemplate now returns an object of type BUFFER - -EISAID now returns an object of type INTEGER - -"Index" now works with a STRING operand - -"LoadTable" now accepts optional parameters - -"ToString" length parameter is now optional - -"Interrupt (ResourceType," parse error fixed. - -"Register" with a user-defined region space parse error fixed - -Escaped backslash at the end of a string ("\\") scan/parse error -fixed - -"Revision" is now an object of type INTEGER. - - - ------------------------------------------- -Summary of changes for this label: 05_02_01 - -Linux: - -/proc/acpi/event now blocks properly. - -Removed /proc/sys/acpi. You can still dump your DSDT from -/proc/acpi/dsdt. - - ACPI CA Core Subsystem: - -Fixed a problem introduced in the previous label where some of the -"small" resource descriptor types were not recognized. - -Improved error messages for the case where an ASL Field is outside -the range of the parent operation region. - - ASL Compiler, version X2018: - - -Added error detection for ASL Fields that extend beyond the length -of the parent operation region (only if the length of the region -is known at compile time.) This includes fields that have a -minimum access width that is smaller than the parent region, and -individual field units that are partially or entirely beyond the -extent of the parent. - - - ------------------------------------------- -Summary of changes for this label: 04_27_01 - - ACPI CA Core Subsystem: - -Fixed a problem where the namespace mutex could be released at the -wrong time during execution of AcpiRemoveAddressSpaceHandler. - -Added optional thread ID output for debug traces, to simplify -debugging of multiple threads. Added context switch notification -when the debug code realizes that a different thread is now -executing ACPI code. - -Some additional external data types have been prefixed with the -string "ACPI_" for consistency. This may effect existing code. -The data types affected are the external callback typedefs - e.g., - -WALK_CALLBACK becomes ACPI_WALK_CALLBACK. - - Linux: - -Fixed an issue with the OSL semaphore implementation where a -thread was waking up with an error from receiving a SIGCHLD -signal. - -Linux version of ACPI CA now uses the system C library for string -manipulation routines instead of a local implementation. - -Cleaned up comments and removed TBDs. - - ASL Compiler, version X2017: - -Enhanced error detection and reporting for all file I/O -operations. - - Documentation: - -Programmer Reference updated to version 1.06. - - - ------------------------------------------- -Summary of changes for this label: 04_13_01 - - ACPI CA Core Subsystem: - -Restructured support for BufferFields and RegionFields. -BankFields support is now fully operational. All known 32-bit -limitations on field sizes have been removed. Both BufferFields -and (Operation) RegionFields are now supported by the same field -management code. - -Resource support now supports QWORD address and IO resources. The -16/32/64 bit address structures and the Extended IRQ structure -have been changed to properly handle Source Resource strings. - -A ThreadId of -1 is now used to indicate a "mutex not acquired" -condition internally and must never be returned by AcpiOsThreadId. -This reserved value was changed from 0 since Unix systems allow a -thread ID of 0. - -Linux: - -Driver code reorganized to enhance portability - -Added a kernel configuration option to control ACPI_DEBUG - -Fixed the EC driver to honor _GLK. - -ASL Compiler, version X2016: - -Fixed support for the "FixedHw" keyword. Previously, the FixedHw -address space was set to 0, not 0x7f as it should be. - - ------------------------------------------ -Summary of changes for this label: 03_13_01 - - ACPI CA Core Subsystem: - -During ACPI initialization, the _SB_._INI method is now run if -present. - -Notify handler fix - notifies are deferred until the parent method -completes execution. This fixes the "mutex already acquired" -issue seen occasionally. - -Part of the "implicit conversion" rules in ACPI 2.0 have been -found to cause compatibility problems with existing ASL/AML. The -convert "result-to-target-type" implementation has been removed -for stores to method Args and Locals. Source operand conversion -is still fully implemented. Possible changes to ACPI 2.0 -specification pending. - -Fix to AcpiRsCalculatePciRoutingTableLength to return correct -length. - -Fix for compiler warnings for 64-bit compiles. - - Linux: - -/proc output aligned for easier parsing. - -Release-version compile problem fixed. - -New kernel configuration options documented in Configure.help. - -IBM 600E - Fixed Sleep button may generate "Invalid -context" message. - - OSPM: - -Power resource driver integrated with bus manager. - -Fixed kernel fault during active cooling for thermal zones. - -Source Code: - -The source code tree has been restructured. - - - ------------------------------------------- -Summary of changes for this label: 03_02_01 - - Linux OS Services Layer (OSL): - -Major revision of all Linux-specific code. - -Modularized all ACPI-specific drivers. - -Added new thermal zone and power resource drivers. - -Revamped /proc interface (new functionality is under /proc/acpi). - -New kernel configuration options. - - Linux known issues: - -New kernel configuration options not documented in Configure.help -yet. - - -Module dependencies not currently implemented. If used, they -should be loaded in this order: busmgr, power, ec, system, -processor, battery, ac_adapter, button, thermal. - -Modules will not load if CONFIG_MODVERSION is set. - -IBM 600E - entering S5 may reboot instead of shutting down. - -IBM 600E - Sleep button may generate "Invalid context" -message. - -Some systems may fail with "execution mutex already acquired" -message. - - ACPI CA Core Subsystem: - -Added a new OSL Interface, AcpiOsGetThreadId. This was required -for the deadlock detection code. Defined to return a non-zero, 32- -bit thread ID for the currently executing thread. May be a non- -zero constant integer on single-thread systems. - -Implemented deadlock detection for internal subsystem mutexes. We -may add conditional compilation for this code (debug only) later. - -ASL/AML Mutex object semantics are now fully supported. This -includes multiple acquires/releases by owner and support for the - -Mutex SyncLevel parameter. - -A new "Force Release" mechanism automatically frees all ASL -Mutexes that have been acquired but not released when a thread -exits the interpreter. This forces conformance to the ACPI spec -("All mutexes must be released when an invocation exits") and -prevents deadlocked ASL threads. This mechanism can be expanded -(later) to monitor other resource acquisitions if OEM ASL code -continues to misbehave (which it will). - -Several new ACPI exception codes have been added for the Mutex -support. - -Recursive method calls are now allowed and supported (the ACPI -spec does in fact allow recursive method calls.) The number of -recursive calls is subject to the restrictions imposed by the -SERIALIZED method keyword and SyncLevel (ACPI 2.0) method -parameter. - -Implemented support for the SyncLevel parameter for control -methods (ACPI 2.0 feature) - -Fixed a deadlock problem when multiple threads attempted to use -the interpreter. - -Fixed a problem where the string length of a String package -element was not always set in a package returned from -AcpiEvaluateObject. - -Fixed a problem where the length of a String package element was -not always included in the length of the overall package returned -from AcpiEvaluateObject. - -Added external interfaces (Acpi*) to the ACPI debug memory -manager. This manager keeps a list of all outstanding -allocations, and can therefore detect memory leaks and attempts to -free memory blocks more than once. Useful for code such as the -power manager, etc. May not be appropriate for device drivers. -Performance with the debug code enabled is slow. - -The ACPI Global Lock is now an optional hardware element. - - ASL Compiler Version X2015: - -Integrated changes to allow the compiler to be generated on -multiple platforms. - -Linux makefile added to generate the compiler on Linux - - Source Code: - -All platform-specific headers have been moved to their own -subdirectory, Include/Platform. - -New source file added, Interpreter/ammutex.c - -New header file, Include/acstruct.h - - Documentation: - -The programmer reference has been updated for the following new -interfaces: AcpiOsGetThreadId AcpiAllocate AcpiCallocate AcpiFree - - ------------------------------------------ -Summary of changes for this label: 02_08_01 - -Core ACPI CA Subsystem: Fixed a problem where an error was -incorrectly returned if the return resource buffer was larger than -the actual data (in the resource interfaces). - -References to named objects within packages are resolved to the - -full pathname string before packages are returned directly (via -the AcpiEvaluateObject interface) or indirectly via the resource -interfaces. - -Linux OS Services Layer (OSL): - -Improved /proc battery interface. - - -Added C-state debugging output and other miscellaneous fixes. - -ASL Compiler Version X2014: - -All defined method arguments can now be used as local variables, -including the ones that are not actually passed in as parameters. -The compiler tracks initialization of the arguments and issues an -exception if they are used without prior assignment (just like -locals). - -The -o option now specifies a filename prefix that is used for all -output files, including the AML output file. Otherwise, the -default behavior is as follows: 1) the AML goes to the file -specified in the DSDT. 2) all other output files use the input -source filename as the base. - - ------------------------------------------ -Summary of changes for this label: 01_25_01 - -Core ACPI CA Subsystem: Restructured the implementation of object -store support within the interpreter. This includes support for -the Store operator as well as any ASL operators that include a -target operand. - -Partially implemented support for Implicit Result-to-Target -conversion. This is when a result object is converted on the fly -to the type of an existing target object. Completion of this -support is pending further analysis of the ACPI specification -concerning this matter. - -CPU-specific code has been removed from the subsystem (hardware -directory). - -New Power Management Timer functions added - -Linux OS Services Layer (OSL): Moved system state transition code -to the core, fixed it, and modified Linux OSL accordingly. - -Fixed C2 and C3 latency calculations. - - -We no longer use the compilation date for the version message on -initialization, but retrieve the version from AcpiGetSystemInfo(). - -Incorporated for fix Sony VAIO machines. - -Documentation: The Programmer Reference has been updated and -reformatted. - - -ASL Compiler: Version X2013: Fixed a problem where the line -numbering and error reporting could get out of sync in the -presence of multiple include files. - - ------------------------------------------ -Summary of changes for this label: 01_15_01 - -Core ACPI CA Subsystem: - -Implemented support for type conversions in the execution of the -ASL Concatenate operator (The second operand is converted to -match the type of the first operand before concatenation.) - -Support for implicit source operand conversion is partially -implemented. The ASL source operand types Integer, Buffer, and -String are freely interchangeable for most ASL operators and are -converted by the interpreter on the fly as required. Implicit -Target operand conversion (where the result is converted to the -target type before storing) is not yet implemented. - -Support for 32-bit and 64-bit BCD integers is implemented. - -Problem fixed where a field read on an aligned field could cause a -read past the end of the field. - -New exception, AE_AML_NO_RETURN_VALUE, is returned when a method -does not return a value, but the caller expects one. (The ASL -compiler flags this as a warning.) - -ASL Compiler: - -Version X2011: -1. Static typechecking of all operands is implemented. This -prevents the use of invalid objects (such as using a Package where -an Integer is required) at compile time instead of at interpreter -run-time. -2. The ASL source line is printed with ALL errors and warnings. -3. Bug fix for source EOF without final linefeed. -4. Debug option is split into a parse trace and a namespace trace. -5. Namespace output option (-n) includes initial values for -integers and strings. -6. Parse-only option added for quick syntax checking. -7. Compiler checks for duplicate ACPI name declarations - -Version X2012: -1. Relaxed typechecking to allow interchangeability between -strings, integers, and buffers. These types are now converted by -the interpreter at runtime. -2. Compiler reports time taken by each internal subsystem in the -debug output file. - - - ------------------------------------------ -Summary of changes for this label: 12_14_00 - -ASL Compiler: - -This is the first official release of the compiler. Since the -compiler requires elements of the Core Subsystem, this label -synchronizes everything. - ------------------------------------------- -Summary of changes for this label: 12_08_00 - - -Fixed a problem where named references within the ASL definition -of both OperationRegions and CreateXXXFields did not work -properly. The symptom was an AE_AML_OPERAND_TYPE during -initialization of the region/field. This is similar (but not -related internally) to the problem that was fixed in the last -label. - -Implemented both 32-bit and 64-bit support for the BCD ASL -functions ToBCD and FromBCD. - -Updated all legal headers to include "2000" in the copyright -years. - - ------------------------------------------ -Summary of changes for this label: 12_01_00 - -Fixed a problem where method invocations within the ASL definition -of both OperationRegions and CreateXXXFields did not work -properly. The symptom was an AE_AML_OPERAND_TYPE during -initialization of the region/field: - - nsinit-0209: AE_AML_OPERAND_TYPE while getting region arguments -[DEBG] ammonad-0284: Exec_monadic2_r/Not: bad operand(s) -(0x3005) - -Fixed a problem where operators with more than one nested -subexpression would fail. The symptoms were varied, by mostly -AE_AML_OPERAND_TYPE errors. This was actually a rather serious -problem that has gone unnoticed until now. - - Subtract (Add (1,2), Multiply (3,4)) - -Fixed a problem where AcpiGetHandle didn't quite get fixed in the -previous build (The prefix part of a relative path was handled -incorrectly). - -Fixed a problem where Operation Region initialization failed if -the operation region name was a "namepath" instead of a simple -"nameseg". Symptom was an AE_NO_OPERAND error. - -Fixed a problem where an assignment to a local variable via the -indirect RefOf mechanism only worked for the first such -assignment. Subsequent assignments were ignored. - - ------------------------------------------ -Summary of changes for this label: 11_15_00 - -ACPI 2.0 table support with backwards support for ACPI 1.0 and the -0.71 extensions. Note: although we can read ACPI 2.0 BIOS tables, -the AML interpreter does NOT have support for the new 2.0 ASL -grammar terms at this time. - -All ACPI hardware access is via the GAS structures in the ACPI 2.0 -FADT. - -All physical memory addresses across all platforms are now 64 bits -wide. Logical address width remains dependent on the platform -(i.e., "void *"). - -AcpiOsMapMemory interface changed to a 64-bit physical address. - -The AML interpreter integer size is now 64 bits, as per the ACPI -2.0 specification. - -For backwards compatibility with ACPI 1.0, ACPI tables with a -revision number less than 2 use 32-bit integers only. - -Fixed a problem where the evaluation of OpRegion operands did not -always resolve them to numbers properly. - ------------------------------------------- -Summary of changes for this label: 10_20_00 - -Fix for CBN_._STA issue. This fix will allow correct access to -CBN_ OpRegions when the _STA returns 0x8. - -Support to convert ACPI constants (Ones, Zeros, One) to actual -values before a package object is returned - -Fix for method call as predicate to if/while construct causing -incorrect if/while behavior - -Fix for Else block package lengths sometimes calculated wrong (if -block > 63 bytes) - -Fix for Processor object length field, was always zero - -Table load abort if FACP sanity check fails - -Fix for problem with Scope(name) if name already exists - -Warning emitted if a named object referenced cannot be found -(resolved) during method execution. - - - - - ------------------------------------------- -Summary of changes for this label: 9_29_00 - -New table initialization interfaces: AcpiInitializeSubsystem no -longer has any parameters AcpiFindRootPointer - Find the RSDP (if -necessary) AcpiLoadTables (RSDP) - load all tables found at RSDP- ->RSDT Obsolete Interfaces AcpiLoadFirmwareTables - replaced by -AcpiLoadTables - -Note: These interface changes require changes to all existing OSDs - -The PCI_Config default address space handler is always installed -at the root namespace object. - -------------------------------------------- -Summary of changes for this label: 09_15_00 - -The new initialization architecture is implemented. New -interfaces are: AcpiInitializeSubsystem (replaces AcpiInitialize) -AcpiEnableSubsystem Obsolete Interfaces: AcpiLoadNamespace - -(Namespace is automatically loaded when a table is loaded) - -The ACPI_OPERAND_OBJECT has been optimized to shrink its size from -52 bytes to 32 bytes. There is usually one of these for every -namespace object, so the memory savings is significant. - -Implemented just-in-time evaluation of the CreateField operators. - -Bug fixes for IA-64 support have been integrated. - -Additional code review comments have been implemented - -The so-called "third pass parse" has been replaced by a final walk -through the namespace to initialize all operation regions (address -spaces) and fields that have not yet been initialized during the -execution of the various _INI and REG methods. - -New file - namespace/nsinit.c - -------------------------------------------- -Summary of changes for this label: 09_01_00 - -Namespace manager data structures have been reworked to change the -primary object from a table to a single object. This has -resulted in dynamic memory savings of 3X within the namespace and -2X overall in the ACPI CA subsystem. - -Fixed problem where the call to AcpiEvFindPciRootBuses was -inadvertently left commented out. - -Reduced the warning count when generating the source with the GCC -compiler. - -Revision numbers added to each module header showing the -SourceSafe version of the file. Please refer to this version -number when giving us feedback or comments on individual modules. - -The main object types within the subsystem have been renamed to -clarify their purpose: - -ACPI_INTERNAL_OBJECT -> ACPI_OPERAND_OBJECT -ACPI_GENERIC_OP -> ACPI_PARSE_OBJECT -ACPI_NAME_TABLE_ENTRY -> ACPI_NAMESPACE_NODE - -NOTE: no changes to the initialization sequence are included in -this label. - -------------------------------------------- -Summary of changes for this label: 08_23_00 - -Fixed problem where TerminateControlMethod was being called -multiple times per method - -Fixed debugger problem where single stepping caused a semaphore to -be oversignalled - -Improved performance through additional parse object caching - -added ACPI_EXTENDED_OP type - -------------------------------------------- -Summary of changes for this label: 08_10_00 - -Parser/Interpreter integration: Eliminated the creation of -complete parse trees for ACPI tables and control methods. -Instead, parse subtrees are created and then deleted as soon as -they are processed (Either entered into the namespace or executed -by the interpreter). This reduces the use of dynamic kernel -memory significantly. (about 10X) - -Exception codes broken into classes and renumbered. Be sure to -recompile all code that includes acexcep.h. Hopefully we won't -have to renumber the codes again now that they are split into -classes (environment, programmer, AML code, ACPI table, and -internal). - -Fixed some additional alignment issues in the Resource Manager -subcomponent - -Implemented semaphore tracking in the AcpiExec utility, and fixed -several places where mutexes/semaphores were being unlocked -without a corresponding lock operation. There are no known -semaphore or mutex "leaks" at this time. - -Fixed the case where an ASL Return operator is used to return an -unnamed package. - -------------------------------------------- -Summary of changes for this label: 07_28_00 - -Fixed a problem with the way addresses were calculated in -AcpiAmlReadFieldData() and AcpiAmlWriteFieldData(). This problem -manifested itself when a Field was created with WordAccess or -DwordAccess, but the field unit defined within the Field was less - -than a Word or Dword. - -Fixed a problem in AmlDumpOperands() module's loop to pull -operands off of the operand stack to display information. The -problem manifested itself as a TLB error on 64-bit systems when -accessing an operand stack with two or more operands. - -Fixed a problem with the PCI configuration space handlers where -context was getting confused between accesses. This required a -change to the generic address space handler and address space -setup definitions. Handlers now get both a global handler context -(this is the one passed in by the user when executing -AcpiInstallAddressSpaceHandler() and a specific region context -that is unique to each region (For example, the _ADR, _SEG and -_BBN values associated with a specific region). The generic -function definitions have changed to the following: - -typedef ACPI_STATUS (*ADDRESS_SPACE_HANDLER) ( UINT32 Function, -UINT32 Address, UINT32 BitWidth, UINT32 *Value, void -*HandlerContext, // This used to be void *Context void -*RegionContext); // This is an additional parameter - -typedef ACPI_STATUS (*ADDRESS_SPACE_SETUP) ( ACPI_HANDLE -RegionHandle, UINT32 Function, void *HandlerContext, void -**RegionContext); // This used to be **ReturnContext - -------------------------------------------- -Summary of changes for this label: 07_21_00 - -Major file consolidation and rename. All files within the -interpreter have been renamed as well as most header files. This -was done to prevent collisions with existing files in the host -OSs -- filenames such as "config.h" and "global.h" seem to be -quite common. The VC project files have been updated. All -makefiles will require modification. - -The parser/interpreter integration continues in Phase 5 with the -implementation of a complete 2-pass parse (the AML is parsed -twice) for each table; This avoids the construction of a huge -parse tree and therefore reduces the amount of dynamic memory -required by the subsystem. Greater use of the parse object cache -means that performance is unaffected. - -Many comments from the two code reviews have been rolled in. - -The 64-bit alignment support is complete. - -------------------------------------------- -Summary of changes for this label: 06_30_00 - -With a nod and a tip of the hat to the technology of yesteryear, -we've added support in the source code for 80 column output -devices. The code is now mostly constrained to 80 columns or -less to support environments and editors that 1) cannot display -or print more than 80 characters on a single line, and 2) cannot -disable line wrapping. - -A major restructuring of the namespace data structure has been -completed. The result is 1) cleaner and more -understandable/maintainable code, and 2) a significant reduction -in the dynamic memory requirement for each named ACPI object -(almost half). - -------------------------------------------- -Summary of changes for this label: 06_23_00 - -Linux support has been added. In order to obtain approval to get -the ACPI CA subsystem into the Linux kernel, we've had to make -quite a few changes to the base subsystem that will affect all -users (all the changes are generic and OS- independent). The -effects of these global changes have been somewhat far reaching. -Files have been merged and/or renamed and interfaces have been -renamed. The major changes are described below. - -Osd* interfaces renamed to AcpiOs* to eliminate namespace -pollution/confusion within our target kernels. All OSD -interfaces must be modified to match the new naming convention. - -Files merged across the subsystem. A number of the smaller source -and header files have been merged to reduce the file count and -increase the density of the existing files. There are too many -to list here. In general, makefiles that call out individual -files will require rebuilding. - -Interpreter files renamed. All interpreter files now have the -prefix am* instead of ie* and is*. - -Header files renamed: The acapi.h file is now acpixf.h. The -acpiosd.h file is now acpiosxf.h. We are removing references to -the acronym "API" since it is somewhat windowsy. The new name is -"external interface" or xface or xf in the filenames.j - - -All manifest constants have been forced to upper case (some were -mixed case.) Also, the string "ACPI_" has been prepended to many -(not all) of the constants, typedefs, and structs. - -The globals "DebugLevel" and "DebugLayer" have been renamed -"AcpiDbgLevel" and "AcpiDbgLayer" respectively. - -All other globals within the subsystem are now prefixed with -"AcpiGbl_" Internal procedures within the subsystem are now -prefixed with "Acpi" (with only a few exceptions). The original -two-letter abbreviation for the subcomponent remains after "Acpi" -- for example, CmCallocate became AcpiCmCallocate. - -Added a source code translation/conversion utility. Used to -generate the Linux source code, it can be modified to generate -other types of source as well. Can also be used to cleanup -existing source by removing extraneous spaces and blank lines. -Found in tools/acpisrc/* - -OsdUnMapMemory was renamed to OsdUnmapMemory and then -AcpiOsUnmapMemory. (UnMap became Unmap). - -A "MaxUnits" parameter has been added to AcpiOsCreateSemaphore. -When set to one, this indicates that the caller wants to use the - -semaphore as a mutex, not a counting semaphore. ACPI CA uses -both types. However, implementers of this call may want to use -different OS primitives depending on the type of semaphore -requested. For example, some operating systems provide separate - -"mutex" and "semaphore" interfaces - where the mutex interface is -much faster because it doesn't have all the overhead of a full -semaphore implementation. - -Fixed a deadlock problem where a method that accesses the PCI -address space can block forever if it is the first access to the -space. - -------------------------------------------- -Summary of changes for this label: 06_02_00 - -Support for environments that cannot handle unaligned data -accesses (e.g. firmware and OS environments devoid of alignment -handler technology namely SAL/EFI and the IA-64 Linux kernel) has -been added (via configurable macros) in these three areas: - -Transfer of data from the raw AML byte stream is done via byte -moves instead of word/dword/qword moves. - External objects are -aligned within the user buffer, including package elements (sub- -objects). - Conversion of name strings to UINT32 Acpi Names is now -done byte-wise. - -The Store operator was modified to mimic Microsoft's -implementation when storing to a Buffer Field. - -Added a check of the BM_STS bit before entering C3. - -The methods subdirectory has been obsoleted and removed. A new -file, cmeval.c subsumes the functionality. - -A 16-bit (DOS) version of AcpiExec has been developed. The -makefile is under the acpiexec directory. diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/compiler/Makefile b/l4/pkg/acpica/lib-acpi/src/acpica/compiler/Makefile deleted file mode 100644 index 597d1ffcb..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/compiler/Makefile +++ /dev/null @@ -1,129 +0,0 @@ - - -PROG= iasl -SRCS= aslcompilerparse.c aslcompilerlex.c aslanalyze.c aslcodegen.c \ - aslcompile.c aslerror.c aslfiles.c asllength.c \ - asllisting.c aslload.c asllookup.c aslmain.c aslmap.c aslopcodes.c \ - asloperands.c aslresource.c aslrestype1.c aslrestype2.c aslstartup.c \ - asltree.c aslutils.c asltransform.c aslfold.c aslstubs.c aslopt.c \ - ../common/getopt.c \ - ../utilities/utalloc.c \ - ../utilities/utcache.c \ - ../utilities/utcopy.c \ - ../utilities/utdebug.c \ - ../utilities/utdelete.c \ - ../utilities/utglobal.c \ - ../utilities/utinit.c \ - ../utilities/utlock.c \ - ../utilities/utobject.c \ - ../utilities/utmisc.c \ - ../utilities/utmath.c \ - ../utilities/utmutex.c \ - ../utilities/utresrc.c \ - ../utilities/utstate.c \ - ../utilities/utxface.c \ - ../namespace/nsaccess.c \ - ../namespace/nsalloc.c \ - ../namespace/nsdump.c \ - ../namespace/nsnames.c \ - ../namespace/nsobject.c \ - ../namespace/nsparse.c \ - ../namespace/nssearch.c \ - ../namespace/nsutils.c \ - ../namespace/nswalk.c \ - ../namespace/nsxfobj.c \ - ../parser/psargs.c \ - ../parser/psloop.c \ - ../parser/psopcode.c \ - ../parser/psparse.c \ - ../parser/psscope.c \ - ../parser/pstree.c \ - ../parser/psutils.c \ - ../parser/pswalk.c \ - ../dispatcher/dswscope.c \ - ../dispatcher/dswstate.c \ - ../dispatcher/dsfield.c \ - ../dispatcher/dsobject.c \ - ../dispatcher/dsopcode.c \ - ../dispatcher/dsutils.c \ - ../dispatcher/dswexec.c \ - ../dispatcher/dswload.c \ - ../executer/exconvrt.c \ - ../executer/excreate.c \ - ../executer/exdump.c \ - ../executer/exmisc.c \ - ../executer/exmutex.c \ - ../executer/exnames.c \ - ../executer/exoparg1.c \ - ../executer/exoparg2.c \ - ../executer/exoparg3.c \ - ../executer/exoparg6.c \ - ../executer/exprep.c \ - ../executer/exregion.c \ - ../executer/exresnte.c \ - ../executer/exresolv.c \ - ../executer/exresop.c \ - ../executer/exstore.c \ - ../executer/exstoren.c \ - ../executer/exstorob.c \ - ../executer/exsystem.c \ - ../executer/exutils.c \ - ../common/adfile.c \ - ../common/adisasm.c \ - ../common/adwalk.c \ - ../common/dmextern.c \ - ../common/dmrestag.c \ - ../common/dmtable.c \ - ../common/dmtbinfo.c \ - ../common/dmtbdump.c \ - ../debugger/dbfileio.c \ - ../disassembler/dmbuffer.c \ - ../disassembler/dmnames.c \ - ../disassembler/dmopcode.c \ - ../disassembler/dmobject.c \ - ../disassembler/dmresrc.c \ - ../disassembler/dmresrcl.c \ - ../disassembler/dmresrcs.c \ - ../disassembler/dmutils.c \ - ../disassembler/dmwalk.c \ - ../tables/tbfadt.c \ - ../tables/tbinstal.c \ - ../tables/tbutils.c \ - ../tables/tbxface.c \ - ../osunixxf.c - -NOMAN= YES -CFLAGS+= -Wall -O2 -Wstrict-prototypes -D_LINUX -DACPI_ASL_COMPILER -I../include - -#YACC= yacc -YACC= bison -YFLAGS+= -v -d -LEX= flex -LFLAGS+= -i - -#.if $(YACC) == "bison" -YFLAGS+= -y -pAslCompiler -#.else -#CFLAGS+= -D_USE_BERKELEY_YACC -#.endif - -LDLIBS = -lpthread -lrt - -aslmain : $(patsubst %.c,%.o, $(SRCS)) - $(CC) $(LDFLAGS) $(patsubst %.c,%.o, $(SRCS)) \ - $(LOADLIBES) $(LDLIBS) -o iasl - -CLEANFILES= y.output y.tab.c y.tab.h aslcompiler.y.h \ - aslcompilerparse.c aslcompilerlex.c iasl - -aslcompilerparse.c: aslcompiler.y - ${YACC} ${YFLAGS} aslcompiler.y - cp y.tab.c aslcompilerparse.c - cp y.tab.h aslcompiler.y.h - -aslcompilerlex.c: aslcompiler.l - ${LEX} ${LFLAGS} -PAslCompiler -oaslcompilerlex.c aslcompiler.l - -clean : - rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS)) - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbcmds.c b/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbcmds.c deleted file mode 100644 index 0a542d952..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbcmds.c +++ /dev/null @@ -1,2129 +0,0 @@ -/******************************************************************************* - * - * Module Name: dbcmds - debug commands and output routines - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acdispat.h" -#include "acnamesp.h" -#include "acevents.h" -#include "acdebug.h" -#include "acresrc.h" -#include "acdisasm.h" -#include "actables.h" -#include "acparser.h" - -#ifdef ACPI_DEBUGGER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dbcmds") - - -/* Local prototypes */ - -static ACPI_STATUS -AcpiDbIntegrityWalk ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue); - -static ACPI_STATUS -AcpiDbWalkAndMatchName ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue); - -static ACPI_STATUS -AcpiDbWalkForReferences ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue); - -static ACPI_STATUS -AcpiDbWalkForSpecificObjects ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue); - -static ACPI_NAMESPACE_NODE * -AcpiDbConvertToNode ( - char *InString); - -static void -AcpiDmCompareAmlResources ( - UINT8 *Aml1Buffer, - ACPI_RSDESC_SIZE Aml1BufferLength, - UINT8 *Aml2Buffer, - ACPI_RSDESC_SIZE Aml2BufferLength); - -static ACPI_STATUS -AcpiDmTestResourceConversion ( - ACPI_NAMESPACE_NODE *Node, - char *Name); - - -/* - * Arguments for the Objects command - * These object types map directly to the ACPI_TYPES - */ -static ARGUMENT_INFO AcpiDbObjectTypes [] = -{ - {"ANY"}, - {"INTEGERS"}, - {"STRINGS"}, - {"BUFFERS"}, - {"PACKAGES"}, - {"FIELDS"}, - {"DEVICES"}, - {"EVENTS"}, - {"METHODS"}, - {"MUTEXES"}, - {"REGIONS"}, - {"POWERRESOURCES"}, - {"PROCESSORS"}, - {"THERMALZONES"}, - {"BUFFERFIELDS"}, - {"DDBHANDLES"}, - {"DEBUG"}, - {"REGIONFIELDS"}, - {"BANKFIELDS"}, - {"INDEXFIELDS"}, - {"REFERENCES"}, - {"ALIAS"}, - {NULL} /* Must be null terminated */ -}; - - -/******************************************************************************* - * - * FUNCTION: AcpiDbConvertToNode - * - * PARAMETERS: InString - String to convert - * - * RETURN: Pointer to a NS node - * - * DESCRIPTION: Convert a string to a valid NS pointer. Handles numeric or - * alpha strings. - * - ******************************************************************************/ - -static ACPI_NAMESPACE_NODE * -AcpiDbConvertToNode ( - char *InString) -{ - ACPI_NAMESPACE_NODE *Node; - - - if ((*InString >= 0x30) && (*InString <= 0x39)) - { - /* Numeric argument, convert */ - - Node = ACPI_TO_POINTER (ACPI_STRTOUL (InString, NULL, 16)); - if (!AcpiOsReadable (Node, sizeof (ACPI_NAMESPACE_NODE))) - { - AcpiOsPrintf ("Address %p is invalid in this address space\n", - Node); - return (NULL); - } - - /* Make sure pointer is valid NS node */ - - if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED) - { - AcpiOsPrintf ("Address %p is not a valid NS node [%s]\n", - Node, AcpiUtGetDescriptorName (Node)); - return (NULL); - } - } - else - { - /* Alpha argument */ - /* The parameter is a name string that must be resolved to a - * Named obj - */ - Node = AcpiDbLocalNsLookup (InString); - if (!Node) - { - Node = AcpiGbl_RootNode; - } - } - - return (Node); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbSleep - * - * PARAMETERS: ObjectArg - Desired sleep state (0-5) - * - * RETURN: Status - * - * DESCRIPTION: Simulate a sleep/wake sequence - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDbSleep ( - char *ObjectArg) -{ - ACPI_STATUS Status; - UINT8 SleepState; - - - SleepState = (UINT8) ACPI_STRTOUL (ObjectArg, NULL, 0); - - AcpiOsPrintf ("**** Prepare to sleep ****\n"); - Status = AcpiEnterSleepStatePrep (SleepState); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - AcpiOsPrintf ("**** Going to sleep ****\n"); - Status = AcpiEnterSleepState (SleepState); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - AcpiOsPrintf ("**** returning from sleep ****\n"); - Status = AcpiLeaveSleepState (SleepState); - - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbWalkForReferences - * - * PARAMETERS: Callback from WalkNamespace - * - * RETURN: Status - * - * DESCRIPTION: Check if this namespace object refers to the target object - * that is passed in as the context value. - * - * Note: Currently doesn't check subobjects within the Node's object - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDbWalkForReferences ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue) -{ - ACPI_OPERAND_OBJECT *ObjDesc = (ACPI_OPERAND_OBJECT *) Context; - ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; - - - /* Check for match against the namespace node itself */ - - if (Node == (void *) ObjDesc) - { - AcpiOsPrintf ("Object is a Node [%4.4s]\n", - AcpiUtGetNodeName (Node)); - } - - /* Check for match against the object attached to the node */ - - if (AcpiNsGetAttachedObject (Node) == ObjDesc) - { - AcpiOsPrintf ("Reference at Node->Object %p [%4.4s]\n", - Node, AcpiUtGetNodeName (Node)); - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbFindReferences - * - * PARAMETERS: ObjectArg - String with hex value of the object - * - * RETURN: None - * - * DESCRIPTION: Search namespace for all references to the input object - * - ******************************************************************************/ - -void -AcpiDbFindReferences ( - char *ObjectArg) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - - - /* Convert string to object pointer */ - - ObjDesc = ACPI_TO_POINTER (ACPI_STRTOUL (ObjectArg, NULL, 16)); - - /* Search all nodes in namespace */ - - (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, - AcpiDbWalkForReferences, NULL, (void *) ObjDesc, NULL); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbWalkForPredefinedNames - * - * PARAMETERS: Callback from WalkNamespace - * - * RETURN: Status - * - * DESCRIPTION: Detect and display predefined ACPI names (names that start with - * an underscore) - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDbWalkForPredefinedNames ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue) -{ - ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; - UINT32 *Count = (UINT32 *) Context; - const ACPI_PREDEFINED_INFO *Predefined; - const ACPI_PREDEFINED_INFO *Package = NULL; - char *Pathname; - - - Predefined = AcpiNsCheckForPredefinedName (Node); - if (!Predefined) - { - return (AE_OK); - } - - Pathname = AcpiNsGetExternalPathname (Node); - if (!Pathname) - { - return (AE_OK); - } - - /* If method returns a package, the info is in the next table entry */ - - if (Predefined->Info.ExpectedBtypes & ACPI_BTYPE_PACKAGE) - { - Package = Predefined + 1; - } - - AcpiOsPrintf ("%-32s arg %X ret %2.2X", Pathname, - Predefined->Info.ParamCount, Predefined->Info.ExpectedBtypes); - - if (Package) - { - AcpiOsPrintf (" PkgType %2.2X ObjType %2.2X Count %2.2X", - Package->RetInfo.Type, Package->RetInfo.ObjectType1, - Package->RetInfo.Count1); - } - - AcpiOsPrintf("\n"); - - AcpiNsCheckParameterCount (Pathname, Node, ACPI_UINT32_MAX, Predefined); - ACPI_FREE (Pathname); - (*Count)++; - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbCheckPredefinedNames - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Validate all predefined names in the namespace - * - ******************************************************************************/ - -void -AcpiDbCheckPredefinedNames ( - void) -{ - UINT32 Count = 0; - - - /* Search all nodes in namespace */ - - (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, - AcpiDbWalkForPredefinedNames, NULL, (void *) &Count, NULL); - - AcpiOsPrintf ("Found %d predefined names in the namespace\n", Count); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbWalkForExecute - * - * PARAMETERS: Callback from WalkNamespace - * - * RETURN: Status - * - * DESCRIPTION: Batch execution module. Currently only executes predefined - * ACPI names. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDbWalkForExecute ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue) -{ - ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; - ACPI_EXECUTE_WALK *Info = (ACPI_EXECUTE_WALK *) Context; - ACPI_BUFFER ReturnObj; - ACPI_STATUS Status; - char *Pathname; - UINT32 i; - ACPI_DEVICE_INFO *ObjInfo; - ACPI_OBJECT_LIST ParamObjects; - ACPI_OBJECT Params[ACPI_METHOD_NUM_ARGS]; - const ACPI_PREDEFINED_INFO *Predefined; - - - Predefined = AcpiNsCheckForPredefinedName (Node); - if (!Predefined) - { - return (AE_OK); - } - - if (Node->Type == ACPI_TYPE_LOCAL_SCOPE) - { - return (AE_OK); - } - - Pathname = AcpiNsGetExternalPathname (Node); - if (!Pathname) - { - return (AE_OK); - } - - /* Get the object info for number of method parameters */ - - Status = AcpiGetObjectInfo (ObjHandle, &ObjInfo); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - ParamObjects.Pointer = NULL; - ParamObjects.Count = 0; - - if (ObjInfo->Type == ACPI_TYPE_METHOD) - { - /* Setup default parameters */ - - for (i = 0; i < ObjInfo->ParamCount; i++) - { - Params[i].Type = ACPI_TYPE_INTEGER; - Params[i].Integer.Value = 1; - } - - ParamObjects.Pointer = Params; - ParamObjects.Count = ObjInfo->ParamCount; - } - - ACPI_FREE (ObjInfo); - ReturnObj.Pointer = NULL; - ReturnObj.Length = ACPI_ALLOCATE_BUFFER; - - /* Do the actual method execution */ - - AcpiGbl_MethodExecuting = TRUE; - - Status = AcpiEvaluateObject (Node, NULL, &ParamObjects, &ReturnObj); - - AcpiOsPrintf ("%-32s returned %s\n", Pathname, AcpiFormatException (Status)); - AcpiGbl_MethodExecuting = FALSE; - ACPI_FREE (Pathname); - - /* Ignore status from method execution */ - - Status = AE_OK; - - /* Update count, check if we have executed enough methods */ - - Info->Count++; - if (Info->Count >= Info->MaxCount) - { - Status = AE_CTRL_TERMINATE; - } - - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbBatchExecute - * - * PARAMETERS: CountArg - Max number of methods to execute - * - * RETURN: None - * - * DESCRIPTION: Namespace batch execution. Execute predefined names in the - * namespace, up to the max count, if specified. - * - ******************************************************************************/ - -void -AcpiDbBatchExecute ( - char *CountArg) -{ - ACPI_EXECUTE_WALK Info; - - - Info.Count = 0; - Info.MaxCount = ACPI_UINT32_MAX; - - if (CountArg) - { - Info.MaxCount = ACPI_STRTOUL (CountArg, NULL, 0); - } - - - /* Search all nodes in namespace */ - - (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, - AcpiDbWalkForExecute, NULL, (void *) &Info, NULL); - - AcpiOsPrintf ("Executed %d predefined names in the namespace\n", Info.Count); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayLocks - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Display information about internal mutexes. - * - ******************************************************************************/ - -void -AcpiDbDisplayLocks ( - void) -{ - UINT32 i; - - - for (i = 0; i < ACPI_MAX_MUTEX; i++) - { - AcpiOsPrintf ("%26s : %s\n", AcpiUtGetMutexName (i), - AcpiGbl_MutexInfo[i].ThreadId == ACPI_MUTEX_NOT_ACQUIRED - ? "Locked" : "Unlocked"); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayTableInfo - * - * PARAMETERS: TableArg - String with name of table to be displayed - * - * RETURN: None - * - * DESCRIPTION: Display information about loaded tables. Current - * implementation displays all loaded tables. - * - ******************************************************************************/ - -void -AcpiDbDisplayTableInfo ( - char *TableArg) -{ - UINT32 i; - ACPI_TABLE_DESC *TableDesc; - ACPI_STATUS Status; - - - /* Walk the entire root table list */ - - for (i = 0; i < AcpiGbl_RootTableList.Count; i++) - { - TableDesc = &AcpiGbl_RootTableList.Tables[i]; - AcpiOsPrintf ("%d ", i); - - /* Make sure that the table is mapped */ - - Status = AcpiTbVerifyTable (TableDesc); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Dump the table header */ - - if (TableDesc->Pointer) - { - AcpiTbPrintTableHeader (TableDesc->Address, TableDesc->Pointer); - } - else - { - /* If the pointer is null, the table has been unloaded */ - - ACPI_INFO ((AE_INFO, "%4.4s - Table has been unloaded", - TableDesc->Signature.Ascii)); - } - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbUnloadAcpiTable - * - * PARAMETERS: TableArg - Name of the table to be unloaded - * InstanceArg - Which instance of the table to unload (if - * there are multiple tables of the same type) - * - * RETURN: Nonde - * - * DESCRIPTION: Unload an ACPI table. - * Instance is not implemented - * - ******************************************************************************/ - -void -AcpiDbUnloadAcpiTable ( - char *TableArg, - char *InstanceArg) -{ -/* TBD: Need to reimplement for new data structures */ - -#if 0 - UINT32 i; - ACPI_STATUS Status; - - - /* Search all tables for the target type */ - - for (i = 0; i < (ACPI_TABLE_ID_MAX+1); i++) - { - if (!ACPI_STRNCMP (TableArg, AcpiGbl_TableData[i].Signature, - AcpiGbl_TableData[i].SigLength)) - { - /* Found the table, unload it */ - - Status = AcpiUnloadTable (i); - if (ACPI_SUCCESS (Status)) - { - AcpiOsPrintf ("[%s] unloaded and uninstalled\n", TableArg); - } - else - { - AcpiOsPrintf ("%s, while unloading [%s]\n", - AcpiFormatException (Status), TableArg); - } - - return; - } - } - - AcpiOsPrintf ("Unknown table type [%s]\n", TableArg); -#endif -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbSetMethodBreakpoint - * - * PARAMETERS: Location - AML offset of breakpoint - * WalkState - Current walk info - * Op - Current Op (from parse walk) - * - * RETURN: None - * - * DESCRIPTION: Set a breakpoint in a control method at the specified - * AML offset - * - ******************************************************************************/ - -void -AcpiDbSetMethodBreakpoint ( - char *Location, - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op) -{ - UINT32 Address; - - - if (!Op) - { - AcpiOsPrintf ("There is no method currently executing\n"); - return; - } - - /* Get and verify the breakpoint address */ - - Address = ACPI_STRTOUL (Location, NULL, 16); - if (Address <= Op->Common.AmlOffset) - { - AcpiOsPrintf ("Breakpoint %X is beyond current address %X\n", - Address, Op->Common.AmlOffset); - } - - /* Save breakpoint in current walk */ - - WalkState->UserBreakpoint = Address; - AcpiOsPrintf ("Breakpoint set at AML offset %X\n", Address); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbSetMethodCallBreakpoint - * - * PARAMETERS: Op - Current Op (from parse walk) - * - * RETURN: None - * - * DESCRIPTION: Set a breakpoint in a control method at the specified - * AML offset - * - ******************************************************************************/ - -void -AcpiDbSetMethodCallBreakpoint ( - ACPI_PARSE_OBJECT *Op) -{ - - - if (!Op) - { - AcpiOsPrintf ("There is no method currently executing\n"); - return; - } - - AcpiGbl_StepToNextCall = TRUE; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisassembleAml - * - * PARAMETERS: Statements - Number of statements to disassemble - * Op - Current Op (from parse walk) - * - * RETURN: None - * - * DESCRIPTION: Display disassembled AML (ASL) starting from Op for the number - * of statements specified. - * - ******************************************************************************/ - -void -AcpiDbDisassembleAml ( - char *Statements, - ACPI_PARSE_OBJECT *Op) -{ - UINT32 NumStatements = 8; - - - if (!Op) - { - AcpiOsPrintf ("There is no method currently executing\n"); - return; - } - - if (Statements) - { - NumStatements = ACPI_STRTOUL (Statements, NULL, 0); - } - - AcpiDmDisassemble (NULL, Op, NumStatements); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisassembleMethod - * - * PARAMETERS: Name - Name of control method - * - * RETURN: None - * - * DESCRIPTION: Display disassembled AML (ASL) starting from Op for the number - * of statements specified. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDbDisassembleMethod ( - char *Name) -{ - ACPI_STATUS Status; - ACPI_PARSE_OBJECT *Op; - ACPI_WALK_STATE *WalkState; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_NAMESPACE_NODE *Method; - - - Method = AcpiDbConvertToNode (Name); - if (!Method) - { - return (AE_BAD_PARAMETER); - } - - ObjDesc = Method->Object; - - Op = AcpiPsCreateScopeOp (); - if (!Op) - { - return (AE_NO_MEMORY); - } - - /* Create and initialize a new walk state */ - - WalkState = AcpiDsCreateWalkState (0, Op, NULL, NULL); - if (!WalkState) - { - return (AE_NO_MEMORY); - } - - Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, - ObjDesc->Method.AmlStart, - ObjDesc->Method.AmlLength, NULL, ACPI_IMODE_LOAD_PASS1); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Parse the AML */ - - WalkState->ParseFlags &= ~ACPI_PARSE_DELETE_TREE; - WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE; - Status = AcpiPsParseAml (WalkState); - - AcpiDmDisassemble (NULL, Op, 0); - AcpiPsDeleteParseTree (Op); - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDumpNamespace - * - * PARAMETERS: StartArg - Node to begin namespace dump - * DepthArg - Maximum tree depth to be dumped - * - * RETURN: None - * - * DESCRIPTION: Dump entire namespace or a subtree. Each node is displayed - * with type and other information. - * - ******************************************************************************/ - -void -AcpiDbDumpNamespace ( - char *StartArg, - char *DepthArg) -{ - ACPI_HANDLE SubtreeEntry = AcpiGbl_RootNode; - UINT32 MaxDepth = ACPI_UINT32_MAX; - - - /* No argument given, just start at the root and dump entire namespace */ - - if (StartArg) - { - SubtreeEntry = AcpiDbConvertToNode (StartArg); - if (!SubtreeEntry) - { - return; - } - - /* Now we can check for the depth argument */ - - if (DepthArg) - { - MaxDepth = ACPI_STRTOUL (DepthArg, NULL, 0); - } - } - - AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); - AcpiOsPrintf ("ACPI Namespace (from %4.4s (%p) subtree):\n", - ((ACPI_NAMESPACE_NODE *) SubtreeEntry)->Name.Ascii, SubtreeEntry); - - /* Display the subtree */ - - AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT); - AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_SUMMARY, MaxDepth, - ACPI_OWNER_ID_MAX, SubtreeEntry); - AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDumpNamespaceByOwner - * - * PARAMETERS: OwnerArg - Owner ID whose nodes will be displayed - * DepthArg - Maximum tree depth to be dumped - * - * RETURN: None - * - * DESCRIPTION: Dump elements of the namespace that are owned by the OwnerId. - * - ******************************************************************************/ - -void -AcpiDbDumpNamespaceByOwner ( - char *OwnerArg, - char *DepthArg) -{ - ACPI_HANDLE SubtreeEntry = AcpiGbl_RootNode; - UINT32 MaxDepth = ACPI_UINT32_MAX; - ACPI_OWNER_ID OwnerId; - - - OwnerId = (ACPI_OWNER_ID) ACPI_STRTOUL (OwnerArg, NULL, 0); - - /* Now we can check for the depth argument */ - - if (DepthArg) - { - MaxDepth = ACPI_STRTOUL (DepthArg, NULL, 0); - } - - AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); - AcpiOsPrintf ("ACPI Namespace by owner %X:\n", OwnerId); - - /* Display the subtree */ - - AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT); - AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_SUMMARY, MaxDepth, OwnerId, - SubtreeEntry); - AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbSendNotify - * - * PARAMETERS: Name - Name of ACPI object to send the notify to - * Value - Value of the notify to send. - * - * RETURN: None - * - * DESCRIPTION: Send an ACPI notification. The value specified is sent to the - * named object as an ACPI notify. - * - ******************************************************************************/ - -void -AcpiDbSendNotify ( - char *Name, - UINT32 Value) -{ - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - - - /* Translate name to an Named object */ - - Node = AcpiDbConvertToNode (Name); - if (!Node) - { - return; - } - - /* Decode Named object type */ - - switch (Node->Type) - { - case ACPI_TYPE_DEVICE: - case ACPI_TYPE_THERMAL: - - /* Send the notify */ - - Status = AcpiEvQueueNotifyRequest (Node, Value); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not queue notify\n"); - } - break; - - default: - AcpiOsPrintf ("Named object is not a device or a thermal object\n"); - break; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbSetMethodData - * - * PARAMETERS: TypeArg - L for local, A for argument - * IndexArg - which one - * ValueArg - Value to set. - * - * RETURN: None - * - * DESCRIPTION: Set a local or argument for the running control method. - * NOTE: only object supported is Number. - * - ******************************************************************************/ - -void -AcpiDbSetMethodData ( - char *TypeArg, - char *IndexArg, - char *ValueArg) -{ - char Type; - UINT32 Index; - UINT32 Value; - ACPI_WALK_STATE *WalkState; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - - - /* Validate TypeArg */ - - AcpiUtStrupr (TypeArg); - Type = TypeArg[0]; - if ((Type != 'L') && - (Type != 'A') && - (Type != 'N')) - { - AcpiOsPrintf ("Invalid SET operand: %s\n", TypeArg); - return; - } - - Value = ACPI_STRTOUL (ValueArg, NULL, 16); - - if (Type == 'N') - { - Node = AcpiDbConvertToNode (IndexArg); - if (Node->Type != ACPI_TYPE_INTEGER) - { - AcpiOsPrintf ("Can only set Integer nodes\n"); - return; - } - ObjDesc = Node->Object; - ObjDesc->Integer.Value = Value; - return; - } - - /* Get the index and value */ - - Index = ACPI_STRTOUL (IndexArg, NULL, 16); - - WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); - if (!WalkState) - { - AcpiOsPrintf ("There is no method currently executing\n"); - return; - } - - /* Create and initialize the new object */ - - ObjDesc = AcpiUtCreateIntegerObject ((UINT64) Value); - if (!ObjDesc) - { - AcpiOsPrintf ("Could not create an internal object\n"); - return; - } - - /* Store the new object into the target */ - - switch (Type) - { - case 'A': - - /* Set a method argument */ - - if (Index > ACPI_METHOD_MAX_ARG) - { - AcpiOsPrintf ("Arg%d - Invalid argument name\n", Index); - goto Cleanup; - } - - Status = AcpiDsStoreObjectToLocal (ACPI_REFCLASS_ARG, Index, ObjDesc, - WalkState); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - ObjDesc = WalkState->Arguments[Index].Object; - - AcpiOsPrintf ("Arg%d: ", Index); - AcpiDmDisplayInternalObject (ObjDesc, WalkState); - break; - - case 'L': - - /* Set a method local */ - - if (Index > ACPI_METHOD_MAX_LOCAL) - { - AcpiOsPrintf ("Local%d - Invalid local variable name\n", Index); - goto Cleanup; - } - - Status = AcpiDsStoreObjectToLocal (ACPI_REFCLASS_LOCAL, Index, ObjDesc, - WalkState); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - ObjDesc = WalkState->LocalVariables[Index].Object; - - AcpiOsPrintf ("Local%d: ", Index); - AcpiDmDisplayInternalObject (ObjDesc, WalkState); - break; - - default: - break; - } - -Cleanup: - AcpiUtRemoveReference (ObjDesc); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbWalkForSpecificObjects - * - * PARAMETERS: Callback from WalkNamespace - * - * RETURN: Status - * - * DESCRIPTION: Display short info about objects in the namespace - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDbWalkForSpecificObjects ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue) -{ - ACPI_WALK_INFO *Info = (ACPI_WALK_INFO *) Context; - ACPI_BUFFER Buffer; - ACPI_STATUS Status; - - - Info->Count++; - - /* Get and display the full pathname to this object */ - - Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - Status = AcpiNsHandleToPathname (ObjHandle, &Buffer); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle); - return (AE_OK); - } - - AcpiOsPrintf ("%32s", (char *) Buffer.Pointer); - ACPI_FREE (Buffer.Pointer); - - /* Dump short info about the object */ - - (void) AcpiNsDumpOneObject (ObjHandle, NestingLevel, Info, NULL); - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayObjects - * - * PARAMETERS: ObjTypeArg - Type of object to display - * DisplayCountArg - Max depth to display - * - * RETURN: None - * - * DESCRIPTION: Display objects in the namespace of the requested type - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDbDisplayObjects ( - char *ObjTypeArg, - char *DisplayCountArg) -{ - ACPI_WALK_INFO Info; - ACPI_OBJECT_TYPE Type; - - - /* Get the object type */ - - Type = AcpiDbMatchArgument (ObjTypeArg, AcpiDbObjectTypes); - if (Type == ACPI_TYPE_NOT_FOUND) - { - AcpiOsPrintf ("Invalid or unsupported argument\n"); - return (AE_OK); - } - - AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); - AcpiOsPrintf ( - "Objects of type [%s] defined in the current ACPI Namespace:\n", - AcpiUtGetTypeName (Type)); - - AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT); - - Info.Count = 0; - Info.OwnerId = ACPI_OWNER_ID_MAX; - Info.DebugLevel = ACPI_UINT32_MAX; - Info.DisplayType = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT; - - /* Walk the namespace from the root */ - - (void) AcpiWalkNamespace (Type, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, - AcpiDbWalkForSpecificObjects, NULL, (void *) &Info, NULL); - - AcpiOsPrintf ( - "\nFound %u objects of type [%s] in the current ACPI Namespace\n", - Info.Count, AcpiUtGetTypeName (Type)); - - AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbWalkAndMatchName - * - * PARAMETERS: Callback from WalkNamespace - * - * RETURN: Status - * - * DESCRIPTION: Find a particular name/names within the namespace. Wildcards - * are supported -- '?' matches any character. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDbWalkAndMatchName ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue) -{ - ACPI_STATUS Status; - char *RequestedName = (char *) Context; - UINT32 i; - ACPI_BUFFER Buffer; - ACPI_WALK_INFO Info; - - - /* Check for a name match */ - - for (i = 0; i < 4; i++) - { - /* Wildcard support */ - - if ((RequestedName[i] != '?') && - (RequestedName[i] != ((ACPI_NAMESPACE_NODE *) ObjHandle)->Name.Ascii[i])) - { - /* No match, just exit */ - - return (AE_OK); - } - } - - /* Get the full pathname to this object */ - - Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - Status = AcpiNsHandleToPathname (ObjHandle, &Buffer); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle); - } - else - { - Info.OwnerId = ACPI_OWNER_ID_MAX; - Info.DebugLevel = ACPI_UINT32_MAX; - Info.DisplayType = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT; - - AcpiOsPrintf ("%32s", (char *) Buffer.Pointer); - (void) AcpiNsDumpOneObject (ObjHandle, NestingLevel, &Info, NULL); - ACPI_FREE (Buffer.Pointer); - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbFindNameInNamespace - * - * PARAMETERS: NameArg - The 4-character ACPI name to find. - * wildcards are supported. - * - * RETURN: None - * - * DESCRIPTION: Search the namespace for a given name (with wildcards) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDbFindNameInNamespace ( - char *NameArg) -{ - char AcpiName[5] = "____"; - char *AcpiNamePtr = AcpiName; - - - if (ACPI_STRLEN (NameArg) > 4) - { - AcpiOsPrintf ("Name must be no longer than 4 characters\n"); - return (AE_OK); - } - - /* Pad out name with underscores as necessary to create a 4-char name */ - - AcpiUtStrupr (NameArg); - while (*NameArg) - { - *AcpiNamePtr = *NameArg; - AcpiNamePtr++; - NameArg++; - } - - /* Walk the namespace from the root */ - - (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, - AcpiDbWalkAndMatchName, NULL, AcpiName, NULL); - - AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbSetScope - * - * PARAMETERS: Name - New scope path - * - * RETURN: Status - * - * DESCRIPTION: Set the "current scope" as maintained by this utility. - * The scope is used as a prefix to ACPI paths. - * - ******************************************************************************/ - -void -AcpiDbSetScope ( - char *Name) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - - - if (!Name || Name[0] == 0) - { - AcpiOsPrintf ("Current scope: %s\n", AcpiGbl_DbScopeBuf); - return; - } - - AcpiDbPrepNamestring (Name); - - if (Name[0] == '\\') - { - /* Validate new scope from the root */ - - Status = AcpiNsGetNode (AcpiGbl_RootNode, Name, ACPI_NS_NO_UPSEARCH, - &Node); - if (ACPI_FAILURE (Status)) - { - goto ErrorExit; - } - - ACPI_STRCPY (AcpiGbl_DbScopeBuf, Name); - ACPI_STRCAT (AcpiGbl_DbScopeBuf, "\\"); - } - else - { - /* Validate new scope relative to old scope */ - - Status = AcpiNsGetNode (AcpiGbl_DbScopeNode, Name, ACPI_NS_NO_UPSEARCH, - &Node); - if (ACPI_FAILURE (Status)) - { - goto ErrorExit; - } - - ACPI_STRCAT (AcpiGbl_DbScopeBuf, Name); - ACPI_STRCAT (AcpiGbl_DbScopeBuf, "\\"); - } - - AcpiGbl_DbScopeNode = Node; - AcpiOsPrintf ("New scope: %s\n", AcpiGbl_DbScopeBuf); - return; - -ErrorExit: - - AcpiOsPrintf ("Could not attach scope: %s, %s\n", - Name, AcpiFormatException (Status)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmCompareAmlResources - * - * PARAMETERS: Aml1Buffer - Contains first resource list - * Aml1BufferLength - Length of first resource list - * Aml2Buffer - Contains second resource list - * Aml2BufferLength - Length of second resource list - * - * RETURN: None - * - * DESCRIPTION: Compare two AML resource lists, descriptor by descriptor (in - * order to isolate a miscompare to an individual resource) - * - ******************************************************************************/ - -static void -AcpiDmCompareAmlResources ( - UINT8 *Aml1Buffer, - ACPI_RSDESC_SIZE Aml1BufferLength, - UINT8 *Aml2Buffer, - ACPI_RSDESC_SIZE Aml2BufferLength) -{ - UINT8 *Aml1; - UINT8 *Aml2; - ACPI_RSDESC_SIZE Aml1Length; - ACPI_RSDESC_SIZE Aml2Length; - ACPI_RSDESC_SIZE Offset = 0; - UINT8 ResourceType; - UINT32 Count = 0; - - - /* Compare overall buffer sizes (may be different due to size rounding) */ - - if (Aml1BufferLength != Aml2BufferLength) - { - AcpiOsPrintf ( - "**** Buffer length mismatch in converted AML: original %X new %X ****\n", - Aml1BufferLength, Aml2BufferLength); - } - - Aml1 = Aml1Buffer; - Aml2 = Aml2Buffer; - - /* Walk the descriptor lists, comparing each descriptor */ - - while (Aml1 < (Aml1Buffer + Aml1BufferLength)) - { - /* Get the lengths of each descriptor */ - - Aml1Length = AcpiUtGetDescriptorLength (Aml1); - Aml2Length = AcpiUtGetDescriptorLength (Aml2); - ResourceType = AcpiUtGetResourceType (Aml1); - - /* Check for descriptor length match */ - - if (Aml1Length != Aml2Length) - { - AcpiOsPrintf ( - "**** Length mismatch in descriptor [%.2X] type %2.2X, Offset %8.8X L1 %X L2 %X ****\n", - Count, ResourceType, Offset, Aml1Length, Aml2Length); - } - - /* Check for descriptor byte match */ - - else if (ACPI_MEMCMP (Aml1, Aml2, Aml1Length)) - { - AcpiOsPrintf ( - "**** Data mismatch in descriptor [%.2X] type %2.2X, Offset %8.8X ****\n", - Count, ResourceType, Offset); - } - - /* Exit on EndTag descriptor */ - - if (ResourceType == ACPI_RESOURCE_NAME_END_TAG) - { - return; - } - - /* Point to next descriptor in each buffer */ - - Count++; - Offset += Aml1Length; - Aml1 += Aml1Length; - Aml2 += Aml2Length; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmTestResourceConversion - * - * PARAMETERS: Node - Parent device node - * Name - resource method name (_CRS) - * - * RETURN: Status - * - * DESCRIPTION: Compare the original AML with a conversion of the AML to - * internal resource list, then back to AML. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDmTestResourceConversion ( - ACPI_NAMESPACE_NODE *Node, - char *Name) -{ - ACPI_STATUS Status; - ACPI_BUFFER ReturnObj; - ACPI_BUFFER ResourceObj; - ACPI_BUFFER NewAml; - ACPI_OBJECT *OriginalAml; - - - AcpiOsPrintf ("Resource Conversion Comparison:\n"); - - NewAml.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - ReturnObj.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - ResourceObj.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - - /* Get the original _CRS AML resource template */ - - Status = AcpiEvaluateObject (Node, Name, NULL, &ReturnObj); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not obtain %s: %s\n", - Name, AcpiFormatException (Status)); - return (Status); - } - - /* Get the AML resource template, converted to internal resource structs */ - - Status = AcpiGetCurrentResources (Node, &ResourceObj); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n", - AcpiFormatException (Status)); - goto Exit1; - } - - /* Convert internal resource list to external AML resource template */ - - Status = AcpiRsCreateAmlResources (ResourceObj.Pointer, &NewAml); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("AcpiRsCreateAmlResources failed: %s\n", - AcpiFormatException (Status)); - goto Exit2; - } - - /* Compare original AML to the newly created AML resource list */ - - OriginalAml = ReturnObj.Pointer; - - AcpiDmCompareAmlResources ( - OriginalAml->Buffer.Pointer, (ACPI_RSDESC_SIZE) OriginalAml->Buffer.Length, - NewAml.Pointer, (ACPI_RSDESC_SIZE) NewAml.Length); - - /* Cleanup and exit */ - - ACPI_FREE (NewAml.Pointer); -Exit2: - ACPI_FREE (ResourceObj.Pointer); -Exit1: - ACPI_FREE (ReturnObj.Pointer); - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayResources - * - * PARAMETERS: ObjectArg - String with hex value of the object - * - * RETURN: None - * - * DESCRIPTION: Display the resource objects associated with a device. - * - ******************************************************************************/ - -void -AcpiDbDisplayResources ( - char *ObjectArg) -{ - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - ACPI_BUFFER ReturnObj; - - - AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT); - AcpiDbgLevel |= ACPI_LV_RESOURCES; - - /* Convert string to object pointer */ - - Node = AcpiDbConvertToNode (ObjectArg); - if (!Node) - { - return; - } - - /* Prepare for a return object of arbitrary size */ - - ReturnObj.Pointer = AcpiGbl_DbBuffer; - ReturnObj.Length = ACPI_DEBUG_BUFFER_SIZE; - - /* _PRT */ - - AcpiOsPrintf ("Evaluating _PRT\n"); - - /* Check if _PRT exists */ - - Status = AcpiEvaluateObject (Node, METHOD_NAME__PRT, NULL, &ReturnObj); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not obtain _PRT: %s\n", - AcpiFormatException (Status)); - goto GetCrs; - } - - ReturnObj.Pointer = AcpiGbl_DbBuffer; - ReturnObj.Length = ACPI_DEBUG_BUFFER_SIZE; - - Status = AcpiGetIrqRoutingTable (Node, &ReturnObj); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("GetIrqRoutingTable failed: %s\n", - AcpiFormatException (Status)); - goto GetCrs; - } - - AcpiRsDumpIrqList (ACPI_CAST_PTR (UINT8, AcpiGbl_DbBuffer)); - - - /* _CRS */ - -GetCrs: - AcpiOsPrintf ("Evaluating _CRS\n"); - - ReturnObj.Pointer = AcpiGbl_DbBuffer; - ReturnObj.Length = ACPI_DEBUG_BUFFER_SIZE; - - /* Check if _CRS exists */ - - Status = AcpiEvaluateObject (Node, METHOD_NAME__CRS, NULL, &ReturnObj); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not obtain _CRS: %s\n", - AcpiFormatException (Status)); - goto GetPrs; - } - - /* Get the _CRS resource list */ - - ReturnObj.Pointer = AcpiGbl_DbBuffer; - ReturnObj.Length = ACPI_DEBUG_BUFFER_SIZE; - - Status = AcpiGetCurrentResources (Node, &ReturnObj); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("AcpiGetCurrentResources failed: %s\n", - AcpiFormatException (Status)); - goto GetPrs; - } - - /* Dump the _CRS resource list */ - - AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE, - ReturnObj.Pointer)); - - /* - * Perform comparison of original AML to newly created AML. This tests both - * the AML->Resource conversion and the Resource->Aml conversion. - */ - Status = AcpiDmTestResourceConversion (Node, METHOD_NAME__CRS); - - /* Execute _SRS with the resource list */ - - Status = AcpiSetCurrentResources (Node, &ReturnObj); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("AcpiSetCurrentResources failed: %s\n", - AcpiFormatException (Status)); - goto GetPrs; - } - - - /* _PRS */ - -GetPrs: - AcpiOsPrintf ("Evaluating _PRS\n"); - - ReturnObj.Pointer = AcpiGbl_DbBuffer; - ReturnObj.Length = ACPI_DEBUG_BUFFER_SIZE; - - /* Check if _PRS exists */ - - Status = AcpiEvaluateObject (Node, METHOD_NAME__PRS, NULL, &ReturnObj); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not obtain _PRS: %s\n", - AcpiFormatException (Status)); - goto Cleanup; - } - - ReturnObj.Pointer = AcpiGbl_DbBuffer; - ReturnObj.Length = ACPI_DEBUG_BUFFER_SIZE; - - Status = AcpiGetPossibleResources (Node, &ReturnObj); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("AcpiGetPossibleResources failed: %s\n", - AcpiFormatException (Status)); - goto Cleanup; - } - - AcpiRsDumpResourceList (ACPI_CAST_PTR (ACPI_RESOURCE, AcpiGbl_DbBuffer)); - -Cleanup: - - AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); - return; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbIntegrityWalk - * - * PARAMETERS: Callback from WalkNamespace - * - * RETURN: Status - * - * DESCRIPTION: Examine one NS node for valid values. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDbIntegrityWalk ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue) -{ - ACPI_INTEGRITY_INFO *Info = (ACPI_INTEGRITY_INFO *) Context; - ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; - ACPI_OPERAND_OBJECT *Object; - BOOLEAN Alias = TRUE; - - - Info->Nodes++; - - /* Verify the NS node, and dereference aliases */ - - while (Alias) - { - if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED) - { - AcpiOsPrintf ("Invalid Descriptor Type for Node %p [%s] - is %2.2X should be %2.2X\n", - Node, AcpiUtGetDescriptorName (Node), ACPI_GET_DESCRIPTOR_TYPE (Node), - ACPI_DESC_TYPE_NAMED); - return (AE_OK); - } - - if ((Node->Type == ACPI_TYPE_LOCAL_ALIAS) || - (Node->Type == ACPI_TYPE_LOCAL_METHOD_ALIAS)) - { - Node = (ACPI_NAMESPACE_NODE *) Node->Object; - } - else - { - Alias = FALSE; - } - } - - if (Node->Type > ACPI_TYPE_LOCAL_MAX) - { - AcpiOsPrintf ("Invalid Object Type for Node %p, Type = %X\n", - Node, Node->Type); - return (AE_OK); - } - - if (!AcpiUtValidAcpiName (Node->Name.Integer)) - { - AcpiOsPrintf ("Invalid AcpiName for Node %p\n", Node); - return (AE_OK); - } - - Object = AcpiNsGetAttachedObject (Node); - if (Object) - { - Info->Objects++; - if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND) - { - AcpiOsPrintf ("Invalid Descriptor Type for Object %p [%s]\n", - Object, AcpiUtGetDescriptorName (Object)); - } - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbCheckIntegrity - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Check entire namespace for data structure integrity - * - ******************************************************************************/ - -void -AcpiDbCheckIntegrity ( - void) -{ - ACPI_INTEGRITY_INFO Info = {0,0}; - - /* Search all nodes in namespace */ - - (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, - AcpiDbIntegrityWalk, NULL, (void *) &Info, NULL); - - AcpiOsPrintf ("Verified %d namespace nodes with %d Objects\n", - Info.Nodes, Info.Objects); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbGenerateGpe - * - * PARAMETERS: GpeArg - Raw GPE number, ascii string - * BlockArg - GPE block number, ascii string - * 0 or 1 for FADT GPE blocks - * - * RETURN: None - * - * DESCRIPTION: Generate a GPE - * - ******************************************************************************/ - -void -AcpiDbGenerateGpe ( - char *GpeArg, - char *BlockArg) -{ - UINT32 BlockNumber; - UINT32 GpeNumber; - ACPI_GPE_EVENT_INFO *GpeEventInfo; - - - GpeNumber = ACPI_STRTOUL (GpeArg, NULL, 0); - BlockNumber = ACPI_STRTOUL (BlockArg, NULL, 0); - - - GpeEventInfo = AcpiEvGetGpeEventInfo (ACPI_TO_POINTER (BlockNumber), - GpeNumber); - if (!GpeEventInfo) - { - AcpiOsPrintf ("Invalid GPE\n"); - return; - } - - (void) AcpiEvGpeDispatch (GpeEventInfo, GpeNumber); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbBusWalk - * - * PARAMETERS: Callback from WalkNamespace - * - * RETURN: Status - * - * DESCRIPTION: Display info about device objects that have a corresponding - * _PRT method. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDbBusWalk ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue) -{ - ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; - ACPI_STATUS Status; - ACPI_BUFFER Buffer; - ACPI_NAMESPACE_NODE *TempNode; - ACPI_DEVICE_INFO *Info; - UINT32 i; - - - if ((Node->Type != ACPI_TYPE_DEVICE) && - (Node->Type != ACPI_TYPE_PROCESSOR)) - { - return (AE_OK); - } - - /* Exit if there is no _PRT under this device */ - - Status = AcpiGetHandle (Node, METHOD_NAME__PRT, - ACPI_CAST_PTR (ACPI_HANDLE, &TempNode)); - if (ACPI_FAILURE (Status)) - { - return (AE_OK); - } - - /* Get the full path to this device object */ - - Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - Status = AcpiNsHandleToPathname (ObjHandle, &Buffer); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle); - return (AE_OK); - } - - Status = AcpiGetObjectInfo (ObjHandle, &Info); - if (ACPI_FAILURE (Status)) - { - return (AE_OK); - } - - /* Display the full path */ - - AcpiOsPrintf ("%-32s Type %X", (char *) Buffer.Pointer, Node->Type); - ACPI_FREE (Buffer.Pointer); - - if (Info->Flags & ACPI_PCI_ROOT_BRIDGE) - { - AcpiOsPrintf (" - Is PCI Root Bridge"); - } - AcpiOsPrintf ("\n"); - - /* _PRT info */ - - AcpiOsPrintf ("_PRT: %p\n", TempNode); - - /* Dump _ADR, _HID, _UID, _CID */ - - if (Info->Valid & ACPI_VALID_ADR) - { - AcpiOsPrintf ("_ADR: %8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Info->Address)); - } - else - { - AcpiOsPrintf ("_ADR: \n"); - } - - if (Info->Valid & ACPI_VALID_HID) - { - AcpiOsPrintf ("_HID: %s\n", Info->HardwareId.String); - } - else - { - AcpiOsPrintf ("_HID: \n"); - } - - if (Info->Valid & ACPI_VALID_UID) - { - AcpiOsPrintf ("_UID: %s\n", Info->UniqueId.String); - } - else - { - AcpiOsPrintf ("_UID: \n"); - } - - if (Info->Valid & ACPI_VALID_CID) - { - for (i = 0; i < Info->CompatibleIdList.Count; i++) - { - AcpiOsPrintf ("_CID: %s\n", - Info->CompatibleIdList.Ids[i].String); - } - } - else - { - AcpiOsPrintf ("_CID: \n"); - } - - ACPI_FREE (Info); - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbGetBusInfo - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Display info about system busses. - * - ******************************************************************************/ - -void -AcpiDbGetBusInfo ( - void) -{ - /* Search all nodes in namespace */ - - (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, - AcpiDbBusWalk, NULL, NULL, NULL); -} - -#endif /* ACPI_DEBUGGER */ diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbdisply.c b/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbdisply.c deleted file mode 100644 index fbcb8f10d..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbdisply.c +++ /dev/null @@ -1,971 +0,0 @@ -/******************************************************************************* - * - * Module Name: dbdisply - debug display commands - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "amlcode.h" -#include "acdispat.h" -#include "acnamesp.h" -#include "acparser.h" -#include "acinterp.h" -#include "acdebug.h" -#include "acdisasm.h" - - -#ifdef ACPI_DEBUGGER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dbdisply") - -/* Local prototypes */ - -static void -AcpiDbDumpParserDescriptor ( - ACPI_PARSE_OBJECT *Op); - -static void * -AcpiDbGetPointer ( - void *Target); - - -/******************************************************************************* - * - * FUNCTION: AcpiDbGetPointer - * - * PARAMETERS: Target - Pointer to string to be converted - * - * RETURN: Converted pointer - * - * DESCRIPTION: Convert an ascii pointer value to a real value - * - ******************************************************************************/ - -static void * -AcpiDbGetPointer ( - void *Target) -{ - void *ObjPtr; - - - ObjPtr = ACPI_TO_POINTER (ACPI_STRTOUL (Target, NULL, 16)); - return (ObjPtr); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDumpParserDescriptor - * - * PARAMETERS: Op - A parser Op descriptor - * - * RETURN: None - * - * DESCRIPTION: Display a formatted parser object - * - ******************************************************************************/ - -static void -AcpiDbDumpParserDescriptor ( - ACPI_PARSE_OBJECT *Op) -{ - const ACPI_OPCODE_INFO *Info; - - - Info = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); - - AcpiOsPrintf ("Parser Op Descriptor:\n"); - AcpiOsPrintf ("%20.20s : %4.4X\n", "Opcode", Op->Common.AmlOpcode); - - ACPI_DEBUG_ONLY_MEMBERS (AcpiOsPrintf ("%20.20s : %s\n", "Opcode Name", - Info->Name)); - - AcpiOsPrintf ("%20.20s : %p\n", "Value/ArgList", Op->Common.Value.Arg); - AcpiOsPrintf ("%20.20s : %p\n", "Parent", Op->Common.Parent); - AcpiOsPrintf ("%20.20s : %p\n", "NextOp", Op->Common.Next); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDecodeAndDisplayObject - * - * PARAMETERS: Target - String with object to be displayed. Names - * and hex pointers are supported. - * OutputType - Byte, Word, Dword, or Qword (B|W|D|Q) - * - * RETURN: None - * - * DESCRIPTION: Display a formatted ACPI object - * - ******************************************************************************/ - -void -AcpiDbDecodeAndDisplayObject ( - char *Target, - char *OutputType) -{ - void *ObjPtr; - ACPI_NAMESPACE_NODE *Node; - ACPI_OPERAND_OBJECT *ObjDesc; - UINT32 Display = DB_BYTE_DISPLAY; - char Buffer[80]; - ACPI_BUFFER RetBuf; - ACPI_STATUS Status; - UINT32 Size; - - - if (!Target) - { - return; - } - - /* Decode the output type */ - - if (OutputType) - { - AcpiUtStrupr (OutputType); - if (OutputType[0] == 'W') - { - Display = DB_WORD_DISPLAY; - } - else if (OutputType[0] == 'D') - { - Display = DB_DWORD_DISPLAY; - } - else if (OutputType[0] == 'Q') - { - Display = DB_QWORD_DISPLAY; - } - } - - RetBuf.Length = sizeof (Buffer); - RetBuf.Pointer = Buffer; - - /* Differentiate between a number and a name */ - - if ((Target[0] >= 0x30) && (Target[0] <= 0x39)) - { - ObjPtr = AcpiDbGetPointer (Target); - if (!AcpiOsReadable (ObjPtr, 16)) - { - AcpiOsPrintf ("Address %p is invalid in this address space\n", - ObjPtr); - return; - } - - /* Decode the object type */ - - switch (ACPI_GET_DESCRIPTOR_TYPE (ObjPtr)) - { - case ACPI_DESC_TYPE_NAMED: - - /* This is a namespace Node */ - - if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_NAMESPACE_NODE))) - { - AcpiOsPrintf ( - "Cannot read entire Named object at address %p\n", ObjPtr); - return; - } - - Node = ObjPtr; - goto DumpNode; - - - case ACPI_DESC_TYPE_OPERAND: - - /* This is a ACPI OPERAND OBJECT */ - - if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_OPERAND_OBJECT))) - { - AcpiOsPrintf ("Cannot read entire ACPI object at address %p\n", - ObjPtr); - return; - } - - AcpiUtDumpBuffer (ObjPtr, sizeof (ACPI_OPERAND_OBJECT), Display, - ACPI_UINT32_MAX); - AcpiExDumpObjectDescriptor (ObjPtr, 1); - break; - - - case ACPI_DESC_TYPE_PARSER: - - /* This is a Parser Op object */ - - if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_PARSE_OBJECT))) - { - AcpiOsPrintf ( - "Cannot read entire Parser object at address %p\n", ObjPtr); - return; - } - - AcpiUtDumpBuffer (ObjPtr, sizeof (ACPI_PARSE_OBJECT), Display, - ACPI_UINT32_MAX); - AcpiDbDumpParserDescriptor ((ACPI_PARSE_OBJECT *) ObjPtr); - break; - - - default: - - /* Is not a recognizeable object */ - - Size = 16; - if (AcpiOsReadable (ObjPtr, 64)) - { - Size = 64; - } - - /* Just dump some memory */ - - AcpiUtDumpBuffer (ObjPtr, Size, Display, ACPI_UINT32_MAX); - break; - } - - return; - } - - /* The parameter is a name string that must be resolved to a Named obj */ - - Node = AcpiDbLocalNsLookup (Target); - if (!Node) - { - return; - } - - -DumpNode: - /* Now dump the NS node */ - - Status = AcpiGetName (Node, ACPI_FULL_PATHNAME, &RetBuf); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not convert name to pathname\n"); - } - - else - { - AcpiOsPrintf ("Object (%p) Pathname: %s\n", - Node, (char *) RetBuf.Pointer); - } - - if (!AcpiOsReadable (Node, sizeof (ACPI_NAMESPACE_NODE))) - { - AcpiOsPrintf ("Invalid Named object at address %p\n", Node); - return; - } - - AcpiUtDumpBuffer ((void *) Node, sizeof (ACPI_NAMESPACE_NODE), - Display, ACPI_UINT32_MAX); - AcpiExDumpNamespaceNode (Node, 1); - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (ObjDesc) - { - AcpiOsPrintf ("\nAttached Object (%p):\n", ObjDesc); - if (!AcpiOsReadable (ObjDesc, sizeof (ACPI_OPERAND_OBJECT))) - { - AcpiOsPrintf ("Invalid internal ACPI Object at address %p\n", - ObjDesc); - return; - } - - AcpiUtDumpBuffer ((void *) ObjDesc, sizeof (ACPI_OPERAND_OBJECT), - Display, ACPI_UINT32_MAX); - AcpiExDumpObjectDescriptor (ObjDesc, 1); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayMethodInfo - * - * PARAMETERS: StartOp - Root of the control method parse tree - * - * RETURN: None - * - * DESCRIPTION: Display information about the current method - * - ******************************************************************************/ - -void -AcpiDbDisplayMethodInfo ( - ACPI_PARSE_OBJECT *StartOp) -{ - ACPI_WALK_STATE *WalkState; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_NAMESPACE_NODE *Node; - ACPI_PARSE_OBJECT *RootOp; - ACPI_PARSE_OBJECT *Op; - const ACPI_OPCODE_INFO *OpInfo; - UINT32 NumOps = 0; - UINT32 NumOperands = 0; - UINT32 NumOperators = 0; - UINT32 NumRemainingOps = 0; - UINT32 NumRemainingOperands = 0; - UINT32 NumRemainingOperators = 0; - BOOLEAN CountRemaining = FALSE; - - - WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); - if (!WalkState) - { - AcpiOsPrintf ("There is no method currently executing\n"); - return; - } - - ObjDesc = WalkState->MethodDesc; - Node = WalkState->MethodNode; - - AcpiOsPrintf ("Currently executing control method is [%4.4s]\n", - AcpiUtGetNodeName (Node)); - AcpiOsPrintf ("%X Arguments, SyncLevel = %X\n", - (UINT32) ObjDesc->Method.ParamCount, - (UINT32) ObjDesc->Method.SyncLevel); - - - RootOp = StartOp; - while (RootOp->Common.Parent) - { - RootOp = RootOp->Common.Parent; - } - - Op = RootOp; - - while (Op) - { - if (Op == StartOp) - { - CountRemaining = TRUE; - } - - NumOps++; - if (CountRemaining) - { - NumRemainingOps++; - } - - /* Decode the opcode */ - - OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); - switch (OpInfo->Class) - { - case AML_CLASS_ARGUMENT: - if (CountRemaining) - { - NumRemainingOperands++; - } - - NumOperands++; - break; - - case AML_CLASS_UNKNOWN: - /* Bad opcode or ASCII character */ - - continue; - - default: - if (CountRemaining) - { - NumRemainingOperators++; - } - - NumOperators++; - break; - } - - Op = AcpiPsGetDepthNext (StartOp, Op); - } - - AcpiOsPrintf ( - "Method contains: %X AML Opcodes - %X Operators, %X Operands\n", - NumOps, NumOperators, NumOperands); - - AcpiOsPrintf ( - "Remaining to execute: %X AML Opcodes - %X Operators, %X Operands\n", - NumRemainingOps, NumRemainingOperators, NumRemainingOperands); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayLocals - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Display all locals for the currently running control method - * - ******************************************************************************/ - -void -AcpiDbDisplayLocals ( - void) -{ - ACPI_WALK_STATE *WalkState; - - - WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); - if (!WalkState) - { - AcpiOsPrintf ("There is no method currently executing\n"); - return; - } - - AcpiDmDisplayLocals (WalkState); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayArguments - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Display all arguments for the currently running control method - * - ******************************************************************************/ - -void -AcpiDbDisplayArguments ( - void) -{ - ACPI_WALK_STATE *WalkState; - - - WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); - if (!WalkState) - { - AcpiOsPrintf ("There is no method currently executing\n"); - return; - } - - AcpiDmDisplayArguments (WalkState); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayResults - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Display current contents of a method result stack - * - ******************************************************************************/ - -void -AcpiDbDisplayResults ( - void) -{ - UINT32 i; - ACPI_WALK_STATE *WalkState; - ACPI_OPERAND_OBJECT *ObjDesc; - UINT32 ResultCount = 0; - ACPI_NAMESPACE_NODE *Node; - ACPI_GENERIC_STATE *Frame; - UINT32 Index; /* Index onto current frame */ - - - WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); - if (!WalkState) - { - AcpiOsPrintf ("There is no method currently executing\n"); - return; - } - - ObjDesc = WalkState->MethodDesc; - Node = WalkState->MethodNode; - - if (WalkState->Results) - { - ResultCount = WalkState->ResultCount; - } - - AcpiOsPrintf ("Method [%4.4s] has %X stacked result objects\n", - AcpiUtGetNodeName (Node), ResultCount); - - /* From the top element of result stack */ - - Frame = WalkState->Results; - Index = (ResultCount - 1) % ACPI_RESULTS_FRAME_OBJ_NUM; - - for (i = 0; i < ResultCount; i++) - { - ObjDesc = Frame->Results.ObjDesc[Index]; - AcpiOsPrintf ("Result%d: ", i); - AcpiDmDisplayInternalObject (ObjDesc, WalkState); - if (Index == 0) - { - Frame = Frame->Results.Next; - Index = ACPI_RESULTS_FRAME_OBJ_NUM; - } - Index--; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayCallingTree - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Display current calling tree of nested control methods - * - ******************************************************************************/ - -void -AcpiDbDisplayCallingTree ( - void) -{ - ACPI_WALK_STATE *WalkState; - ACPI_NAMESPACE_NODE *Node; - - - WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); - if (!WalkState) - { - AcpiOsPrintf ("There is no method currently executing\n"); - return; - } - - Node = WalkState->MethodNode; - AcpiOsPrintf ("Current Control Method Call Tree\n"); - - while (WalkState) - { - Node = WalkState->MethodNode; - - AcpiOsPrintf (" [%4.4s]\n", AcpiUtGetNodeName (Node)); - - WalkState = WalkState->Next; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayObjectType - * - * PARAMETERS: ObjectArg - User entered NS node handle - * - * RETURN: None - * - * DESCRIPTION: Display type of an arbitrary NS node - * - ******************************************************************************/ - -void -AcpiDbDisplayObjectType ( - char *ObjectArg) -{ - ACPI_HANDLE Handle; - ACPI_DEVICE_INFO *Info; - ACPI_STATUS Status; - UINT32 i; - - - Handle = ACPI_TO_POINTER (ACPI_STRTOUL (ObjectArg, NULL, 16)); - - Status = AcpiGetObjectInfo (Handle, &Info); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not get object info, %s\n", - AcpiFormatException (Status)); - return; - } - - AcpiOsPrintf ("ADR: %8.8X%8.8X, STA: %8.8X, Flags: %X\n", - ACPI_FORMAT_UINT64 (Info->Address), - Info->CurrentStatus, Info->Flags); - - AcpiOsPrintf ("S1D-%2.2X S2D-%2.2X S3D-%2.2X S4D-%2.2X\n", - Info->HighestDstates[0], Info->HighestDstates[1], - Info->HighestDstates[2], Info->HighestDstates[3]); - - AcpiOsPrintf ("S0W-%2.2X S1W-%2.2X S2W-%2.2X S3W-%2.2X S4W-%2.2X\n", - Info->LowestDstates[0], Info->LowestDstates[1], - Info->LowestDstates[2], Info->LowestDstates[3], - Info->LowestDstates[4]); - - if (Info->Valid & ACPI_VALID_HID) - { - AcpiOsPrintf ("HID: %s\n", Info->HardwareId.String); - } - if (Info->Valid & ACPI_VALID_UID) - { - AcpiOsPrintf ("UID: %s\n", Info->UniqueId.String); - } - if (Info->Valid & ACPI_VALID_CID) - { - for (i = 0; i < Info->CompatibleIdList.Count; i++) - { - AcpiOsPrintf ("CID %d: %s\n", i, - Info->CompatibleIdList.Ids[i].String); - } - } - - ACPI_FREE (Info); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayResultObject - * - * PARAMETERS: ObjDesc - Object to be displayed - * WalkState - Current walk state - * - * RETURN: None - * - * DESCRIPTION: Display the result of an AML opcode - * - * Note: Curently only displays the result object if we are single stepping. - * However, this output may be useful in other contexts and could be enabled - * to do so if needed. - * - ******************************************************************************/ - -void -AcpiDbDisplayResultObject ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_WALK_STATE *WalkState) -{ - - /* Only display if single stepping */ - - if (!AcpiGbl_CmSingleStep) - { - return; - } - - AcpiOsPrintf ("ResultObj: "); - AcpiDmDisplayInternalObject (ObjDesc, WalkState); - AcpiOsPrintf ("\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayArgumentObject - * - * PARAMETERS: ObjDesc - Object to be displayed - * WalkState - Current walk state - * - * RETURN: None - * - * DESCRIPTION: Display the result of an AML opcode - * - ******************************************************************************/ - -void -AcpiDbDisplayArgumentObject ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_WALK_STATE *WalkState) -{ - - if (!AcpiGbl_CmSingleStep) - { - return; - } - - AcpiOsPrintf ("ArgObj: "); - AcpiDmDisplayInternalObject (ObjDesc, WalkState); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayGpes - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Display the current GPE structures - * - ******************************************************************************/ - -void -AcpiDbDisplayGpes ( - void) -{ - ACPI_GPE_BLOCK_INFO *GpeBlock; - ACPI_GPE_XRUPT_INFO *GpeXruptInfo; - ACPI_GPE_EVENT_INFO *GpeEventInfo; - ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; - UINT32 GpeIndex; - UINT32 Block = 0; - UINT32 i; - UINT32 j; - char Buffer[80]; - ACPI_BUFFER RetBuf; - ACPI_STATUS Status; - - - RetBuf.Length = sizeof (Buffer); - RetBuf.Pointer = Buffer; - - Block = 0; - - /* Walk the GPE lists */ - - GpeXruptInfo = AcpiGbl_GpeXruptListHead; - while (GpeXruptInfo) - { - GpeBlock = GpeXruptInfo->GpeBlockListHead; - while (GpeBlock) - { - Status = AcpiGetName (GpeBlock->Node, ACPI_FULL_PATHNAME, &RetBuf); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not convert name to pathname\n"); - } - - AcpiOsPrintf ("\nBlock %d - Info %p DeviceNode %p [%s]\n", - Block, GpeBlock, GpeBlock->Node, Buffer); - - AcpiOsPrintf (" Registers: %u (%u GPEs)\n", - GpeBlock->RegisterCount, - ACPI_MUL_8 (GpeBlock->RegisterCount)); - - AcpiOsPrintf (" GPE range: 0x%X to 0x%X\n", - GpeBlock->BlockBaseNumber, - GpeBlock->BlockBaseNumber + - (GpeBlock->RegisterCount * 8) -1); - - AcpiOsPrintf ( - " RegisterInfo: %p Status %8.8X%8.8X Enable %8.8X%8.8X\n", - GpeBlock->RegisterInfo, - ACPI_FORMAT_UINT64 (GpeBlock->RegisterInfo->StatusAddress.Address), - ACPI_FORMAT_UINT64 (GpeBlock->RegisterInfo->EnableAddress.Address)); - - AcpiOsPrintf (" EventInfo: %p\n", GpeBlock->EventInfo); - - /* Examine each GPE Register within the block */ - - for (i = 0; i < GpeBlock->RegisterCount; i++) - { - GpeRegisterInfo = &GpeBlock->RegisterInfo[i]; - - AcpiOsPrintf ( - " Reg %u: WakeEnable %2.2X, RunEnable %2.2X Status %8.8X%8.8X Enable %8.8X%8.8X\n", - i, GpeRegisterInfo->EnableForWake, - GpeRegisterInfo->EnableForRun, - ACPI_FORMAT_UINT64 (GpeRegisterInfo->StatusAddress.Address), - ACPI_FORMAT_UINT64 (GpeRegisterInfo->EnableAddress.Address)); - - /* Now look at the individual GPEs in this byte register */ - - for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) - { - GpeIndex = (i * ACPI_GPE_REGISTER_WIDTH) + j; - GpeEventInfo = &GpeBlock->EventInfo[GpeIndex]; - - if (!(GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK)) - { - /* This GPE is not used (no method or handler) */ - - continue; - } - - AcpiOsPrintf ( - " GPE %.3X: %p Flags %2.2X: ", - GpeBlock->BlockBaseNumber + GpeIndex, - GpeEventInfo, - GpeEventInfo->Flags); - - if (GpeEventInfo->Flags & ACPI_GPE_LEVEL_TRIGGERED) - { - AcpiOsPrintf ("Level, "); - } - else - { - AcpiOsPrintf ("Edge, "); - } - - switch (GpeEventInfo->Flags & ACPI_GPE_TYPE_MASK) - { - case ACPI_GPE_TYPE_WAKE: - AcpiOsPrintf ("WakeOnly: "); - break; - case ACPI_GPE_TYPE_RUNTIME: - AcpiOsPrintf (" RunOnly: "); - break; - case ACPI_GPE_TYPE_WAKE_RUN: - AcpiOsPrintf (" WakeRun: "); - break; - default: - AcpiOsPrintf (" NotUsed: "); - break; - } - - if (GpeEventInfo->Flags & ACPI_GPE_WAKE_ENABLED) - { - AcpiOsPrintf ("[Wake 1 "); - } - else - { - AcpiOsPrintf ("[Wake 0 "); - } - - if (GpeEventInfo->Flags & ACPI_GPE_RUN_ENABLED) - { - AcpiOsPrintf ("Run 1], "); - } - else - { - AcpiOsPrintf ("Run 0], "); - } - - switch (GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) - { - case ACPI_GPE_DISPATCH_NOT_USED: - AcpiOsPrintf ("NotUsed"); - break; - case ACPI_GPE_DISPATCH_HANDLER: - AcpiOsPrintf ("Handler"); - break; - case ACPI_GPE_DISPATCH_METHOD: - AcpiOsPrintf ("Method"); - break; - default: - AcpiOsPrintf ("UNKNOWN: %X", - GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK); - break; - } - - AcpiOsPrintf ("\n"); - } - } - Block++; - GpeBlock = GpeBlock->Next; - } - GpeXruptInfo = GpeXruptInfo->Next; - } -} - -#endif /* ACPI_DEBUGGER */ - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbexec.c b/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbexec.c deleted file mode 100644 index 7990890fc..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbexec.c +++ /dev/null @@ -1,793 +0,0 @@ -/******************************************************************************* - * - * Module Name: dbexec - debugger control method execution - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acdebug.h" -#include "acnamesp.h" - -#ifdef ACPI_DEBUGGER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dbexec") - - -static ACPI_DB_METHOD_INFO AcpiGbl_DbMethodInfo; - -/* Local prototypes */ - -static ACPI_STATUS -AcpiDbExecuteMethod ( - ACPI_DB_METHOD_INFO *Info, - ACPI_BUFFER *ReturnObj); - -static void -AcpiDbExecuteSetup ( - ACPI_DB_METHOD_INFO *Info); - -static UINT32 -AcpiDbGetOutstandingAllocations ( - void); - -static void ACPI_SYSTEM_XFACE -AcpiDbMethodThread ( - void *Context); - -static ACPI_STATUS -AcpiDbExecutionWalk ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue); - - -/******************************************************************************* - * - * FUNCTION: AcpiDbExecuteMethod - * - * PARAMETERS: Info - Valid info segment - * ReturnObj - Where to put return object - * - * RETURN: Status - * - * DESCRIPTION: Execute a control method. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDbExecuteMethod ( - ACPI_DB_METHOD_INFO *Info, - ACPI_BUFFER *ReturnObj) -{ - ACPI_STATUS Status; - ACPI_OBJECT_LIST ParamObjects; - ACPI_OBJECT Params[ACPI_METHOD_NUM_ARGS]; - ACPI_HANDLE Handle; - UINT32 i; - ACPI_DEVICE_INFO *ObjInfo; - - - if (AcpiGbl_DbOutputToFile && !AcpiDbgLevel) - { - AcpiOsPrintf ("Warning: debug output is not enabled!\n"); - } - - /* Get the NS node, determines existence also */ - - Status = AcpiGetHandle (NULL, Info->Pathname, &Handle); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Get the object info for number of method parameters */ - - Status = AcpiGetObjectInfo (Handle, &ObjInfo); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - ParamObjects.Pointer = NULL; - ParamObjects.Count = 0; - - if (ObjInfo->Type == ACPI_TYPE_METHOD) - { - /* Are there arguments to the method? */ - - if (Info->Args && Info->Args[0]) - { - for (i = 0; Info->Args[i] && i < ACPI_METHOD_NUM_ARGS; i++) - { - Params[i].Type = ACPI_TYPE_INTEGER; - Params[i].Integer.Value = ACPI_STRTOUL (Info->Args[i], NULL, 16); - } - - ParamObjects.Pointer = Params; - ParamObjects.Count = i; - } - else - { - /* Setup default parameters */ - - for (i = 0; i < ObjInfo->ParamCount; i++) - { - switch (i) - { - case 0: - - Params[0].Type = ACPI_TYPE_INTEGER; - Params[0].Integer.Value = 0x01020304; - break; - - case 1: - - Params[1].Type = ACPI_TYPE_STRING; - Params[1].String.Length = 12; - Params[1].String.Pointer = "AML Debugger"; - break; - - default: - - Params[i].Type = ACPI_TYPE_INTEGER; - Params[i].Integer.Value = i * (ACPI_INTEGER) 0x1000; - break; - } - } - - ParamObjects.Pointer = Params; - ParamObjects.Count = ObjInfo->ParamCount; - } - } - - ACPI_FREE (ObjInfo); - - /* Prepare for a return object of arbitrary size */ - - ReturnObj->Pointer = AcpiGbl_DbBuffer; - ReturnObj->Length = ACPI_DEBUG_BUFFER_SIZE; - - /* Do the actual method execution */ - - AcpiGbl_MethodExecuting = TRUE; - Status = AcpiEvaluateObject (NULL, - Info->Pathname, &ParamObjects, ReturnObj); - - AcpiGbl_CmSingleStep = FALSE; - AcpiGbl_MethodExecuting = FALSE; - - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbExecuteSetup - * - * PARAMETERS: Info - Valid method info - * - * RETURN: None - * - * DESCRIPTION: Setup info segment prior to method execution - * - ******************************************************************************/ - -static void -AcpiDbExecuteSetup ( - ACPI_DB_METHOD_INFO *Info) -{ - - /* Catenate the current scope to the supplied name */ - - Info->Pathname[0] = 0; - if ((Info->Name[0] != '\\') && - (Info->Name[0] != '/')) - { - ACPI_STRCAT (Info->Pathname, AcpiGbl_DbScopeBuf); - } - - ACPI_STRCAT (Info->Pathname, Info->Name); - AcpiDbPrepNamestring (Info->Pathname); - - AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); - AcpiOsPrintf ("Executing %s\n", Info->Pathname); - - if (Info->Flags & EX_SINGLE_STEP) - { - AcpiGbl_CmSingleStep = TRUE; - AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); - } - - else - { - /* No single step, allow redirection to a file */ - - AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT); - } -} - - -#ifdef ACPI_DBG_TRACK_ALLOCATIONS -UINT32 -AcpiDbGetCacheInfo ( - ACPI_MEMORY_LIST *Cache) -{ - - return (Cache->TotalAllocated - Cache->TotalFreed - Cache->CurrentDepth); -} -#endif - -/******************************************************************************* - * - * FUNCTION: AcpiDbGetOutstandingAllocations - * - * PARAMETERS: None - * - * RETURN: Current global allocation count minus cache entries - * - * DESCRIPTION: Determine the current number of "outstanding" allocations -- - * those allocations that have not been freed and also are not - * in one of the various object caches. - * - ******************************************************************************/ - -static UINT32 -AcpiDbGetOutstandingAllocations ( - void) -{ - UINT32 Outstanding = 0; - -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - - Outstanding += AcpiDbGetCacheInfo (AcpiGbl_StateCache); - Outstanding += AcpiDbGetCacheInfo (AcpiGbl_PsNodeCache); - Outstanding += AcpiDbGetCacheInfo (AcpiGbl_PsNodeExtCache); - Outstanding += AcpiDbGetCacheInfo (AcpiGbl_OperandCache); -#endif - - return (Outstanding); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbExecutionWalk - * - * PARAMETERS: WALK_CALLBACK - * - * RETURN: Status - * - * DESCRIPTION: Execute a control method. Name is relative to the current - * scope. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDbExecutionWalk ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; - ACPI_BUFFER ReturnObj; - ACPI_STATUS Status; - - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (ObjDesc->Method.ParamCount) - { - return (AE_OK); - } - - ReturnObj.Pointer = NULL; - ReturnObj.Length = ACPI_ALLOCATE_BUFFER; - - AcpiNsPrintNodePathname (Node, "Execute"); - - /* Do the actual method execution */ - - AcpiOsPrintf ("\n"); - AcpiGbl_MethodExecuting = TRUE; - - Status = AcpiEvaluateObject (Node, NULL, NULL, &ReturnObj); - - AcpiOsPrintf ("[%4.4s] returned %s\n", AcpiUtGetNodeName (Node), - AcpiFormatException (Status)); - AcpiGbl_MethodExecuting = FALSE; - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbExecute - * - * PARAMETERS: Name - Name of method to execute - * Args - Parameters to the method - * Flags - single step/no single step - * - * RETURN: None - * - * DESCRIPTION: Execute a control method. Name is relative to the current - * scope. - * - ******************************************************************************/ - -void -AcpiDbExecute ( - char *Name, - char **Args, - UINT32 Flags) -{ - ACPI_STATUS Status; - ACPI_BUFFER ReturnObj; - char *NameString; - - -#ifdef ACPI_DEBUG_OUTPUT - UINT32 PreviousAllocations; - UINT32 Allocations; - - - /* Memory allocation tracking */ - - PreviousAllocations = AcpiDbGetOutstandingAllocations (); -#endif - - if (*Name == '*') - { - (void) AcpiWalkNamespace (ACPI_TYPE_METHOD, ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, AcpiDbExecutionWalk, NULL, NULL, NULL); - return; - } - else - { - NameString = ACPI_ALLOCATE (ACPI_STRLEN (Name) + 1); - if (!NameString) - { - return; - } - - ACPI_MEMSET (&AcpiGbl_DbMethodInfo, 0, sizeof (ACPI_DB_METHOD_INFO)); - - ACPI_STRCPY (NameString, Name); - AcpiUtStrupr (NameString); - AcpiGbl_DbMethodInfo.Name = NameString; - AcpiGbl_DbMethodInfo.Args = Args; - AcpiGbl_DbMethodInfo.Flags = Flags; - - ReturnObj.Pointer = NULL; - ReturnObj.Length = ACPI_ALLOCATE_BUFFER; - - AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo); - Status = AcpiDbExecuteMethod (&AcpiGbl_DbMethodInfo, &ReturnObj); - ACPI_FREE (NameString); - } - - /* - * Allow any handlers in separate threads to complete. - * (Such as Notify handlers invoked from AML executed above). - */ - AcpiOsSleep ((ACPI_INTEGER) 10); - - -#ifdef ACPI_DEBUG_OUTPUT - - /* Memory allocation tracking */ - - Allocations = AcpiDbGetOutstandingAllocations () - PreviousAllocations; - - AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); - - if (Allocations > 0) - { - AcpiOsPrintf ("Outstanding: 0x%X allocations after execution\n", - Allocations); - } -#endif - - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Execution of %s failed with status %s\n", - AcpiGbl_DbMethodInfo.Pathname, AcpiFormatException (Status)); - } - else - { - /* Display a return object, if any */ - - if (ReturnObj.Length) - { - AcpiOsPrintf ("Execution of %s returned object %p Buflen %X\n", - AcpiGbl_DbMethodInfo.Pathname, ReturnObj.Pointer, - (UINT32) ReturnObj.Length); - AcpiDbDumpExternalObject (ReturnObj.Pointer, 1); - } - else - { - AcpiOsPrintf ("No return object from execution of %s\n", - AcpiGbl_DbMethodInfo.Pathname); - } - } - - AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbMethodThread - * - * PARAMETERS: Context - Execution info segment - * - * RETURN: None - * - * DESCRIPTION: Debugger execute thread. Waits for a command line, then - * simply dispatches it. - * - ******************************************************************************/ - -static void ACPI_SYSTEM_XFACE -AcpiDbMethodThread ( - void *Context) -{ - ACPI_STATUS Status; - ACPI_DB_METHOD_INFO *Info = Context; - ACPI_DB_METHOD_INFO LocalInfo; - UINT32 i; - UINT8 Allow; - ACPI_BUFFER ReturnObj; - - - /* - * AcpiGbl_DbMethodInfo.Arguments will be passed as method arguments. - * Prevent AcpiGbl_DbMethodInfo from being modified by multiple threads - * concurrently. - * - * Note: The arguments we are passing are used by the ASL test suite - * (aslts). Do not change them without updating the tests. - */ - (void) AcpiOsWaitSemaphore (Info->InfoGate, 1, ACPI_WAIT_FOREVER); - - if (Info->InitArgs) - { - AcpiDbUInt32ToHexString (Info->NumCreated, Info->IndexOfThreadStr); - AcpiDbUInt32ToHexString (ACPI_TO_INTEGER (AcpiOsGetThreadId ()), - Info->IdOfThreadStr); - } - - if (Info->Threads && (Info->NumCreated < Info->NumThreads)) - { - Info->Threads[Info->NumCreated++] = - ACPI_TO_INTEGER (AcpiOsGetThreadId()); - } - - LocalInfo = *Info; - LocalInfo.Args = LocalInfo.Arguments; - LocalInfo.Arguments[0] = LocalInfo.NumThreadsStr; - LocalInfo.Arguments[1] = LocalInfo.IdOfThreadStr; - LocalInfo.Arguments[2] = LocalInfo.IndexOfThreadStr; - LocalInfo.Arguments[3] = NULL; - - (void) AcpiOsSignalSemaphore (Info->InfoGate, 1); - - for (i = 0; i < Info->NumLoops; i++) - { - Status = AcpiDbExecuteMethod (&LocalInfo, &ReturnObj); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("%s During execution of %s at iteration %X\n", - AcpiFormatException (Status), Info->Pathname, i); - if (Status == AE_ABORT_METHOD) - { - break; - } - } - -#if 0 - if ((i % 100) == 0) - { - AcpiOsPrintf ("%d executions, Thread 0x%x\n", i, AcpiOsGetThreadId ()); - } - - if (ReturnObj.Length) - { - AcpiOsPrintf ("Execution of %s returned object %p Buflen %X\n", - Info->Pathname, ReturnObj.Pointer, (UINT32) ReturnObj.Length); - AcpiDbDumpExternalObject (ReturnObj.Pointer, 1); - } -#endif - } - - /* Signal our completion */ - - Allow = 0; - (void) AcpiOsWaitSemaphore (Info->ThreadCompleteGate, 1, ACPI_WAIT_FOREVER); - Info->NumCompleted++; - - if (Info->NumCompleted == Info->NumThreads) - { - /* Do signal for main thread once only */ - Allow = 1; - } - - (void) AcpiOsSignalSemaphore (Info->ThreadCompleteGate, 1); - - if (Allow) - { - Status = AcpiOsSignalSemaphore (Info->MainThreadGate, 1); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not signal debugger thread sync semaphore, %s\n", - AcpiFormatException (Status)); - } - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbCreateExecutionThreads - * - * PARAMETERS: NumThreadsArg - Number of threads to create - * NumLoopsArg - Loop count for the thread(s) - * MethodNameArg - Control method to execute - * - * RETURN: None - * - * DESCRIPTION: Create threads to execute method(s) - * - ******************************************************************************/ - -void -AcpiDbCreateExecutionThreads ( - char *NumThreadsArg, - char *NumLoopsArg, - char *MethodNameArg) -{ - ACPI_STATUS Status; - UINT32 NumThreads; - UINT32 NumLoops; - UINT32 i; - UINT32 Size; - ACPI_MUTEX MainThreadGate; - ACPI_MUTEX ThreadCompleteGate; - ACPI_MUTEX InfoGate; - - - /* Get the arguments */ - - NumThreads = ACPI_STRTOUL (NumThreadsArg, NULL, 0); - NumLoops = ACPI_STRTOUL (NumLoopsArg, NULL, 0); - - if (!NumThreads || !NumLoops) - { - AcpiOsPrintf ("Bad argument: Threads %X, Loops %X\n", - NumThreads, NumLoops); - return; - } - - /* - * Create the semaphore for synchronization of - * the created threads with the main thread. - */ - Status = AcpiOsCreateSemaphore (1, 0, &MainThreadGate); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not create semaphore for synchronization with the main thread, %s\n", - AcpiFormatException (Status)); - return; - } - - /* - * Create the semaphore for synchronization - * between the created threads. - */ - Status = AcpiOsCreateSemaphore (1, 1, &ThreadCompleteGate); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not create semaphore for synchronization between the created threads, %s\n", - AcpiFormatException (Status)); - (void) AcpiOsDeleteSemaphore (MainThreadGate); - return; - } - - Status = AcpiOsCreateSemaphore (1, 1, &InfoGate); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not create semaphore for synchronization of AcpiGbl_DbMethodInfo, %s\n", - AcpiFormatException (Status)); - (void) AcpiOsDeleteSemaphore (ThreadCompleteGate); - (void) AcpiOsDeleteSemaphore (MainThreadGate); - return; - } - - ACPI_MEMSET (&AcpiGbl_DbMethodInfo, 0, sizeof (ACPI_DB_METHOD_INFO)); - - /* Array to store IDs of threads */ - - AcpiGbl_DbMethodInfo.NumThreads = NumThreads; - Size = 4 * AcpiGbl_DbMethodInfo.NumThreads; - AcpiGbl_DbMethodInfo.Threads = (UINT32 *) AcpiOsAllocate (Size); - if (AcpiGbl_DbMethodInfo.Threads == NULL) - { - AcpiOsPrintf ("No memory for thread IDs array\n"); - (void) AcpiOsDeleteSemaphore (MainThreadGate); - (void) AcpiOsDeleteSemaphore (ThreadCompleteGate); - (void) AcpiOsDeleteSemaphore (InfoGate); - return; - } - ACPI_MEMSET (AcpiGbl_DbMethodInfo.Threads, 0, Size); - - /* Setup the context to be passed to each thread */ - - AcpiGbl_DbMethodInfo.Name = MethodNameArg; - AcpiGbl_DbMethodInfo.Flags = 0; - AcpiGbl_DbMethodInfo.NumLoops = NumLoops; - AcpiGbl_DbMethodInfo.MainThreadGate = MainThreadGate; - AcpiGbl_DbMethodInfo.ThreadCompleteGate = ThreadCompleteGate; - AcpiGbl_DbMethodInfo.InfoGate = InfoGate; - - /* Init arguments to be passed to method */ - - AcpiGbl_DbMethodInfo.InitArgs = 1; - AcpiGbl_DbMethodInfo.Args = AcpiGbl_DbMethodInfo.Arguments; - AcpiGbl_DbMethodInfo.Arguments[0] = AcpiGbl_DbMethodInfo.NumThreadsStr; - AcpiGbl_DbMethodInfo.Arguments[1] = AcpiGbl_DbMethodInfo.IdOfThreadStr; - AcpiGbl_DbMethodInfo.Arguments[2] = AcpiGbl_DbMethodInfo.IndexOfThreadStr; - AcpiGbl_DbMethodInfo.Arguments[3] = NULL; - AcpiDbUInt32ToHexString (NumThreads, AcpiGbl_DbMethodInfo.NumThreadsStr); - - AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo); - - /* Create the threads */ - - AcpiOsPrintf ("Creating %X threads to execute %X times each\n", - NumThreads, NumLoops); - - for (i = 0; i < (NumThreads); i++) - { - Status = AcpiOsExecute (OSL_DEBUGGER_THREAD, AcpiDbMethodThread, - &AcpiGbl_DbMethodInfo); - if (ACPI_FAILURE (Status)) - { - break; - } - } - - /* Wait for all threads to complete */ - - (void) AcpiOsWaitSemaphore (MainThreadGate, 1, ACPI_WAIT_FOREVER); - - AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); - AcpiOsPrintf ("All threads (%X) have completed\n", NumThreads); - AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); - - /* Cleanup and exit */ - - (void) AcpiOsDeleteSemaphore (MainThreadGate); - (void) AcpiOsDeleteSemaphore (ThreadCompleteGate); - (void) AcpiOsDeleteSemaphore (InfoGate); - - AcpiOsFree (AcpiGbl_DbMethodInfo.Threads); - AcpiGbl_DbMethodInfo.Threads = NULL; -} - -#endif /* ACPI_DEBUGGER */ - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbfileio.c b/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbfileio.c deleted file mode 100644 index d52a72caa..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbfileio.c +++ /dev/null @@ -1,652 +0,0 @@ -/******************************************************************************* - * - * Module Name: dbfileio - Debugger file I/O commands. These can't usually - * be used when running the debugger in Ring 0 (Kernel mode) - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acdebug.h" - -#ifdef ACPI_APPLICATION -#include "actables.h" -#endif - -#if (defined ACPI_DEBUGGER || defined ACPI_DISASSEMBLER) - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dbfileio") - -/* - * NOTE: this is here for lack of a better place. It is used in all - * flavors of the debugger, need LCD file - */ -#ifdef ACPI_APPLICATION -#include -FILE *AcpiGbl_DebugFile = NULL; -#endif - - -#ifdef ACPI_DEBUGGER - -/* Local prototypes */ - -#ifdef ACPI_APPLICATION - -static ACPI_STATUS -AcpiDbCheckTextModeCorruption ( - UINT8 *Table, - UINT32 TableLength, - UINT32 FileLength); - -static ACPI_STATUS -AeLocalLoadTable ( - ACPI_TABLE_HEADER *TablePtr); -#endif - -/******************************************************************************* - * - * FUNCTION: AcpiDbCloseDebugFile - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: If open, close the current debug output file - * - ******************************************************************************/ - -void -AcpiDbCloseDebugFile ( - void) -{ - -#ifdef ACPI_APPLICATION - - if (AcpiGbl_DebugFile) - { - fclose (AcpiGbl_DebugFile); - AcpiGbl_DebugFile = NULL; - AcpiGbl_DbOutputToFile = FALSE; - AcpiOsPrintf ("Debug output file %s closed\n", AcpiGbl_DbDebugFilename); - } -#endif -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbOpenDebugFile - * - * PARAMETERS: Name - Filename to open - * - * RETURN: None - * - * DESCRIPTION: Open a file where debug output will be directed. - * - ******************************************************************************/ - -void -AcpiDbOpenDebugFile ( - char *Name) -{ - -#ifdef ACPI_APPLICATION - - AcpiDbCloseDebugFile (); - AcpiGbl_DebugFile = fopen (Name, "w+"); - if (AcpiGbl_DebugFile) - { - AcpiOsPrintf ("Debug output file %s opened\n", Name); - ACPI_STRCPY (AcpiGbl_DbDebugFilename, Name); - AcpiGbl_DbOutputToFile = TRUE; - } - else - { - AcpiOsPrintf ("Could not open debug file %s\n", Name); - } - -#endif -} -#endif - - -#ifdef ACPI_APPLICATION -/******************************************************************************* - * - * FUNCTION: AcpiDbCheckTextModeCorruption - * - * PARAMETERS: Table - Table buffer - * TableLength - Length of table from the table header - * FileLength - Length of the file that contains the table - * - * RETURN: Status - * - * DESCRIPTION: Check table for text mode file corruption where all linefeed - * characters (LF) have been replaced by carriage return linefeed - * pairs (CR/LF). - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDbCheckTextModeCorruption ( - UINT8 *Table, - UINT32 TableLength, - UINT32 FileLength) -{ - UINT32 i; - UINT32 Pairs = 0; - - - if (TableLength != FileLength) - { - ACPI_WARNING ((AE_INFO, - "File length (0x%X) is not the same as the table length (0x%X)", - FileLength, TableLength)); - } - - /* Scan entire table to determine if each LF has been prefixed with a CR */ - - for (i = 1; i < FileLength; i++) - { - if (Table[i] == 0x0A) - { - if (Table[i - 1] != 0x0D) - { - /* The LF does not have a preceding CR, table not corrupted */ - - return (AE_OK); - } - else - { - /* Found a CR/LF pair */ - - Pairs++; - } - i++; - } - } - - if (!Pairs) - { - return (AE_OK); - } - - /* - * Entire table scanned, each CR is part of a CR/LF pair -- - * meaning that the table was treated as a text file somewhere. - * - * NOTE: We can't "fix" the table, because any existing CR/LF pairs in the - * original table are left untouched by the text conversion process -- - * meaning that we cannot simply replace CR/LF pairs with LFs. - */ - AcpiOsPrintf ("Table has been corrupted by text mode conversion\n"); - AcpiOsPrintf ("All LFs (%d) were changed to CR/LF pairs\n", Pairs); - AcpiOsPrintf ("Table cannot be repaired!\n"); - return (AE_BAD_VALUE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbReadTable - * - * PARAMETERS: fp - File that contains table - * Table - Return value, buffer with table - * TableLength - Return value, length of table - * - * RETURN: Status - * - * DESCRIPTION: Load the DSDT from the file pointer - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDbReadTable ( - FILE *fp, - ACPI_TABLE_HEADER **Table, - UINT32 *TableLength) -{ - ACPI_TABLE_HEADER TableHeader; - UINT32 Actual; - ACPI_STATUS Status; - UINT32 FileSize; - BOOLEAN StandardHeader = TRUE; - - - /* Get the file size */ - - fseek (fp, 0, SEEK_END); - FileSize = (UINT32) ftell (fp); - fseek (fp, 0, SEEK_SET); - - if (FileSize < 4) - { - return (AE_BAD_HEADER); - } - - /* Read the signature */ - - if (fread (&TableHeader, 1, 4, fp) != 4) - { - AcpiOsPrintf ("Could not read the table signature\n"); - return (AE_BAD_HEADER); - } - - fseek (fp, 0, SEEK_SET); - - /* The RSDT and FACS tables do not have standard ACPI headers */ - - if (ACPI_COMPARE_NAME (TableHeader.Signature, "RSD ") || - ACPI_COMPARE_NAME (TableHeader.Signature, "FACS")) - { - *TableLength = FileSize; - StandardHeader = FALSE; - } - else - { - /* Read the table header */ - - if (fread (&TableHeader, 1, sizeof (TableHeader), fp) != - sizeof (ACPI_TABLE_HEADER)) - { - AcpiOsPrintf ("Could not read the table header\n"); - return (AE_BAD_HEADER); - } - -#if 0 - /* Validate the table header/length */ - - Status = AcpiTbValidateTableHeader (&TableHeader); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Table header is invalid!\n"); - return (Status); - } -#endif - - /* File size must be at least as long as the Header-specified length */ - - if (TableHeader.Length > FileSize) - { - AcpiOsPrintf ( - "TableHeader length [0x%X] greater than the input file size [0x%X]\n", - TableHeader.Length, FileSize); - return (AE_BAD_HEADER); - } - -#ifdef ACPI_OBSOLETE_CODE - /* We only support a limited number of table types */ - - if (ACPI_STRNCMP ((char *) TableHeader.Signature, DSDT_SIG, 4) && - ACPI_STRNCMP ((char *) TableHeader.Signature, PSDT_SIG, 4) && - ACPI_STRNCMP ((char *) TableHeader.Signature, SSDT_SIG, 4)) - { - AcpiOsPrintf ("Table signature [%4.4s] is invalid or not supported\n", - (char *) TableHeader.Signature); - ACPI_DUMP_BUFFER (&TableHeader, sizeof (ACPI_TABLE_HEADER)); - return (AE_ERROR); - } -#endif - - *TableLength = TableHeader.Length; - } - - /* Allocate a buffer for the table */ - - *Table = AcpiOsAllocate ((size_t) FileSize); - if (!*Table) - { - AcpiOsPrintf ( - "Could not allocate memory for ACPI table %4.4s (size=0x%X)\n", - TableHeader.Signature, *TableLength); - return (AE_NO_MEMORY); - } - - /* Get the rest of the table */ - - fseek (fp, 0, SEEK_SET); - Actual = fread (*Table, 1, (size_t) FileSize, fp); - if (Actual == FileSize) - { - if (StandardHeader) - { - /* Now validate the checksum */ - - Status = AcpiTbChecksum ((void *) *Table, - ACPI_CAST_PTR (ACPI_TABLE_HEADER, *Table)->Length); - - if (Status == AE_BAD_CHECKSUM) - { - Status = AcpiDbCheckTextModeCorruption ((UINT8 *) *Table, - FileSize, (*Table)->Length); - return (Status); - } - } - return (AE_OK); - } - - if (Actual > 0) - { - AcpiOsPrintf ("Warning - reading table, asked for %X got %X\n", - FileSize, Actual); - return (AE_OK); - } - - AcpiOsPrintf ("Error - could not read the table file\n"); - AcpiOsFree (*Table); - *Table = NULL; - *TableLength = 0; - - return (AE_ERROR); -} - - -/******************************************************************************* - * - * FUNCTION: AeLocalLoadTable - * - * PARAMETERS: Table - pointer to a buffer containing the entire - * table to be loaded - * - * RETURN: Status - * - * DESCRIPTION: This function is called to load a table from the caller's - * buffer. The buffer must contain an entire ACPI Table including - * a valid header. The header fields will be verified, and if it - * is determined that the table is invalid, the call will fail. - * - ******************************************************************************/ - -static ACPI_STATUS -AeLocalLoadTable ( - ACPI_TABLE_HEADER *Table) -{ - ACPI_STATUS Status = AE_OK; -/* ACPI_TABLE_DESC TableInfo; */ - - - ACPI_FUNCTION_TRACE (AeLocalLoadTable); -#if 0 - - - if (!Table) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - TableInfo.Pointer = Table; - Status = AcpiTbRecognizeTable (&TableInfo, ACPI_TABLE_ALL); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Install the new table into the local data structures */ - - Status = AcpiTbInstallTable (&TableInfo); - if (ACPI_FAILURE (Status)) - { - if (Status == AE_ALREADY_EXISTS) - { - /* Table already exists, no error */ - - Status = AE_OK; - } - - /* Free table allocated by AcpiTbGetTable */ - - AcpiTbDeleteSingleTable (&TableInfo); - return_ACPI_STATUS (Status); - } - -#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY)) - - Status = AcpiNsLoadTable (TableInfo.InstalledDesc, AcpiGbl_RootNode); - if (ACPI_FAILURE (Status)) - { - /* Uninstall table and free the buffer */ - - AcpiTbDeleteTablesByType (ACPI_TABLE_ID_DSDT); - return_ACPI_STATUS (Status); - } -#endif -#endif - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbReadTableFromFile - * - * PARAMETERS: Filename - File where table is located - * Table - Where a pointer to the table is returned - * - * RETURN: Status - * - * DESCRIPTION: Get an ACPI table from a file - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDbReadTableFromFile ( - char *Filename, - ACPI_TABLE_HEADER **Table) -{ - FILE *fp; - UINT32 TableLength; - ACPI_STATUS Status; - - - /* Open the file */ - - fp = fopen (Filename, "rb"); - if (!fp) - { - AcpiOsPrintf ("Could not open input file %s\n", Filename); - return (AE_ERROR); - } - - /* Get the entire file */ - - fprintf (stderr, "Loading Acpi table from file %s\n", Filename); - Status = AcpiDbReadTable (fp, Table, &TableLength); - fclose(fp); - - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not get table from the file\n"); - return (Status); - } - - return (AE_OK); - } -#endif - - -/******************************************************************************* - * - * FUNCTION: AcpiDbGetTableFromFile - * - * PARAMETERS: Filename - File where table is located - * ReturnTable - Where a pointer to the table is returned - * - * RETURN: Status - * - * DESCRIPTION: Load an ACPI table from a file - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDbGetTableFromFile ( - char *Filename, - ACPI_TABLE_HEADER **ReturnTable) -{ -#ifdef ACPI_APPLICATION - ACPI_STATUS Status; - ACPI_TABLE_HEADER *Table; - BOOLEAN IsAmlTable = TRUE; - - - Status = AcpiDbReadTableFromFile (Filename, &Table); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - -#ifdef ACPI_DATA_TABLE_DISASSEMBLY - IsAmlTable = AcpiUtIsAmlTable (Table); -#endif - - if (IsAmlTable) - { - /* Attempt to recognize and install the table */ - - Status = AeLocalLoadTable (Table); - if (ACPI_FAILURE (Status)) - { - if (Status == AE_ALREADY_EXISTS) - { - AcpiOsPrintf ("Table %4.4s is already installed\n", - Table->Signature); - } - else - { - AcpiOsPrintf ("Could not install table, %s\n", - AcpiFormatException (Status)); - } - - return (Status); - } - - fprintf (stderr, - "Acpi table [%4.4s] successfully installed and loaded\n", - Table->Signature); - } - - AcpiGbl_AcpiHardwarePresent = FALSE; - if (ReturnTable) - { - *ReturnTable = Table; - } - - -#endif /* ACPI_APPLICATION */ - return (AE_OK); -} - -#endif /* ACPI_DEBUGGER */ - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbhistry.c b/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbhistry.c deleted file mode 100644 index e8e8a76bf..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbhistry.c +++ /dev/null @@ -1,292 +0,0 @@ -/****************************************************************************** - * - * Module Name: dbhistry - debugger HISTORY command - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acdebug.h" - -#ifdef ACPI_DEBUGGER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dbhistry") - - -#define HI_NO_HISTORY 0 -#define HI_RECORD_HISTORY 1 -#define HISTORY_SIZE 20 - - -typedef struct HistoryInfo -{ - char Command[80]; - UINT32 CmdNum; - -} HISTORY_INFO; - - -static HISTORY_INFO AcpiGbl_HistoryBuffer[HISTORY_SIZE]; -static UINT16 AcpiGbl_LoHistory = 0; -static UINT16 AcpiGbl_NumHistory = 0; -static UINT16 AcpiGbl_NextHistoryIndex = 0; -static UINT32 AcpiGbl_NextCmdNum = 1; - - -/******************************************************************************* - * - * FUNCTION: AcpiDbAddToHistory - * - * PARAMETERS: CommandLine - Command to add - * - * RETURN: None - * - * DESCRIPTION: Add a command line to the history buffer. - * - ******************************************************************************/ - -void -AcpiDbAddToHistory ( - char *CommandLine) -{ - - /* Put command into the next available slot */ - - ACPI_STRCPY (AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].Command, - CommandLine); - - AcpiGbl_HistoryBuffer[AcpiGbl_NextHistoryIndex].CmdNum = AcpiGbl_NextCmdNum; - - /* Adjust indexes */ - - if ((AcpiGbl_NumHistory == HISTORY_SIZE) && - (AcpiGbl_NextHistoryIndex == AcpiGbl_LoHistory)) - { - AcpiGbl_LoHistory++; - if (AcpiGbl_LoHistory >= HISTORY_SIZE) - { - AcpiGbl_LoHistory = 0; - } - } - - AcpiGbl_NextHistoryIndex++; - if (AcpiGbl_NextHistoryIndex >= HISTORY_SIZE) - { - AcpiGbl_NextHistoryIndex = 0; - } - - AcpiGbl_NextCmdNum++; - if (AcpiGbl_NumHistory < HISTORY_SIZE) - { - AcpiGbl_NumHistory++; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayHistory - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Display the contents of the history buffer - * - ******************************************************************************/ - -void -AcpiDbDisplayHistory ( - void) -{ - UINT32 i; - UINT16 HistoryIndex; - - - HistoryIndex = AcpiGbl_LoHistory; - - /* Dump entire history buffer */ - - for (i = 0; i < AcpiGbl_NumHistory; i++) - { - AcpiOsPrintf ("%ld %s\n", AcpiGbl_HistoryBuffer[HistoryIndex].CmdNum, - AcpiGbl_HistoryBuffer[HistoryIndex].Command); - - HistoryIndex++; - if (HistoryIndex >= HISTORY_SIZE) - { - HistoryIndex = 0; - } - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbGetFromHistory - * - * PARAMETERS: CommandNumArg - String containing the number of the - * command to be retrieved - * - * RETURN: Pointer to the retrieved command. Null on error. - * - * DESCRIPTION: Get a command from the history buffer - * - ******************************************************************************/ - -char * -AcpiDbGetFromHistory ( - char *CommandNumArg) -{ - UINT32 i; - UINT16 HistoryIndex; - UINT32 CmdNum; - - - if (CommandNumArg == NULL) - { - CmdNum = AcpiGbl_NextCmdNum - 1; - } - - else - { - CmdNum = ACPI_STRTOUL (CommandNumArg, NULL, 0); - } - - /* Search history buffer */ - - HistoryIndex = AcpiGbl_LoHistory; - for (i = 0; i < AcpiGbl_NumHistory; i++) - { - if (AcpiGbl_HistoryBuffer[HistoryIndex].CmdNum == CmdNum) - { - /* Found the commnad, return it */ - - return (AcpiGbl_HistoryBuffer[HistoryIndex].Command); - } - - - HistoryIndex++; - if (HistoryIndex >= HISTORY_SIZE) - { - HistoryIndex = 0; - } - } - - AcpiOsPrintf ("Invalid history number: %d\n", HistoryIndex); - return (NULL); -} - -#endif /* ACPI_DEBUGGER */ - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbinput.c b/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbinput.c deleted file mode 100644 index 74b2dca6e..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbinput.c +++ /dev/null @@ -1,1085 +0,0 @@ -/******************************************************************************* - * - * Module Name: dbinput - user front-end to the AML debugger - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acdebug.h" - - -#ifdef ACPI_DEBUGGER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dbinput") - -/* Local prototypes */ - -static char * -AcpiDbGetNextToken ( - char *String, - char **Next); - -static UINT32 -AcpiDbGetLine ( - char *InputBuffer); - -static UINT32 -AcpiDbMatchCommand ( - char *UserCommand); - -static void -AcpiDbSingleThread ( - void); - -static void -AcpiDbDisplayHelp ( - char *HelpType); - - -/* - * Top-level debugger commands. - * - * This list of commands must match the string table below it - */ -enum AcpiExDebuggerCommands -{ - CMD_NOT_FOUND = 0, - CMD_NULL, - CMD_ALLOCATIONS, - CMD_ARGS, - CMD_ARGUMENTS, - CMD_BATCH, - CMD_BREAKPOINT, - CMD_BUSINFO, - CMD_CALL, - CMD_CLOSE, - CMD_DEBUG, - CMD_DISASSEMBLE, - CMD_DUMP, - CMD_ENABLEACPI, - CMD_EVENT, - CMD_EXECUTE, - CMD_EXIT, - CMD_FIND, - CMD_GO, - CMD_GPE, - CMD_GPES, - CMD_HELP, - CMD_HELP2, - CMD_HISTORY, - CMD_HISTORY_EXE, - CMD_HISTORY_LAST, - CMD_INFORMATION, - CMD_INTEGRITY, - CMD_INTO, - CMD_LEVEL, - CMD_LIST, - CMD_LOAD, - CMD_LOCALS, - CMD_LOCKS, - CMD_METHODS, - CMD_NAMESPACE, - CMD_NOTIFY, - CMD_OBJECT, - CMD_OPEN, - CMD_OWNER, - CMD_PREDEFINED, - CMD_PREFIX, - CMD_QUIT, - CMD_REFERENCES, - CMD_RESOURCES, - CMD_RESULTS, - CMD_SET, - CMD_SLEEP, - CMD_STATS, - CMD_STOP, - CMD_TABLES, - CMD_TERMINATE, - CMD_THREADS, - CMD_TRACE, - CMD_TREE, - CMD_TYPE, - CMD_UNLOAD -}; - -#define CMD_FIRST_VALID 2 - - -/* Second parameter is the required argument count */ - -static const COMMAND_INFO AcpiGbl_DbCommands[] = -{ - {"", 0}, - {"", 0}, - {"ALLOCATIONS", 0}, - {"ARGS", 0}, - {"ARGUMENTS", 0}, - {"BATCH", 0}, - {"BREAKPOINT", 1}, - {"BUSINFO", 0}, - {"CALL", 0}, - {"CLOSE", 0}, - {"DEBUG", 1}, - {"DISASSEMBLE", 1}, - {"DUMP", 1}, - {"ENABLEACPI", 0}, - {"EVENT", 1}, - {"EXECUTE", 1}, - {"EXIT", 0}, - {"FIND", 1}, - {"GO", 0}, - {"GPE", 2}, - {"GPES", 0}, - {"HELP", 0}, - {"?", 0}, - {"HISTORY", 0}, - {"!", 1}, - {"!!", 0}, - {"INFORMATION", 0}, - {"INTEGRITY", 0}, - {"INTO", 0}, - {"LEVEL", 0}, - {"LIST", 0}, - {"LOAD", 1}, - {"LOCALS", 0}, - {"LOCKS", 0}, - {"METHODS", 0}, - {"NAMESPACE", 0}, - {"NOTIFY", 2}, - {"OBJECT", 1}, - {"OPEN", 1}, - {"OWNER", 1}, - {"PREDEFINED", 0}, - {"PREFIX", 0}, - {"QUIT", 0}, - {"REFERENCES", 1}, - {"RESOURCES", 1}, - {"RESULTS", 0}, - {"SET", 3}, - {"SLEEP", 1}, - {"STATS", 0}, - {"STOP", 0}, - {"TABLES", 0}, - {"TERMINATE", 0}, - {"THREADS", 3}, - {"TRACE", 1}, - {"TREE", 0}, - {"TYPE", 1}, - {"UNLOAD", 1}, - {NULL, 0} -}; - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayHelp - * - * PARAMETERS: HelpType - Subcommand (optional) - * - * RETURN: None - * - * DESCRIPTION: Print a usage message. - * - ******************************************************************************/ - -static void -AcpiDbDisplayHelp ( - char *HelpType) -{ - - AcpiUtStrupr (HelpType); - - /* No parameter, just give the overview */ - - if (!HelpType) - { - AcpiOsPrintf ("ACPI CA Debugger Commands\n\n"); - AcpiOsPrintf ("The following classes of commands are available. Help is available for\n"); - AcpiOsPrintf ("each class by entering \"Help \"\n\n"); - AcpiOsPrintf (" [GENERAL] General-Purpose Commands\n"); - AcpiOsPrintf (" [NAMESPACE] Namespace Access Commands\n"); - AcpiOsPrintf (" [METHOD] Control Method Execution Commands\n"); - AcpiOsPrintf (" [STATISTICS] Statistical Information\n"); - AcpiOsPrintf (" [FILE] File I/O Commands\n"); - return; - } - - /* - * Parameter is the command class - * - * The idea here is to keep each class of commands smaller than a screenful - */ - switch (HelpType[0]) - { - case 'G': - AcpiOsPrintf ("\nGeneral-Purpose Commands\n\n"); - AcpiOsPrintf ("Allocations Display list of current memory allocations\n"); - AcpiOsPrintf ("Dump
|\n"); - AcpiOsPrintf (" [Byte|Word|Dword|Qword] Display ACPI objects or memory\n"); - AcpiOsPrintf ("EnableAcpi Enable ACPI (hardware) mode\n"); - AcpiOsPrintf ("Help This help screen\n"); - AcpiOsPrintf ("History Display command history buffer\n"); - AcpiOsPrintf ("Level [] [console] Get/Set debug level for file or console\n"); - AcpiOsPrintf ("Locks Current status of internal mutexes\n"); - AcpiOsPrintf ("Quit or Exit Exit this command\n"); - AcpiOsPrintf ("Stats [Allocations|Memory|Misc\n"); - AcpiOsPrintf (" |Objects|Sizes|Stack|Tables] Display namespace and memory statistics\n"); - AcpiOsPrintf ("Tables Display info about loaded ACPI tables\n"); - AcpiOsPrintf ("Unload [Instance] Unload an ACPI table\n"); - AcpiOsPrintf ("! Execute command from history buffer\n"); - AcpiOsPrintf ("!! Execute last command again\n"); - return; - - case 'S': - AcpiOsPrintf ("\nStats Subcommands\n\n"); - AcpiOsPrintf ("Allocations Display list of current memory allocations\n"); - AcpiOsPrintf ("Memory Dump internal memory lists\n"); - AcpiOsPrintf ("Misc Namespace search and mutex stats\n"); - AcpiOsPrintf ("Objects Summary of namespace objects\n"); - AcpiOsPrintf ("Sizes Sizes for each of the internal objects\n"); - AcpiOsPrintf ("Stack Display CPU stack usage\n"); - AcpiOsPrintf ("Tables Info about current ACPI table(s)\n"); - return; - - case 'N': - AcpiOsPrintf ("\nNamespace Access Commands\n\n"); - AcpiOsPrintf ("Businfo Display system bus info\n"); - AcpiOsPrintf ("Disassemble Disassemble a control method\n"); - AcpiOsPrintf ("Event Generate AcpiEvent (Fixed/GPE)\n"); - AcpiOsPrintf ("Find (? is wildcard) Find ACPI name(s) with wildcards\n"); - AcpiOsPrintf ("Gpe Simulate a GPE\n"); - AcpiOsPrintf ("Gpes Display info on all GPEs\n"); - AcpiOsPrintf ("Integrity Validate namespace integrity\n"); - AcpiOsPrintf ("Methods Display list of loaded control methods\n"); - AcpiOsPrintf ("Namespace [Object] [Depth] Display loaded namespace tree/subtree\n"); - AcpiOsPrintf ("Notify Send a notification on Object\n"); - AcpiOsPrintf ("Objects Display all objects of the given type\n"); - AcpiOsPrintf ("Owner [Depth] Display loaded namespace by object owner\n"); - AcpiOsPrintf ("Predefined Check all predefined names\n"); - AcpiOsPrintf ("Prefix [] Set or Get current execution prefix\n"); - AcpiOsPrintf ("References Find all references to object at addr\n"); - AcpiOsPrintf ("Resources Get and display Device resources\n"); - AcpiOsPrintf ("Set N Set value for named integer\n"); - AcpiOsPrintf ("Sleep Simulate sleep/wake sequence\n"); - AcpiOsPrintf ("Terminate Delete namespace and all internal objects\n"); - AcpiOsPrintf ("Type Display object type\n"); - return; - - case 'M': - AcpiOsPrintf ("\nControl Method Execution Commands\n\n"); - AcpiOsPrintf ("Arguments (or Args) Display method arguments\n"); - AcpiOsPrintf ("Breakpoint Set an AML execution breakpoint\n"); - AcpiOsPrintf ("Call Run to next control method invocation\n"); - AcpiOsPrintf ("Debug [Arguments] Single Step a control method\n"); - AcpiOsPrintf ("Execute [Arguments] Execute control method\n"); - AcpiOsPrintf ("Go Allow method to run to completion\n"); - AcpiOsPrintf ("Information Display info about the current method\n"); - AcpiOsPrintf ("Into Step into (not over) a method call\n"); - AcpiOsPrintf ("List [# of Aml Opcodes] Display method ASL statements\n"); - AcpiOsPrintf ("Locals Display method local variables\n"); - AcpiOsPrintf ("Results Display method result stack\n"); - AcpiOsPrintf ("Set <#> Set method data (Arguments/Locals)\n"); - AcpiOsPrintf ("Stop Terminate control method\n"); - AcpiOsPrintf ("Thread Spawn threads to execute method(s)\n"); - AcpiOsPrintf ("Trace Trace method execution\n"); - AcpiOsPrintf ("Tree Display control method calling tree\n"); - AcpiOsPrintf (" Single step next AML opcode (over calls)\n"); - return; - - case 'F': - AcpiOsPrintf ("\nFile I/O Commands\n\n"); - AcpiOsPrintf ("Close Close debug output file\n"); - AcpiOsPrintf ("Open Open a file for debug output\n"); - AcpiOsPrintf ("Load Load ACPI table from a file\n"); - return; - - default: - AcpiOsPrintf ("Unrecognized Command Class: %s\n", HelpType); - return; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbGetNextToken - * - * PARAMETERS: String - Command buffer - * Next - Return value, end of next token - * - * RETURN: Pointer to the start of the next token. - * - * DESCRIPTION: Command line parsing. Get the next token on the command line - * - ******************************************************************************/ - -static char * -AcpiDbGetNextToken ( - char *String, - char **Next) -{ - char *Start; - - - /* At end of buffer? */ - - if (!String || !(*String)) - { - return (NULL); - } - - /* Get rid of any spaces at the beginning */ - - if (*String == ' ') - { - while (*String && (*String == ' ')) - { - String++; - } - - if (!(*String)) - { - return (NULL); - } - } - - Start = String; - - /* Find end of token */ - - while (*String && (*String != ' ')) - { - String++; - } - - if (!(*String)) - { - *Next = NULL; - } - else - { - *String = 0; - *Next = String + 1; - } - - return (Start); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbGetLine - * - * PARAMETERS: InputBuffer - Command line buffer - * - * RETURN: Count of arguments to the command - * - * DESCRIPTION: Get the next command line from the user. Gets entire line - * up to the next newline - * - ******************************************************************************/ - -static UINT32 -AcpiDbGetLine ( - char *InputBuffer) -{ - UINT32 i; - UINT32 Count; - char *Next; - char *This; - - - ACPI_STRCPY (AcpiGbl_DbParsedBuf, InputBuffer); - - This = AcpiGbl_DbParsedBuf; - for (i = 0; i < ACPI_DEBUGGER_MAX_ARGS; i++) - { - AcpiGbl_DbArgs[i] = AcpiDbGetNextToken (This, &Next); - if (!AcpiGbl_DbArgs[i]) - { - break; - } - - This = Next; - } - - /* Uppercase the actual command */ - - if (AcpiGbl_DbArgs[0]) - { - AcpiUtStrupr (AcpiGbl_DbArgs[0]); - } - - Count = i; - if (Count) - { - Count--; /* Number of args only */ - } - - return (Count); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbMatchCommand - * - * PARAMETERS: UserCommand - User command line - * - * RETURN: Index into command array, -1 if not found - * - * DESCRIPTION: Search command array for a command match - * - ******************************************************************************/ - -static UINT32 -AcpiDbMatchCommand ( - char *UserCommand) -{ - UINT32 i; - - - if (!UserCommand || UserCommand[0] == 0) - { - return (CMD_NULL); - } - - for (i = CMD_FIRST_VALID; AcpiGbl_DbCommands[i].Name; i++) - { - if (ACPI_STRSTR (AcpiGbl_DbCommands[i].Name, UserCommand) == - AcpiGbl_DbCommands[i].Name) - { - return (i); - } - } - - /* Command not recognized */ - - return (CMD_NOT_FOUND); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbCommandDispatch - * - * PARAMETERS: InputBuffer - Command line buffer - * WalkState - Current walk - * Op - Current (executing) parse op - * - * RETURN: Status - * - * DESCRIPTION: Command dispatcher. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDbCommandDispatch ( - char *InputBuffer, - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op) -{ - UINT32 Temp; - UINT32 CommandIndex; - UINT32 ParamCount; - char *CommandLine; - ACPI_STATUS Status = AE_CTRL_TRUE; - - - /* If AcpiTerminate has been called, terminate this thread */ - - if (AcpiGbl_DbTerminateThreads) - { - return (AE_CTRL_TERMINATE); - } - - ParamCount = AcpiDbGetLine (InputBuffer); - CommandIndex = AcpiDbMatchCommand (AcpiGbl_DbArgs[0]); - Temp = 0; - - /* Verify that we have the minimum number of params */ - - if (ParamCount < AcpiGbl_DbCommands[CommandIndex].MinArgs) - { - AcpiOsPrintf ("%d parameters entered, [%s] requires %d parameters\n", - ParamCount, AcpiGbl_DbCommands[CommandIndex].Name, - AcpiGbl_DbCommands[CommandIndex].MinArgs); - - return (AE_CTRL_TRUE); - } - - /* Decode and dispatch the command */ - - switch (CommandIndex) - { - case CMD_NULL: - if (Op) - { - return (AE_OK); - } - break; - - case CMD_ALLOCATIONS: - -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - AcpiUtDumpAllocations ((UINT32) -1, NULL); -#endif - break; - - case CMD_ARGS: - case CMD_ARGUMENTS: - AcpiDbDisplayArguments (); - break; - - case CMD_BATCH: - AcpiDbBatchExecute (AcpiGbl_DbArgs[1]); - break; - - case CMD_BREAKPOINT: - AcpiDbSetMethodBreakpoint (AcpiGbl_DbArgs[1], WalkState, Op); - break; - - case CMD_BUSINFO: - AcpiDbGetBusInfo (); - break; - - case CMD_CALL: - AcpiDbSetMethodCallBreakpoint (Op); - Status = AE_OK; - break; - - case CMD_CLOSE: - AcpiDbCloseDebugFile (); - break; - - case CMD_DEBUG: - AcpiDbExecute (AcpiGbl_DbArgs[1], &AcpiGbl_DbArgs[2], EX_SINGLE_STEP); - break; - - case CMD_DISASSEMBLE: - (void) AcpiDbDisassembleMethod (AcpiGbl_DbArgs[1]); - break; - - case CMD_DUMP: - AcpiDbDecodeAndDisplayObject (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]); - break; - - case CMD_ENABLEACPI: - Status = AcpiEnable(); - if (ACPI_FAILURE(Status)) - { - AcpiOsPrintf("AcpiEnable failed (Status=%X)\n", Status); - return (Status); - } - break; - - case CMD_EVENT: - AcpiOsPrintf ("Event command not implemented\n"); - break; - - case CMD_EXECUTE: - AcpiDbExecute (AcpiGbl_DbArgs[1], - &AcpiGbl_DbArgs[2], EX_NO_SINGLE_STEP); - break; - - case CMD_FIND: - Status = AcpiDbFindNameInNamespace (AcpiGbl_DbArgs[1]); - break; - - case CMD_GO: - AcpiGbl_CmSingleStep = FALSE; - return (AE_OK); - - case CMD_GPE: - AcpiDbGenerateGpe (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]); - break; - - case CMD_GPES: - AcpiDbDisplayGpes (); - break; - - case CMD_HELP: - case CMD_HELP2: - AcpiDbDisplayHelp (AcpiGbl_DbArgs[1]); - break; - - case CMD_HISTORY: - AcpiDbDisplayHistory (); - break; - - case CMD_HISTORY_EXE: - CommandLine = AcpiDbGetFromHistory (AcpiGbl_DbArgs[1]); - if (!CommandLine) - { - return (AE_CTRL_TRUE); - } - - Status = AcpiDbCommandDispatch (CommandLine, WalkState, Op); - return (Status); - - case CMD_HISTORY_LAST: - CommandLine = AcpiDbGetFromHistory (NULL); - if (!CommandLine) - { - return (AE_CTRL_TRUE); - } - - Status = AcpiDbCommandDispatch (CommandLine, WalkState, Op); - return (Status); - - case CMD_INFORMATION: - AcpiDbDisplayMethodInfo (Op); - break; - - case CMD_INTEGRITY: - AcpiDbCheckIntegrity (); - break; - - case CMD_INTO: - if (Op) - { - AcpiGbl_CmSingleStep = TRUE; - return (AE_OK); - } - break; - - case CMD_LEVEL: - if (ParamCount == 0) - { - AcpiOsPrintf ("Current debug level for file output is: %8.8lX\n", - AcpiGbl_DbDebugLevel); - AcpiOsPrintf ("Current debug level for console output is: %8.8lX\n", - AcpiGbl_DbConsoleDebugLevel); - } - else if (ParamCount == 2) - { - Temp = AcpiGbl_DbConsoleDebugLevel; - AcpiGbl_DbConsoleDebugLevel = ACPI_STRTOUL (AcpiGbl_DbArgs[1], - NULL, 16); - AcpiOsPrintf ( - "Debug Level for console output was %8.8lX, now %8.8lX\n", - Temp, AcpiGbl_DbConsoleDebugLevel); - } - else - { - Temp = AcpiGbl_DbDebugLevel; - AcpiGbl_DbDebugLevel = ACPI_STRTOUL (AcpiGbl_DbArgs[1], NULL, 16); - AcpiOsPrintf ( - "Debug Level for file output was %8.8lX, now %8.8lX\n", - Temp, AcpiGbl_DbDebugLevel); - } - break; - - case CMD_LIST: - AcpiDbDisassembleAml (AcpiGbl_DbArgs[1], Op); - break; - - case CMD_LOAD: - Status = AcpiDbGetTableFromFile (AcpiGbl_DbArgs[1], NULL); - break; - - case CMD_LOCKS: - AcpiDbDisplayLocks (); - break; - - case CMD_LOCALS: - AcpiDbDisplayLocals (); - break; - - case CMD_METHODS: - Status = AcpiDbDisplayObjects ("METHOD", AcpiGbl_DbArgs[1]); - break; - - case CMD_NAMESPACE: - AcpiDbDumpNamespace (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]); - break; - - case CMD_NOTIFY: - Temp = ACPI_STRTOUL (AcpiGbl_DbArgs[2], NULL, 0); - AcpiDbSendNotify (AcpiGbl_DbArgs[1], Temp); - break; - - case CMD_OBJECT: - AcpiUtStrupr (AcpiGbl_DbArgs[1]); - Status = AcpiDbDisplayObjects (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]); - break; - - case CMD_OPEN: - AcpiDbOpenDebugFile (AcpiGbl_DbArgs[1]); - break; - - case CMD_OWNER: - AcpiDbDumpNamespaceByOwner (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]); - break; - - case CMD_PREDEFINED: - AcpiDbCheckPredefinedNames (); - break; - - case CMD_PREFIX: - AcpiDbSetScope (AcpiGbl_DbArgs[1]); - break; - - case CMD_REFERENCES: - AcpiDbFindReferences (AcpiGbl_DbArgs[1]); - break; - - case CMD_RESOURCES: - AcpiDbDisplayResources (AcpiGbl_DbArgs[1]); - break; - - case CMD_RESULTS: - AcpiDbDisplayResults (); - break; - - case CMD_SET: - AcpiDbSetMethodData (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2], - AcpiGbl_DbArgs[3]); - break; - - case CMD_SLEEP: - Status = AcpiDbSleep (AcpiGbl_DbArgs[1]); - break; - - case CMD_STATS: - Status = AcpiDbDisplayStatistics (AcpiGbl_DbArgs[1]); - break; - - case CMD_STOP: - return (AE_NOT_IMPLEMENTED); - - case CMD_TABLES: - AcpiDbDisplayTableInfo (AcpiGbl_DbArgs[1]); - break; - - case CMD_TERMINATE: - AcpiDbSetOutputDestination (ACPI_DB_REDIRECTABLE_OUTPUT); - AcpiUtSubsystemShutdown (); - - /* - * TBD: [Restructure] Need some way to re-initialize without - * re-creating the semaphores! - */ - - /* AcpiInitialize (NULL); */ - break; - - case CMD_THREADS: - AcpiDbCreateExecutionThreads (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2], - AcpiGbl_DbArgs[3]); - break; - - case CMD_TRACE: - (void) AcpiDebugTrace (AcpiGbl_DbArgs[1],0,0,1); - break; - - case CMD_TREE: - AcpiDbDisplayCallingTree (); - break; - - case CMD_TYPE: - AcpiDbDisplayObjectType (AcpiGbl_DbArgs[1]); - break; - - case CMD_UNLOAD: - AcpiDbUnloadAcpiTable (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]); - break; - - case CMD_EXIT: - case CMD_QUIT: - if (Op) - { - AcpiOsPrintf ("Method execution terminated\n"); - return (AE_CTRL_TERMINATE); - } - - if (!AcpiGbl_DbOutputToFile) - { - AcpiDbgLevel = ACPI_DEBUG_DEFAULT; - } - - AcpiDbCloseDebugFile (); - AcpiGbl_DbTerminateThreads = TRUE; - return (AE_CTRL_TERMINATE); - - case CMD_NOT_FOUND: - default: - AcpiOsPrintf ("Unknown Command\n"); - return (AE_CTRL_TRUE); - } - - if (ACPI_SUCCESS (Status)) - { - Status = AE_CTRL_TRUE; - } - - /* Add all commands that come here to the history buffer */ - - AcpiDbAddToHistory (InputBuffer); - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbExecuteThread - * - * PARAMETERS: Context - Not used - * - * RETURN: None - * - * DESCRIPTION: Debugger execute thread. Waits for a command line, then - * simply dispatches it. - * - ******************************************************************************/ - -void ACPI_SYSTEM_XFACE -AcpiDbExecuteThread ( - void *Context) -{ - ACPI_STATUS Status = AE_OK; - ACPI_STATUS MStatus; - - - while (Status != AE_CTRL_TERMINATE) - { - AcpiGbl_MethodExecuting = FALSE; - AcpiGbl_StepToNextCall = FALSE; - - MStatus = AcpiUtAcquireMutex (ACPI_MTX_DEBUG_CMD_READY); - if (ACPI_FAILURE (MStatus)) - { - return; - } - - Status = AcpiDbCommandDispatch (AcpiGbl_DbLineBuf, NULL, NULL); - - MStatus = AcpiUtReleaseMutex (ACPI_MTX_DEBUG_CMD_COMPLETE); - if (ACPI_FAILURE (MStatus)) - { - return; - } - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbSingleThread - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Debugger execute thread. Waits for a command line, then - * simply dispatches it. - * - ******************************************************************************/ - -static void -AcpiDbSingleThread ( - void) -{ - - AcpiGbl_MethodExecuting = FALSE; - AcpiGbl_StepToNextCall = FALSE; - - (void) AcpiDbCommandDispatch (AcpiGbl_DbLineBuf, NULL, NULL); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbUserCommands - * - * PARAMETERS: Prompt - User prompt (depends on mode) - * Op - Current executing parse op - * - * RETURN: None - * - * DESCRIPTION: Command line execution for the AML debugger. Commands are - * matched and dispatched here. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDbUserCommands ( - char Prompt, - ACPI_PARSE_OBJECT *Op) -{ - ACPI_STATUS Status = AE_OK; - - - /* TBD: [Restructure] Need a separate command line buffer for step mode */ - - while (!AcpiGbl_DbTerminateThreads) - { - /* Force output to console until a command is entered */ - - AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); - - /* Different prompt if method is executing */ - - if (!AcpiGbl_MethodExecuting) - { - AcpiOsPrintf ("%1c ", ACPI_DEBUGGER_COMMAND_PROMPT); - } - else - { - AcpiOsPrintf ("%1c ", ACPI_DEBUGGER_EXECUTE_PROMPT); - } - - /* Get the user input line */ - - (void) AcpiOsGetLine (AcpiGbl_DbLineBuf); - - /* Check for single or multithreaded debug */ - - if (AcpiGbl_DebuggerConfiguration & DEBUGGER_MULTI_THREADED) - { - /* - * Signal the debug thread that we have a command to execute, - * and wait for the command to complete. - */ - Status = AcpiUtReleaseMutex (ACPI_MTX_DEBUG_CMD_READY); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_DEBUG_CMD_COMPLETE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - else - { - /* Just call to the command line interpreter */ - - AcpiDbSingleThread (); - } - } - - /* - * Only this thread (the original thread) should actually terminate the - * subsystem, because all the semaphores are deleted during termination - */ - Status = AcpiTerminate (); - return (Status); -} - -#endif /* ACPI_DEBUGGER */ - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbstats.c b/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbstats.c deleted file mode 100644 index 63a62ecbe..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbstats.c +++ /dev/null @@ -1,621 +0,0 @@ -/******************************************************************************* - * - * Module Name: dbstats - Generation and display of ACPI table statistics - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acdebug.h" -#include "acnamesp.h" - -#ifdef ACPI_DEBUGGER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dbstats") - -/* Local prototypes */ - -static void -AcpiDbCountNamespaceObjects ( - void); - -static void -AcpiDbEnumerateObject ( - ACPI_OPERAND_OBJECT *ObjDesc); - -static ACPI_STATUS -AcpiDbClassifyOneObject ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue); - -#if defined ACPI_DBG_TRACK_ALLOCATIONS || defined ACPI_USE_LOCAL_CACHE -static void -AcpiDbListInfo ( - ACPI_MEMORY_LIST *List); -#endif - - -/* - * Statistics subcommands - */ -static ARGUMENT_INFO AcpiDbStatTypes [] = -{ - {"ALLOCATIONS"}, - {"OBJECTS"}, - {"MEMORY"}, - {"MISC"}, - {"TABLES"}, - {"SIZES"}, - {"STACK"}, - {NULL} /* Must be null terminated */ -}; - -#define CMD_STAT_ALLOCATIONS 0 -#define CMD_STAT_OBJECTS 1 -#define CMD_STAT_MEMORY 2 -#define CMD_STAT_MISC 3 -#define CMD_STAT_TABLES 4 -#define CMD_STAT_SIZES 5 -#define CMD_STAT_STACK 6 - - -#if defined ACPI_DBG_TRACK_ALLOCATIONS || defined ACPI_USE_LOCAL_CACHE -/******************************************************************************* - * - * FUNCTION: AcpiDbListInfo - * - * PARAMETERS: List - Memory list/cache to be displayed - * - * RETURN: None - * - * DESCRIPTION: Display information about the input memory list or cache. - * - ******************************************************************************/ - -static void -AcpiDbListInfo ( - ACPI_MEMORY_LIST *List) -{ -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - UINT32 Outstanding; -#endif - - AcpiOsPrintf ("\n%s\n", List->ListName); - - /* MaxDepth > 0 indicates a cache object */ - - if (List->MaxDepth > 0) - { - AcpiOsPrintf ( - " Cache: [Depth MaxD Avail Size] %8.2X %8.2X %8.2X %8.2X\n", - List->CurrentDepth, - List->MaxDepth, - List->MaxDepth - List->CurrentDepth, - (List->CurrentDepth * List->ObjectSize)); - } - -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - if (List->MaxDepth > 0) - { - AcpiOsPrintf ( - " Cache: [Requests Hits Misses ObjSize] %8.2X %8.2X %8.2X %8.2X\n", - List->Requests, - List->Hits, - List->Requests - List->Hits, - List->ObjectSize); - } - - Outstanding = AcpiDbGetCacheInfo (List); - - if (List->ObjectSize) - { - AcpiOsPrintf ( - " Mem: [Alloc Free Max CurSize Outstanding] %8.2X %8.2X %8.2X %8.2X %8.2X\n", - List->TotalAllocated, - List->TotalFreed, - List->MaxOccupied, - Outstanding * List->ObjectSize, - Outstanding); - } - else - { - AcpiOsPrintf ( - " Mem: [Alloc Free Max CurSize Outstanding Total] %8.2X %8.2X %8.2X %8.2X %8.2X %8.2X\n", - List->TotalAllocated, - List->TotalFreed, - List->MaxOccupied, - List->CurrentTotalSize, - Outstanding, - List->TotalSize); - } -#endif -} -#endif - - -/******************************************************************************* - * - * FUNCTION: AcpiDbEnumerateObject - * - * PARAMETERS: ObjDesc - Object to be counted - * - * RETURN: None - * - * DESCRIPTION: Add this object to the global counts, by object type. - * Limited recursion handles subobjects and packages, and this - * is probably acceptable within the AML debugger only. - * - ******************************************************************************/ - -static void -AcpiDbEnumerateObject ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - UINT32 i; - - - if (!ObjDesc) - { - return; - } - - /* Enumerate this object first */ - - AcpiGbl_NumObjects++; - - if (ObjDesc->Common.Type > ACPI_TYPE_NS_NODE_MAX) - { - AcpiGbl_ObjTypeCountMisc++; - } - else - { - AcpiGbl_ObjTypeCount [ObjDesc->Common.Type]++; - } - - /* Count the sub-objects */ - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_PACKAGE: - - for (i = 0; i < ObjDesc->Package.Count; i++) - { - AcpiDbEnumerateObject (ObjDesc->Package.Elements[i]); - } - break; - - case ACPI_TYPE_DEVICE: - - AcpiDbEnumerateObject (ObjDesc->Device.SystemNotify); - AcpiDbEnumerateObject (ObjDesc->Device.DeviceNotify); - AcpiDbEnumerateObject (ObjDesc->Device.Handler); - break; - - case ACPI_TYPE_BUFFER_FIELD: - - if (AcpiNsGetSecondaryObject (ObjDesc)) - { - AcpiGbl_ObjTypeCount [ACPI_TYPE_BUFFER_FIELD]++; - } - break; - - case ACPI_TYPE_REGION: - - AcpiGbl_ObjTypeCount [ACPI_TYPE_LOCAL_REGION_FIELD ]++; - AcpiDbEnumerateObject (ObjDesc->Region.Handler); - break; - - case ACPI_TYPE_POWER: - - AcpiDbEnumerateObject (ObjDesc->PowerResource.SystemNotify); - AcpiDbEnumerateObject (ObjDesc->PowerResource.DeviceNotify); - break; - - case ACPI_TYPE_PROCESSOR: - - AcpiDbEnumerateObject (ObjDesc->Processor.SystemNotify); - AcpiDbEnumerateObject (ObjDesc->Processor.DeviceNotify); - AcpiDbEnumerateObject (ObjDesc->Processor.Handler); - break; - - case ACPI_TYPE_THERMAL: - - AcpiDbEnumerateObject (ObjDesc->ThermalZone.SystemNotify); - AcpiDbEnumerateObject (ObjDesc->ThermalZone.DeviceNotify); - AcpiDbEnumerateObject (ObjDesc->ThermalZone.Handler); - break; - - default: - break; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbClassifyOneObject - * - * PARAMETERS: Callback for WalkNamespace - * - * RETURN: Status - * - * DESCRIPTION: Enumerate both the object descriptor (including subobjects) and - * the parent namespace node. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDbClassifyOneObject ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue) -{ - ACPI_NAMESPACE_NODE *Node; - ACPI_OPERAND_OBJECT *ObjDesc; - UINT32 Type; - - - AcpiGbl_NumNodes++; - - Node = (ACPI_NAMESPACE_NODE *) ObjHandle; - ObjDesc = AcpiNsGetAttachedObject (Node); - - AcpiDbEnumerateObject (ObjDesc); - - Type = Node->Type; - if (Type > ACPI_TYPE_NS_NODE_MAX) - { - AcpiGbl_NodeTypeCountMisc++; - } - else - { - AcpiGbl_NodeTypeCount [Type]++; - } - - return AE_OK; - - -#ifdef ACPI_FUTURE_IMPLEMENTATION - - /* TBD: These need to be counted during the initial parsing phase */ - - if (AcpiPsIsNamedOp (Op->Opcode)) - { - NumNodes++; - } - - if (IsMethod) - { - NumMethodElements++; - } - - NumGrammarElements++; - Op = AcpiPsGetDepthNext (Root, Op); - - SizeOfParseTree = (NumGrammarElements - NumMethodElements) * - (UINT32) sizeof (ACPI_PARSE_OBJECT); - SizeOfMethodTrees = NumMethodElements * (UINT32) sizeof (ACPI_PARSE_OBJECT); - SizeOfNodeEntries = NumNodes * (UINT32) sizeof (ACPI_NAMESPACE_NODE); - SizeOfAcpiObjects = NumNodes * (UINT32) sizeof (ACPI_OPERAND_OBJECT); -#endif -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbCountNamespaceObjects - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Count and classify the entire namespace, including all - * namespace nodes and attached objects. - * - ******************************************************************************/ - -static void -AcpiDbCountNamespaceObjects ( - void) -{ - UINT32 i; - - - AcpiGbl_NumNodes = 0; - AcpiGbl_NumObjects = 0; - - AcpiGbl_ObjTypeCountMisc = 0; - for (i = 0; i < (ACPI_TYPE_NS_NODE_MAX -1); i++) - { - AcpiGbl_ObjTypeCount [i] = 0; - AcpiGbl_NodeTypeCount [i] = 0; - } - - (void) AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, FALSE, AcpiDbClassifyOneObject, NULL, NULL, NULL); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDisplayStatistics - * - * PARAMETERS: TypeArg - Subcommand - * - * RETURN: Status - * - * DESCRIPTION: Display various statistics - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDbDisplayStatistics ( - char *TypeArg) -{ - UINT32 i; - UINT32 Temp; - - - if (!TypeArg) - { - AcpiOsPrintf ("The following subcommands are available:\n ALLOCATIONS, OBJECTS, MEMORY, MISC, SIZES, TABLES\n"); - return (AE_OK); - } - - AcpiUtStrupr (TypeArg); - Temp = AcpiDbMatchArgument (TypeArg, AcpiDbStatTypes); - if (Temp == (UINT32) -1) - { - AcpiOsPrintf ("Invalid or unsupported argument\n"); - return (AE_OK); - } - - - switch (Temp) - { - case CMD_STAT_ALLOCATIONS: - -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - AcpiUtDumpAllocationInfo (); -#endif - break; - - case CMD_STAT_TABLES: - - AcpiOsPrintf ("ACPI Table Information (not implemented):\n\n"); - break; - - case CMD_STAT_OBJECTS: - - AcpiDbCountNamespaceObjects (); - - AcpiOsPrintf ("\nObjects defined in the current namespace:\n\n"); - - AcpiOsPrintf ("%16.16s %10.10s %10.10s\n", - "ACPI_TYPE", "NODES", "OBJECTS"); - - for (i = 0; i < ACPI_TYPE_NS_NODE_MAX; i++) - { - AcpiOsPrintf ("%16.16s % 10ld% 10ld\n", AcpiUtGetTypeName (i), - AcpiGbl_NodeTypeCount [i], AcpiGbl_ObjTypeCount [i]); - } - AcpiOsPrintf ("%16.16s % 10ld% 10ld\n", "Misc/Unknown", - AcpiGbl_NodeTypeCountMisc, AcpiGbl_ObjTypeCountMisc); - - AcpiOsPrintf ("%16.16s % 10ld% 10ld\n", "TOTALS:", - AcpiGbl_NumNodes, AcpiGbl_NumObjects); - break; - - case CMD_STAT_MEMORY: - -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - AcpiOsPrintf ("\n----Object Statistics (all in hex)---------\n"); - - AcpiDbListInfo (AcpiGbl_GlobalList); - AcpiDbListInfo (AcpiGbl_NsNodeList); -#endif - -#ifdef ACPI_USE_LOCAL_CACHE - AcpiOsPrintf ("\n----Cache Statistics (all in hex)---------\n"); - AcpiDbListInfo (AcpiGbl_OperandCache); - AcpiDbListInfo (AcpiGbl_PsNodeCache); - AcpiDbListInfo (AcpiGbl_PsNodeExtCache); - AcpiDbListInfo (AcpiGbl_StateCache); -#endif - - break; - - case CMD_STAT_MISC: - - AcpiOsPrintf ("\nMiscellaneous Statistics:\n\n"); - AcpiOsPrintf ("Calls to AcpiPsFind:.. ........% 7ld\n", - AcpiGbl_PsFindCount); - AcpiOsPrintf ("Calls to AcpiNsLookup:..........% 7ld\n", - AcpiGbl_NsLookupCount); - - AcpiOsPrintf ("\n"); - - AcpiOsPrintf ("Mutex usage:\n\n"); - for (i = 0; i < ACPI_NUM_MUTEX; i++) - { - AcpiOsPrintf ("%-28s: % 7ld\n", - AcpiUtGetMutexName (i), AcpiGbl_MutexInfo[i].UseCount); - } - break; - - - case CMD_STAT_SIZES: - - AcpiOsPrintf ("\nInternal object sizes:\n\n"); - - AcpiOsPrintf ("Common %3d\n", sizeof (ACPI_OBJECT_COMMON)); - AcpiOsPrintf ("Number %3d\n", sizeof (ACPI_OBJECT_INTEGER)); - AcpiOsPrintf ("String %3d\n", sizeof (ACPI_OBJECT_STRING)); - AcpiOsPrintf ("Buffer %3d\n", sizeof (ACPI_OBJECT_BUFFER)); - AcpiOsPrintf ("Package %3d\n", sizeof (ACPI_OBJECT_PACKAGE)); - AcpiOsPrintf ("BufferField %3d\n", sizeof (ACPI_OBJECT_BUFFER_FIELD)); - AcpiOsPrintf ("Device %3d\n", sizeof (ACPI_OBJECT_DEVICE)); - AcpiOsPrintf ("Event %3d\n", sizeof (ACPI_OBJECT_EVENT)); - AcpiOsPrintf ("Method %3d\n", sizeof (ACPI_OBJECT_METHOD)); - AcpiOsPrintf ("Mutex %3d\n", sizeof (ACPI_OBJECT_MUTEX)); - AcpiOsPrintf ("Region %3d\n", sizeof (ACPI_OBJECT_REGION)); - AcpiOsPrintf ("PowerResource %3d\n", sizeof (ACPI_OBJECT_POWER_RESOURCE)); - AcpiOsPrintf ("Processor %3d\n", sizeof (ACPI_OBJECT_PROCESSOR)); - AcpiOsPrintf ("ThermalZone %3d\n", sizeof (ACPI_OBJECT_THERMAL_ZONE)); - AcpiOsPrintf ("RegionField %3d\n", sizeof (ACPI_OBJECT_REGION_FIELD)); - AcpiOsPrintf ("BankField %3d\n", sizeof (ACPI_OBJECT_BANK_FIELD)); - AcpiOsPrintf ("IndexField %3d\n", sizeof (ACPI_OBJECT_INDEX_FIELD)); - AcpiOsPrintf ("Reference %3d\n", sizeof (ACPI_OBJECT_REFERENCE)); - AcpiOsPrintf ("Notify %3d\n", sizeof (ACPI_OBJECT_NOTIFY_HANDLER)); - AcpiOsPrintf ("AddressSpace %3d\n", sizeof (ACPI_OBJECT_ADDR_HANDLER)); - AcpiOsPrintf ("Extra %3d\n", sizeof (ACPI_OBJECT_EXTRA)); - AcpiOsPrintf ("Data %3d\n", sizeof (ACPI_OBJECT_DATA)); - - AcpiOsPrintf ("\n"); - - AcpiOsPrintf ("ParseObject %3d\n", sizeof (ACPI_PARSE_OBJ_COMMON)); - AcpiOsPrintf ("ParseObjectNamed %3d\n", sizeof (ACPI_PARSE_OBJ_NAMED)); - AcpiOsPrintf ("ParseObjectAsl %3d\n", sizeof (ACPI_PARSE_OBJ_ASL)); - AcpiOsPrintf ("OperandObject %3d\n", sizeof (ACPI_OPERAND_OBJECT)); - AcpiOsPrintf ("NamespaceNode %3d\n", sizeof (ACPI_NAMESPACE_NODE)); - AcpiOsPrintf ("AcpiObject %3d\n", sizeof (ACPI_OBJECT)); - - break; - - - case CMD_STAT_STACK: -#if defined(ACPI_DEBUG_OUTPUT) - - Temp = (UINT32) ACPI_PTR_DIFF (AcpiGbl_EntryStackPointer, AcpiGbl_LowestStackPointer); - - AcpiOsPrintf ("\nSubsystem Stack Usage:\n\n"); - AcpiOsPrintf ("Entry Stack Pointer %p\n", AcpiGbl_EntryStackPointer); - AcpiOsPrintf ("Lowest Stack Pointer %p\n", AcpiGbl_LowestStackPointer); - AcpiOsPrintf ("Stack Use %X (%u)\n", Temp, Temp); - AcpiOsPrintf ("Deepest Procedure Nesting %u\n", AcpiGbl_DeepestNesting); -#endif - break; - - default: - break; - } - - AcpiOsPrintf ("\n"); - return (AE_OK); -} - -#endif /* ACPI_DEBUGGER */ diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbutils.c b/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbutils.c deleted file mode 100644 index 15799eb7b..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbutils.c +++ /dev/null @@ -1,599 +0,0 @@ -/******************************************************************************* - * - * Module Name: dbutils - AML debugger utilities - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "acdebug.h" -#include "acdisasm.h" - - -#ifdef ACPI_DEBUGGER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dbutils") - -/* Local prototypes */ - -#ifdef ACPI_OBSOLETE_FUNCTIONS -ACPI_STATUS -AcpiDbSecondPassParse ( - ACPI_PARSE_OBJECT *Root); - -void -AcpiDbDumpBuffer ( - UINT32 Address); -#endif - -static char *Converter = "0123456789ABCDEF"; - - -/******************************************************************************* - * - * FUNCTION: AcpiDbMatchArgument - * - * PARAMETERS: UserArgument - User command line - * Arguments - Array of commands to match against - * - * RETURN: Index into command array or ACPI_TYPE_NOT_FOUND if not found - * - * DESCRIPTION: Search command array for a command match - * - ******************************************************************************/ - -ACPI_OBJECT_TYPE -AcpiDbMatchArgument ( - char *UserArgument, - ARGUMENT_INFO *Arguments) -{ - UINT32 i; - - - if (!UserArgument || UserArgument[0] == 0) - { - return (ACPI_TYPE_NOT_FOUND); - } - - for (i = 0; Arguments[i].Name; i++) - { - if (ACPI_STRSTR (Arguments[i].Name, UserArgument) == Arguments[i].Name) - { - return (i); - } - } - - /* Argument not recognized */ - - return (ACPI_TYPE_NOT_FOUND); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbSetOutputDestination - * - * PARAMETERS: OutputFlags - Current flags word - * - * RETURN: None - * - * DESCRIPTION: Set the current destination for debugger output. Also sets - * the debug output level accordingly. - * - ******************************************************************************/ - -void -AcpiDbSetOutputDestination ( - UINT32 OutputFlags) -{ - - AcpiGbl_DbOutputFlags = (UINT8) OutputFlags; - - if ((OutputFlags & ACPI_DB_REDIRECTABLE_OUTPUT) && AcpiGbl_DbOutputToFile) - { - AcpiDbgLevel = AcpiGbl_DbDebugLevel; - } - else - { - AcpiDbgLevel = AcpiGbl_DbConsoleDebugLevel; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDumpExternalObject - * - * PARAMETERS: ObjDesc - External ACPI object to dump - * Level - Nesting level. - * - * RETURN: None - * - * DESCRIPTION: Dump the contents of an ACPI external object - * - ******************************************************************************/ - -void -AcpiDbDumpExternalObject ( - ACPI_OBJECT *ObjDesc, - UINT32 Level) -{ - UINT32 i; - - - if (!ObjDesc) - { - AcpiOsPrintf ("[Null Object]\n"); - return; - } - - for (i = 0; i < Level; i++) - { - AcpiOsPrintf (" "); - } - - switch (ObjDesc->Type) - { - case ACPI_TYPE_ANY: - - AcpiOsPrintf ("[Null Object] (Type=0)\n"); - break; - - - case ACPI_TYPE_INTEGER: - - AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n", - ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); - break; - - - case ACPI_TYPE_STRING: - - AcpiOsPrintf ("[String] Length %.2X = ", ObjDesc->String.Length); - for (i = 0; i < ObjDesc->String.Length; i++) - { - AcpiOsPrintf ("%c", ObjDesc->String.Pointer[i]); - } - AcpiOsPrintf ("\n"); - break; - - - case ACPI_TYPE_BUFFER: - - AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length); - if (ObjDesc->Buffer.Length) - { - if (ObjDesc->Buffer.Length > 16) - { - AcpiOsPrintf ("\n"); - } - AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer), - ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT); - } - else - { - AcpiOsPrintf ("\n"); - } - break; - - - case ACPI_TYPE_PACKAGE: - - AcpiOsPrintf ("[Package] Contains %d Elements:\n", - ObjDesc->Package.Count); - - for (i = 0; i < ObjDesc->Package.Count; i++) - { - AcpiDbDumpExternalObject (&ObjDesc->Package.Elements[i], Level+1); - } - break; - - - case ACPI_TYPE_LOCAL_REFERENCE: - - AcpiOsPrintf ("[Object Reference] = "); - AcpiDmDisplayInternalObject (ObjDesc->Reference.Handle, NULL); - break; - - - case ACPI_TYPE_PROCESSOR: - - AcpiOsPrintf ("[Processor]\n"); - break; - - - case ACPI_TYPE_POWER: - - AcpiOsPrintf ("[Power Resource]\n"); - break; - - - default: - - AcpiOsPrintf ("[Unknown Type] %X\n", ObjDesc->Type); - break; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbPrepNamestring - * - * PARAMETERS: Name - String to prepare - * - * RETURN: None - * - * DESCRIPTION: Translate all forward slashes and dots to backslashes. - * - ******************************************************************************/ - -void -AcpiDbPrepNamestring ( - char *Name) -{ - - if (!Name) - { - return; - } - - AcpiUtStrupr (Name); - - /* Convert a leading forward slash to a backslash */ - - if (*Name == '/') - { - *Name = '\\'; - } - - /* Ignore a leading backslash, this is the root prefix */ - - if (*Name == '\\') - { - Name++; - } - - /* Convert all slash path separators to dots */ - - while (*Name) - { - if ((*Name == '/') || - (*Name == '\\')) - { - *Name = '.'; - } - - Name++; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbLocalNsLookup - * - * PARAMETERS: Name - Name to lookup - * - * RETURN: Pointer to a namespace node, null on failure - * - * DESCRIPTION: Lookup a name in the ACPI namespace - * - * Note: Currently begins search from the root. Could be enhanced to use - * the current prefix (scope) node as the search beginning point. - * - ******************************************************************************/ - -ACPI_NAMESPACE_NODE * -AcpiDbLocalNsLookup ( - char *Name) -{ - char *InternalPath; - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node = NULL; - - - AcpiDbPrepNamestring (Name); - - /* Build an internal namestring */ - - Status = AcpiNsInternalizeName (Name, &InternalPath); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Invalid namestring: %s\n", Name); - return (NULL); - } - - /* - * Lookup the name. - * (Uses root node as the search starting point) - */ - Status = AcpiNsLookup (NULL, InternalPath, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, - ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not locate name: %s, %s\n", - Name, AcpiFormatException (Status)); - } - - ACPI_FREE (InternalPath); - return (Node); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbUInt32ToHexString - * - * PARAMETERS: Value - The value to be converted to string - * Buffer - Buffer for result (not less than 11 bytes) - * - * RETURN: None - * - * DESCRIPTION: Convert the unsigned 32-bit value to the hexadecimal image - * - * NOTE: It is the caller's responsibility to ensure that the length of buffer - * is sufficient. - * - ******************************************************************************/ - -void -AcpiDbUInt32ToHexString ( - UINT32 Value, - char *Buffer) -{ - UINT8 i; - - - if (Value == 0) - { - ACPI_STRCPY (Buffer, "0"); - return; - } - - ACPI_STRCPY (Buffer, "0x"); - Buffer[10] = '\0'; - - for (i = 9; i > 1; i--) - { - Buffer[i] = Converter [Value & 0x0F]; - Value = Value >> 4; - } -} - - -#ifdef ACPI_OBSOLETE_FUNCTIONS -/******************************************************************************* - * - * FUNCTION: AcpiDbSecondPassParse - * - * PARAMETERS: Root - Root of the parse tree - * - * RETURN: Status - * - * DESCRIPTION: Second pass parse of the ACPI tables. We need to wait until - * second pass to parse the control methods - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDbSecondPassParse ( - ACPI_PARSE_OBJECT *Root) -{ - ACPI_PARSE_OBJECT *Op = Root; - ACPI_PARSE_OBJECT *Method; - ACPI_PARSE_OBJECT *SearchOp; - ACPI_PARSE_OBJECT *StartOp; - ACPI_STATUS Status = AE_OK; - UINT32 BaseAmlOffset; - ACPI_WALK_STATE *WalkState; - - - ACPI_FUNCTION_ENTRY (); - - - AcpiOsPrintf ("Pass two parse ....\n"); - - while (Op) - { - if (Op->Common.AmlOpcode == AML_METHOD_OP) - { - Method = Op; - - /* Create a new walk state for the parse */ - - WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL); - if (!WalkState) - { - return (AE_NO_MEMORY); - } - - /* Init the Walk State */ - - WalkState->ParserState.Aml = - WalkState->ParserState.AmlStart = Method->Named.Data; - WalkState->ParserState.AmlEnd = - WalkState->ParserState.PkgEnd = Method->Named.Data + - Method->Named.Length; - WalkState->ParserState.StartScope = Op; - - WalkState->DescendingCallback = AcpiDsLoad1BeginOp; - WalkState->AscendingCallback = AcpiDsLoad1EndOp; - - /* Perform the AML parse */ - - Status = AcpiPsParseAml (WalkState); - - BaseAmlOffset = (Method->Common.Value.Arg)->Common.AmlOffset + 1; - StartOp = (Method->Common.Value.Arg)->Common.Next; - SearchOp = StartOp; - - while (SearchOp) - { - SearchOp->Common.AmlOffset += BaseAmlOffset; - SearchOp = AcpiPsGetDepthNext (StartOp, SearchOp); - } - } - - if (Op->Common.AmlOpcode == AML_REGION_OP) - { - /* TBD: [Investigate] this isn't quite the right thing to do! */ - /* - * - * Method = (ACPI_DEFERRED_OP *) Op; - * Status = AcpiPsParseAml (Op, Method->Body, Method->BodyLength); - */ - } - - if (ACPI_FAILURE (Status)) - { - break; - } - - Op = AcpiPsGetDepthNext (Root, Op); - } - - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbDumpBuffer - * - * PARAMETERS: Address - Pointer to the buffer - * - * RETURN: None - * - * DESCRIPTION: Print a portion of a buffer - * - ******************************************************************************/ - -void -AcpiDbDumpBuffer ( - UINT32 Address) -{ - - AcpiOsPrintf ("\nLocation %X:\n", Address); - - AcpiDbgLevel |= ACPI_LV_TABLES; - AcpiUtDumpBuffer (ACPI_TO_POINTER (Address), 64, DB_BYTE_DISPLAY, - ACPI_UINT32_MAX); -} -#endif - -#endif /* ACPI_DEBUGGER */ - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbxface.c b/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbxface.c deleted file mode 100644 index f3f7a4474..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/debugger/dbxface.c +++ /dev/null @@ -1,602 +0,0 @@ -/******************************************************************************* - * - * Module Name: dbxface - AML Debugger external interfaces - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "amlcode.h" -#include "acdebug.h" -#include "acdisasm.h" - - -#ifdef ACPI_DEBUGGER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dbxface") - - -/* Local prototypes */ - -static ACPI_STATUS -AcpiDbStartCommand ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op); - -#ifdef ACPI_OBSOLETE_FUNCTIONS -void -AcpiDbMethodEnd ( - ACPI_WALK_STATE *WalkState); -#endif - - -/******************************************************************************* - * - * FUNCTION: AcpiDbStartCommand - * - * PARAMETERS: WalkState - Current walk - * Op - Current executing Op, from AML interpreter - * - * RETURN: Status - * - * DESCRIPTION: Enter debugger command loop - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDbStartCommand ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op) -{ - ACPI_STATUS Status; - - - /* TBD: [Investigate] are there namespace locking issues here? */ - - /* AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); */ - - /* Go into the command loop and await next user command */ - - - AcpiGbl_MethodExecuting = TRUE; - Status = AE_CTRL_TRUE; - while (Status == AE_CTRL_TRUE) - { - if (AcpiGbl_DebuggerConfiguration == DEBUGGER_MULTI_THREADED) - { - /* Handshake with the front-end that gets user command lines */ - - Status = AcpiUtReleaseMutex (ACPI_MTX_DEBUG_CMD_COMPLETE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - Status = AcpiUtAcquireMutex (ACPI_MTX_DEBUG_CMD_READY); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - else - { - /* Single threaded, we must get a command line ourselves */ - - /* Force output to console until a command is entered */ - - AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT); - - /* Different prompt if method is executing */ - - if (!AcpiGbl_MethodExecuting) - { - AcpiOsPrintf ("%1c ", ACPI_DEBUGGER_COMMAND_PROMPT); - } - else - { - AcpiOsPrintf ("%1c ", ACPI_DEBUGGER_EXECUTE_PROMPT); - } - - /* Get the user input line */ - - (void) AcpiOsGetLine (AcpiGbl_DbLineBuf); - } - - Status = AcpiDbCommandDispatch (AcpiGbl_DbLineBuf, WalkState, Op); - } - - /* AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); */ - - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbSingleStep - * - * PARAMETERS: WalkState - Current walk - * Op - Current executing op (from aml interpreter) - * OpcodeClass - Class of the current AML Opcode - * - * RETURN: Status - * - * DESCRIPTION: Called just before execution of an AML opcode. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDbSingleStep ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op, - UINT32 OpcodeClass) -{ - ACPI_PARSE_OBJECT *Next; - ACPI_STATUS Status = AE_OK; - UINT32 OriginalDebugLevel; - ACPI_PARSE_OBJECT *DisplayOp; - ACPI_PARSE_OBJECT *ParentOp; - - - ACPI_FUNCTION_ENTRY (); - - - /* Check the abort flag */ - - if (AcpiGbl_AbortMethod) - { - AcpiGbl_AbortMethod = FALSE; - return (AE_ABORT_METHOD); - } - - /* Check for single-step breakpoint */ - - if (WalkState->MethodBreakpoint && - (WalkState->MethodBreakpoint <= Op->Common.AmlOffset)) - { - /* Check if the breakpoint has been reached or passed */ - /* Hit the breakpoint, resume single step, reset breakpoint */ - - AcpiOsPrintf ("***Break*** at AML offset %X\n", Op->Common.AmlOffset); - AcpiGbl_CmSingleStep = TRUE; - AcpiGbl_StepToNextCall = FALSE; - WalkState->MethodBreakpoint = 0; - } - - /* Check for user breakpoint (Must be on exact Aml offset) */ - - else if (WalkState->UserBreakpoint && - (WalkState->UserBreakpoint == Op->Common.AmlOffset)) - { - AcpiOsPrintf ("***UserBreakpoint*** at AML offset %X\n", - Op->Common.AmlOffset); - AcpiGbl_CmSingleStep = TRUE; - AcpiGbl_StepToNextCall = FALSE; - WalkState->MethodBreakpoint = 0; - } - - /* - * Check if this is an opcode that we are interested in -- - * namely, opcodes that have arguments - */ - if (Op->Common.AmlOpcode == AML_INT_NAMEDFIELD_OP) - { - return (AE_OK); - } - - switch (OpcodeClass) - { - case AML_CLASS_UNKNOWN: - case AML_CLASS_ARGUMENT: /* constants, literals, etc. do nothing */ - return (AE_OK); - - default: - /* All other opcodes -- continue */ - break; - } - - /* - * Under certain debug conditions, display this opcode and its operands - */ - if ((AcpiGbl_DbOutputToFile) || - (AcpiGbl_CmSingleStep) || - (AcpiDbgLevel & ACPI_LV_PARSE)) - { - if ((AcpiGbl_DbOutputToFile) || - (AcpiDbgLevel & ACPI_LV_PARSE)) - { - AcpiOsPrintf ("\n[AmlDebug] Next AML Opcode to execute:\n"); - } - - /* - * Display this op (and only this op - zero out the NEXT field - * temporarily, and disable parser trace output for the duration of - * the display because we don't want the extraneous debug output) - */ - OriginalDebugLevel = AcpiDbgLevel; - AcpiDbgLevel &= ~(ACPI_LV_PARSE | ACPI_LV_FUNCTIONS); - Next = Op->Common.Next; - Op->Common.Next = NULL; - - - DisplayOp = Op; - ParentOp = Op->Common.Parent; - if (ParentOp) - { - if ((WalkState->ControlState) && - (WalkState->ControlState->Common.State == - ACPI_CONTROL_PREDICATE_EXECUTING)) - { - /* - * We are executing the predicate of an IF or WHILE statement - * Search upwards for the containing IF or WHILE so that the - * entire predicate can be displayed. - */ - while (ParentOp) - { - if ((ParentOp->Common.AmlOpcode == AML_IF_OP) || - (ParentOp->Common.AmlOpcode == AML_WHILE_OP)) - { - DisplayOp = ParentOp; - break; - } - ParentOp = ParentOp->Common.Parent; - } - } - else - { - while (ParentOp) - { - if ((ParentOp->Common.AmlOpcode == AML_IF_OP) || - (ParentOp->Common.AmlOpcode == AML_ELSE_OP) || - (ParentOp->Common.AmlOpcode == AML_SCOPE_OP) || - (ParentOp->Common.AmlOpcode == AML_METHOD_OP) || - (ParentOp->Common.AmlOpcode == AML_WHILE_OP)) - { - break; - } - DisplayOp = ParentOp; - ParentOp = ParentOp->Common.Parent; - } - } - } - - /* Now we can display it */ - - AcpiDmDisassemble (WalkState, DisplayOp, ACPI_UINT32_MAX); - - if ((Op->Common.AmlOpcode == AML_IF_OP) || - (Op->Common.AmlOpcode == AML_WHILE_OP)) - { - if (WalkState->ControlState->Common.Value) - { - AcpiOsPrintf ("Predicate = [True], IF block was executed\n"); - } - else - { - AcpiOsPrintf ("Predicate = [False], Skipping IF block\n"); - } - } - else if (Op->Common.AmlOpcode == AML_ELSE_OP) - { - AcpiOsPrintf ("Predicate = [False], ELSE block was executed\n"); - } - - /* Restore everything */ - - Op->Common.Next = Next; - AcpiOsPrintf ("\n"); - if ((AcpiGbl_DbOutputToFile) || - (AcpiDbgLevel & ACPI_LV_PARSE)) - { - AcpiOsPrintf ("\n"); - } - AcpiDbgLevel = OriginalDebugLevel; - } - - /* If we are not single stepping, just continue executing the method */ - - if (!AcpiGbl_CmSingleStep) - { - return (AE_OK); - } - - /* - * If we are executing a step-to-call command, - * Check if this is a method call. - */ - if (AcpiGbl_StepToNextCall) - { - if (Op->Common.AmlOpcode != AML_INT_METHODCALL_OP) - { - /* Not a method call, just keep executing */ - - return (AE_OK); - } - - /* Found a method call, stop executing */ - - AcpiGbl_StepToNextCall = FALSE; - } - - /* - * If the next opcode is a method call, we will "step over" it - * by default. - */ - if (Op->Common.AmlOpcode == AML_INT_METHODCALL_OP) - { - /* Force no more single stepping while executing called method */ - - AcpiGbl_CmSingleStep = FALSE; - - /* - * Set the breakpoint on/before the call, it will stop execution - * as soon as we return - */ - WalkState->MethodBreakpoint = 1; /* Must be non-zero! */ - } - - - Status = AcpiDbStartCommand (WalkState, Op); - - /* User commands complete, continue execution of the interrupted method */ - - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbInitialize - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Init and start debugger - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDbInitialize ( - void) -{ - ACPI_STATUS Status; - - - /* Init globals */ - - AcpiGbl_DbBuffer = NULL; - AcpiGbl_DbFilename = NULL; - AcpiGbl_DbOutputToFile = FALSE; - - AcpiGbl_DbDebugLevel = ACPI_LV_VERBOSITY2; - AcpiGbl_DbConsoleDebugLevel = ACPI_NORMAL_DEFAULT | ACPI_LV_TABLES; - AcpiGbl_DbOutputFlags = ACPI_DB_CONSOLE_OUTPUT; - - AcpiGbl_DbOpt_tables = FALSE; - AcpiGbl_DbOpt_disasm = FALSE; - AcpiGbl_DbOpt_stats = FALSE; - AcpiGbl_DbOpt_verbose = TRUE; - AcpiGbl_DbOpt_ini_methods = TRUE; - - AcpiGbl_DbBuffer = AcpiOsAllocate (ACPI_DEBUG_BUFFER_SIZE); - if (!AcpiGbl_DbBuffer) - { - return (AE_NO_MEMORY); - } - ACPI_MEMSET (AcpiGbl_DbBuffer, 0, ACPI_DEBUG_BUFFER_SIZE); - - /* Initial scope is the root */ - - AcpiGbl_DbScopeBuf [0] = '\\'; - AcpiGbl_DbScopeBuf [1] = 0; - AcpiGbl_DbScopeNode = AcpiGbl_RootNode; - - /* - * If configured for multi-thread support, the debug executor runs in - * a separate thread so that the front end can be in another address - * space, environment, or even another machine. - */ - if (AcpiGbl_DebuggerConfiguration & DEBUGGER_MULTI_THREADED) - { - /* These were created with one unit, grab it */ - - Status = AcpiUtAcquireMutex (ACPI_MTX_DEBUG_CMD_COMPLETE); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not get debugger mutex\n"); - return (Status); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_DEBUG_CMD_READY); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not get debugger mutex\n"); - return (Status); - } - - /* Create the debug execution thread to execute commands */ - - Status = AcpiOsExecute (OSL_DEBUGGER_THREAD, AcpiDbExecuteThread, NULL); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not start debugger thread\n"); - return (Status); - } - } - - if (!AcpiGbl_DbOpt_verbose) - { - AcpiGbl_DbOpt_disasm = TRUE; - AcpiGbl_DbOpt_stats = FALSE; - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDbTerminate - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Stop debugger - * - ******************************************************************************/ - -void -AcpiDbTerminate ( - void) -{ - - if (AcpiGbl_DbBuffer) - { - AcpiOsFree (AcpiGbl_DbBuffer); - } -} - - -#ifdef ACPI_OBSOLETE_FUNCTIONS -/******************************************************************************* - * - * FUNCTION: AcpiDbMethodEnd - * - * PARAMETERS: WalkState - Current walk - * - * RETURN: Status - * - * DESCRIPTION: Called at method termination - * - ******************************************************************************/ - -void -AcpiDbMethodEnd ( - ACPI_WALK_STATE *WalkState) -{ - - if (!AcpiGbl_CmSingleStep) - { - return; - } - - AcpiOsPrintf ("\n"); - - AcpiDbStartCommand (WalkState, NULL); -} -#endif - -#endif /* ACPI_DEBUGGER */ diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmbuffer.c b/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmbuffer.c deleted file mode 100644 index 5a4d1742f..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmbuffer.c +++ /dev/null @@ -1,614 +0,0 @@ -/******************************************************************************* - * - * Module Name: dmbuffer - AML disassembler, buffer and string support - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acdisasm.h" -#include "acparser.h" -#include "amlcode.h" - - -#ifdef ACPI_DISASSEMBLER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dmbuffer") - -/* Local prototypes */ - -static void -AcpiDmUnicode ( - ACPI_PARSE_OBJECT *Op); - -static void -AcpiDmIsEisaIdElement ( - ACPI_PARSE_OBJECT *Op); - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDisasmByteList - * - * PARAMETERS: Level - Current source code indentation level - * ByteData - Pointer to the byte list - * ByteCount - Length of the byte list - * - * RETURN: None - * - * DESCRIPTION: Dump an AML "ByteList" in Hex format. 8 bytes per line, prefixed - * with the hex buffer offset. - * - ******************************************************************************/ - -void -AcpiDmDisasmByteList ( - UINT32 Level, - UINT8 *ByteData, - UINT32 ByteCount) -{ - UINT32 i; - - - if (!ByteCount) - { - return; - } - - /* Dump the byte list */ - - for (i = 0; i < ByteCount; i++) - { - /* New line every 8 bytes */ - - if (((i % 8) == 0) && (i < ByteCount)) - { - if (i > 0) - { - AcpiOsPrintf ("\n"); - } - - AcpiDmIndent (Level); - if (ByteCount > 7) - { - AcpiOsPrintf ("/* %04X */ ", i); - } - } - - AcpiOsPrintf ("0x%2.2X", (UINT32) ByteData[i]); - - /* Add comma if there are more bytes to display */ - - if (i < (ByteCount -1)) - { - AcpiOsPrintf (", "); - } - } - - if (Level) - { - AcpiOsPrintf ("\n"); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmByteList - * - * PARAMETERS: Info - Parse tree walk info - * Op - Byte list op - * - * RETURN: None - * - * DESCRIPTION: Dump a buffer byte list, handling the various types of buffers. - * Buffer type must be already set in the Op DisasmOpcode. - * - ******************************************************************************/ - -void -AcpiDmByteList ( - ACPI_OP_WALK_INFO *Info, - ACPI_PARSE_OBJECT *Op) -{ - UINT8 *ByteData; - UINT32 ByteCount; - - - ByteData = Op->Named.Data; - ByteCount = (UINT32) Op->Common.Value.Integer; - - /* - * The byte list belongs to a buffer, and can be produced by either - * a ResourceTemplate, Unicode, quoted string, or a plain byte list. - */ - switch (Op->Common.Parent->Common.DisasmOpcode) - { - case ACPI_DASM_RESOURCE: - - AcpiDmResourceTemplate (Info, Op->Common.Parent, ByteData, ByteCount); - break; - - case ACPI_DASM_STRING: - - AcpiDmIndent (Info->Level); - AcpiUtPrintString ((char *) ByteData, ACPI_UINT8_MAX); - AcpiOsPrintf ("\n"); - break; - - case ACPI_DASM_UNICODE: - - AcpiDmUnicode (Op); - break; - - case ACPI_DASM_BUFFER: - default: - - /* - * Not a resource, string, or unicode string. - * Just dump the buffer - */ - AcpiDmDisasmByteList (Info->Level, ByteData, ByteCount); - break; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmIsUnicodeBuffer - * - * PARAMETERS: Op - Buffer Object to be examined - * - * RETURN: TRUE if buffer contains a UNICODE string - * - * DESCRIPTION: Determine if a buffer Op contains a Unicode string - * - ******************************************************************************/ - -BOOLEAN -AcpiDmIsUnicodeBuffer ( - ACPI_PARSE_OBJECT *Op) -{ - UINT8 *ByteData; - UINT32 ByteCount; - UINT32 WordCount; - ACPI_PARSE_OBJECT *SizeOp; - ACPI_PARSE_OBJECT *NextOp; - UINT32 i; - - - /* Buffer size is the buffer argument */ - - SizeOp = Op->Common.Value.Arg; - - /* Next, the initializer byte list to examine */ - - NextOp = SizeOp->Common.Next; - if (!NextOp) - { - return (FALSE); - } - - /* Extract the byte list info */ - - ByteData = NextOp->Named.Data; - ByteCount = (UINT32) NextOp->Common.Value.Integer; - WordCount = ACPI_DIV_2 (ByteCount); - - /* - * Unicode string must have an even number of bytes and last - * word must be zero - */ - if ((!ByteCount) || - (ByteCount < 4) || - (ByteCount & 1) || - ((UINT16 *) (void *) ByteData)[WordCount - 1] != 0) - { - return (FALSE); - } - - /* For each word, 1st byte must be ascii, 2nd byte must be zero */ - - for (i = 0; i < (ByteCount - 2); i += 2) - { - if ((!ACPI_IS_PRINT (ByteData[i])) || - (ByteData[(ACPI_SIZE) i + 1] != 0)) - { - return (FALSE); - } - } - - /* Ignore the Size argument in the disassembly of this buffer op */ - - SizeOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; - return (TRUE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmIsStringBuffer - * - * PARAMETERS: Op - Buffer Object to be examined - * - * RETURN: TRUE if buffer contains a ASCII string, FALSE otherwise - * - * DESCRIPTION: Determine if a buffer Op contains a ASCII string - * - ******************************************************************************/ - -BOOLEAN -AcpiDmIsStringBuffer ( - ACPI_PARSE_OBJECT *Op) -{ - UINT8 *ByteData; - UINT32 ByteCount; - ACPI_PARSE_OBJECT *SizeOp; - ACPI_PARSE_OBJECT *NextOp; - UINT32 i; - - - /* Buffer size is the buffer argument */ - - SizeOp = Op->Common.Value.Arg; - - /* Next, the initializer byte list to examine */ - - NextOp = SizeOp->Common.Next; - if (!NextOp) - { - return (FALSE); - } - - /* Extract the byte list info */ - - ByteData = NextOp->Named.Data; - ByteCount = (UINT32) NextOp->Common.Value.Integer; - - /* Last byte must be the null terminator */ - - if ((!ByteCount) || - (ByteCount < 2) || - (ByteData[ByteCount-1] != 0)) - { - return (FALSE); - } - - for (i = 0; i < (ByteCount - 1); i++) - { - /* TBD: allow some escapes (non-ascii chars). - * they will be handled in the string output routine - */ - - if (!ACPI_IS_PRINT (ByteData[i])) - { - return (FALSE); - } - } - - return (TRUE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmUnicode - * - * PARAMETERS: Op - Byte List op containing Unicode string - * - * RETURN: None - * - * DESCRIPTION: Dump Unicode string as a standard ASCII string. (Remove - * the extra zero bytes). - * - ******************************************************************************/ - -static void -AcpiDmUnicode ( - ACPI_PARSE_OBJECT *Op) -{ - UINT16 *WordData; - UINT32 WordCount; - UINT32 i; - - - /* Extract the buffer info as a WORD buffer */ - - WordData = ACPI_CAST_PTR (UINT16, Op->Named.Data); - WordCount = ACPI_DIV_2 (((UINT32) Op->Common.Value.Integer)); - - - AcpiOsPrintf ("\""); - - /* Write every other byte as an ASCII character */ - - for (i = 0; i < (WordCount - 1); i++) - { - AcpiOsPrintf ("%c", (int) WordData[i]); - } - - AcpiOsPrintf ("\")"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmIsEisaIdElement - * - * PARAMETERS: Op - Op to be examined - * - * RETURN: None - * - * DESCRIPTION: Determine if an Op (argument to _HID or _CID) can be converted - * to an EISA ID. - * - ******************************************************************************/ - -static void -AcpiDmIsEisaIdElement ( - ACPI_PARSE_OBJECT *Op) -{ - UINT32 BigEndianId; - UINT32 Prefix[3]; - UINT32 i; - - - /* The parameter must be either a word or a dword */ - - if ((Op->Common.AmlOpcode != AML_DWORD_OP) && - (Op->Common.AmlOpcode != AML_WORD_OP)) - { - return; - } - - /* Swap from little-endian to big-endian to simplify conversion */ - - BigEndianId = AcpiUtDwordByteSwap ((UINT32) Op->Common.Value.Integer); - - /* Create the 3 leading ASCII letters */ - - Prefix[0] = ((BigEndianId >> 26) & 0x1F) + 0x40; - Prefix[1] = ((BigEndianId >> 21) & 0x1F) + 0x40; - Prefix[2] = ((BigEndianId >> 16) & 0x1F) + 0x40; - - /* Verify that all 3 are ascii and alpha */ - - for (i = 0; i < 3; i++) - { - if (!ACPI_IS_ASCII (Prefix[i]) || - !ACPI_IS_ALPHA (Prefix[i])) - { - return; - } - } - - /* OK - mark this node as convertable to an EISA ID */ - - Op->Common.DisasmOpcode = ACPI_DASM_EISAID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmIsEisaId - * - * PARAMETERS: Op - Op to be examined - * - * RETURN: None - * - * DESCRIPTION: Determine if a Name() Op can be converted to an EisaId. - * - ******************************************************************************/ - -void -AcpiDmIsEisaId ( - ACPI_PARSE_OBJECT *Op) -{ - UINT32 Name; - ACPI_PARSE_OBJECT *NextOp; - - - /* Get the NameSegment */ - - Name = AcpiPsGetName (Op); - if (!Name) - { - return; - } - - NextOp = AcpiPsGetDepthNext (NULL, Op); - if (!NextOp) - { - return; - } - - /* Check for _HID - has one argument */ - - if (ACPI_COMPARE_NAME (&Name, METHOD_NAME__HID)) - { - AcpiDmIsEisaIdElement (NextOp); - return; - } - - /* Exit if not _CID */ - - if (!ACPI_COMPARE_NAME (&Name, METHOD_NAME__CID)) - { - return; - } - - /* _CID can contain a single argument or a package */ - - if (NextOp->Common.AmlOpcode != AML_PACKAGE_OP) - { - AcpiDmIsEisaIdElement (NextOp); - return; - } - - /* _CID with Package: get the package length */ - - NextOp = AcpiPsGetDepthNext (NULL, NextOp); - - /* Don't need to use the length, just walk the peer list */ - - NextOp = NextOp->Common.Next; - while (NextOp) - { - AcpiDmIsEisaIdElement (NextOp); - NextOp = NextOp->Common.Next; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmEisaId - * - * PARAMETERS: EncodedId - Raw encoded EISA ID. - * - * RETURN: None - * - * DESCRIPTION: Convert an encoded EISAID back to the original ASCII String. - * - ******************************************************************************/ - -void -AcpiDmEisaId ( - UINT32 EncodedId) -{ - UINT32 BigEndianId; - - - /* Swap from little-endian to big-endian to simplify conversion */ - - BigEndianId = AcpiUtDwordByteSwap (EncodedId); - - - /* Split to form "AAANNNN" string */ - - AcpiOsPrintf ("EisaId (\"%c%c%c%4.4X\")", - - /* Three Alpha characters (AAA), 5 bits each */ - - (int) ((BigEndianId >> 26) & 0x1F) + 0x40, - (int) ((BigEndianId >> 21) & 0x1F) + 0x40, - (int) ((BigEndianId >> 16) & 0x1F) + 0x40, - - /* Numeric part (NNNN) is simply the lower 16 bits */ - - (UINT32) (BigEndianId & 0xFFFF)); -} - -#endif diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmnames.c b/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmnames.c deleted file mode 100644 index b09d3d35f..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmnames.c +++ /dev/null @@ -1,525 +0,0 @@ -/******************************************************************************* - * - * Module Name: dmnames - AML disassembler, names, namestrings, pathnames - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "amlcode.h" -#include "acnamesp.h" -#include "acdisasm.h" - - -#ifdef ACPI_DISASSEMBLER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dmnames") - -/* Local prototypes */ - -#ifdef ACPI_OBSOLETE_FUNCTIONS -void -AcpiDmDisplayPath ( - ACPI_PARSE_OBJECT *Op); -#endif - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpName - * - * PARAMETERS: Name - 4 character ACPI name - * - * RETURN: Final length of name - * - * DESCRIPTION: Dump an ACPI name, minus any trailing underscores. - * - ******************************************************************************/ - -UINT32 -AcpiDmDumpName ( - UINT32 Name) -{ - UINT32 i; - UINT32 Length; - char NewName[4]; - - - /* Copy name locally in case the original name is not writeable */ - - *ACPI_CAST_PTR (UINT32, &NewName[0]) = Name; - - /* Ensure that the name is printable, even if we have to fix it */ - - AcpiUtRepairName (NewName); - - /* Remove all trailing underscores from the name */ - - Length = ACPI_NAME_SIZE; - for (i = (ACPI_NAME_SIZE - 1); i != 0; i--) - { - if (NewName[i] == '_') - { - Length--; - } - else - { - break; - } - } - - /* Dump the name, up to the start of the trailing underscores */ - - for (i = 0; i < Length; i++) - { - AcpiOsPrintf ("%c", NewName[i]); - } - - return (Length); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsDisplayObjectPathname - * - * PARAMETERS: WalkState - Current walk state - * Op - Object whose pathname is to be obtained - * - * RETURN: Status - * - * DESCRIPTION: Diplay the pathname associated with a named object. Two - * versions. One searches the parse tree (for parser-only - * applications suchas AcpiDump), and the other searches the - * ACPI namespace (the parse tree is probably deleted) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiPsDisplayObjectPathname ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - ACPI_BUFFER Buffer; - UINT32 DebugLevel; - - - /* Save current debug level so we don't get extraneous debug output */ - - DebugLevel = AcpiDbgLevel; - AcpiDbgLevel = 0; - - /* Just get the Node out of the Op object */ - - Node = Op->Common.Node; - if (!Node) - { - /* Node not defined in this scope, look it up */ - - Status = AcpiNsLookup (WalkState->ScopeInfo, Op->Common.Value.String, - ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, - WalkState, &(Node)); - - if (ACPI_FAILURE (Status)) - { - /* - * We can't get the pathname since the object - * is not in the namespace. This can happen during single - * stepping where a dynamic named object is *about* to be created. - */ - AcpiOsPrintf (" [Path not found]"); - goto Exit; - } - - /* Save it for next time. */ - - Op->Common.Node = Node; - } - - /* Convert NamedDesc/handle to a full pathname */ - - Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - Status = AcpiNsHandleToPathname (Node, &Buffer); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("****Could not get pathname****)"); - goto Exit; - } - - AcpiOsPrintf (" (Path %s)", (char *) Buffer.Pointer); - ACPI_FREE (Buffer.Pointer); - - -Exit: - /* Restore the debug level */ - - AcpiDbgLevel = DebugLevel; - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmNamestring - * - * PARAMETERS: Name - ACPI Name string to store - * - * RETURN: None - * - * DESCRIPTION: Decode and dump an ACPI namestring. Handles prefix characters - * - ******************************************************************************/ - -void -AcpiDmNamestring ( - char *Name) -{ - UINT32 SegCount; - - - if (!Name) - { - return; - } - - /* Handle all Scope Prefix operators */ - - while (AcpiPsIsPrefixChar (ACPI_GET8 (Name))) - { - /* Append prefix character */ - - AcpiOsPrintf ("%1c", ACPI_GET8 (Name)); - Name++; - } - - switch (ACPI_GET8 (Name)) - { - case 0: - SegCount = 0; - break; - - case AML_DUAL_NAME_PREFIX: - SegCount = 2; - Name++; - break; - - case AML_MULTI_NAME_PREFIX_OP: - SegCount = (UINT32) ACPI_GET8 (Name + 1); - Name += 2; - break; - - default: - SegCount = 1; - break; - } - - while (SegCount) - { - /* Append Name segment */ - - AcpiDmDumpName (*ACPI_CAST_PTR (UINT32, Name)); - - SegCount--; - if (SegCount) - { - /* Not last name, append dot separator */ - - AcpiOsPrintf ("."); - } - Name += ACPI_NAME_SIZE; - } -} - - -#ifdef ACPI_OBSOLETE_FUNCTIONS -/******************************************************************************* - * - * FUNCTION: AcpiDmDisplayPath - * - * PARAMETERS: Op - Named Op whose path is to be constructed - * - * RETURN: None - * - * DESCRIPTION: Walk backwards from current scope and display the name - * of each previous level of scope up to the root scope - * (like "pwd" does with file systems) - * - ******************************************************************************/ - -void -AcpiDmDisplayPath ( - ACPI_PARSE_OBJECT *Op) -{ - ACPI_PARSE_OBJECT *Prev; - ACPI_PARSE_OBJECT *Search; - UINT32 Name; - BOOLEAN DoDot = FALSE; - ACPI_PARSE_OBJECT *NamePath; - const ACPI_OPCODE_INFO *OpInfo; - - - /* We are only interested in named objects */ - - OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); - if (!(OpInfo->Flags & AML_NSNODE)) - { - return; - } - - if (OpInfo->Flags & AML_CREATE) - { - /* Field creation - check for a fully qualified namepath */ - - if (Op->Common.AmlOpcode == AML_CREATE_FIELD_OP) - { - NamePath = AcpiPsGetArg (Op, 3); - } - else - { - NamePath = AcpiPsGetArg (Op, 2); - } - - if ((NamePath) && - (NamePath->Common.Value.String) && - (NamePath->Common.Value.String[0] == '\\')) - { - AcpiDmNamestring (NamePath->Common.Value.String); - return; - } - } - - Prev = NULL; /* Start with Root Node */ - - while (Prev != Op) - { - /* Search upwards in the tree to find scope with "prev" as its parent */ - - Search = Op; - for (; ;) - { - if (Search->Common.Parent == Prev) - { - break; - } - - /* Go up one level */ - - Search = Search->Common.Parent; - } - - if (Prev) - { - OpInfo = AcpiPsGetOpcodeInfo (Search->Common.AmlOpcode); - if (!(OpInfo->Flags & AML_FIELD)) - { - /* Below root scope, append scope name */ - - if (DoDot) - { - /* Append dot */ - - AcpiOsPrintf ("."); - } - - if (OpInfo->Flags & AML_CREATE) - { - if (Op->Common.AmlOpcode == AML_CREATE_FIELD_OP) - { - NamePath = AcpiPsGetArg (Op, 3); - } - else - { - NamePath = AcpiPsGetArg (Op, 2); - } - - if ((NamePath) && - (NamePath->Common.Value.String)) - { - AcpiDmDumpName (NamePath->Common.Value.String); - } - } - else - { - Name = AcpiPsGetName (Search); - AcpiDmDumpName ((char *) &Name); - } - - DoDot = TRUE; - } - } - Prev = Search; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmValidateName - * - * PARAMETERS: Name - 4 character ACPI name - * - * RETURN: None - * - * DESCRIPTION: Lookup the name - * - ******************************************************************************/ - -void -AcpiDmValidateName ( - char *Name, - ACPI_PARSE_OBJECT *Op) -{ - - if ((!Name) || - (!Op->Common.Parent)) - { - return; - } - - if (!Op->Common.Node) - { - AcpiOsPrintf ( - " /**** Name not found or not accessible from this scope ****/ "); - } - - ACPI_PARSE_OBJECT *TargetOp; - - - if ((!Name) || - (!Op->Common.Parent)) - { - return; - } - - TargetOp = AcpiPsFind (Op, Name, 0, 0); - if (!TargetOp) - { - /* - * Didn't find the name in the parse tree. This may be - * a problem, or it may simply be one of the predefined names - * (such as _OS_). Rather than worry about looking up all - * the predefined names, just display the name as given - */ - AcpiOsPrintf ( - " /**** Name not found or not accessible from this scope ****/ "); - } -} -#endif - -#endif - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmobject.c b/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmobject.c deleted file mode 100644 index 0f569922a..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmobject.c +++ /dev/null @@ -1,661 +0,0 @@ -/******************************************************************************* - * - * Module Name: dmobject - ACPI object decode and display - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "acdisasm.h" - - -#ifdef ACPI_DISASSEMBLER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dmnames") - -/* Local prototypes */ - -static void -AcpiDmDecodeNode ( - ACPI_NAMESPACE_NODE *Node); - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpMethodInfo - * - * PARAMETERS: Status - Method execution status - * WalkState - Current state of the parse tree walk - * Op - Executing parse op - * - * RETURN: None - * - * DESCRIPTION: Called when a method has been aborted because of an error. - * Dumps the method execution stack, and the method locals/args, - * and disassembles the AML opcode that failed. - * - ******************************************************************************/ - -void -AcpiDmDumpMethodInfo ( - ACPI_STATUS Status, - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op) -{ - ACPI_PARSE_OBJECT *Next; - ACPI_THREAD_STATE *Thread; - ACPI_WALK_STATE *NextWalkState; - ACPI_NAMESPACE_NODE *PreviousMethod = NULL; - - - /* Ignore control codes, they are not errors */ - - if ((Status & AE_CODE_MASK) == AE_CODE_CONTROL) - { - return; - } - - /* We may be executing a deferred opcode */ - - if (WalkState->DeferredNode) - { - AcpiOsPrintf ("Executing subtree for Buffer/Package/Region\n"); - return; - } - - /* - * If there is no Thread, we are not actually executing a method. - * This can happen when the iASL compiler calls the interpreter - * to perform constant folding. - */ - Thread = WalkState->Thread; - if (!Thread) - { - return; - } - - /* Display exception and method name */ - - AcpiOsPrintf ("\n**** Exception %s during execution of method ", - AcpiFormatException (Status)); - AcpiNsPrintNodePathname (WalkState->MethodNode, NULL); - - /* Display stack of executing methods */ - - AcpiOsPrintf ("\n\nMethod Execution Stack:\n"); - NextWalkState = Thread->WalkStateList; - - /* Walk list of linked walk states */ - - while (NextWalkState) - { - AcpiOsPrintf (" Method [%4.4s] executing: ", - AcpiUtGetNodeName (NextWalkState->MethodNode)); - - /* First method is the currently executing method */ - - if (NextWalkState == WalkState) - { - if (Op) - { - /* Display currently executing ASL statement */ - - Next = Op->Common.Next; - Op->Common.Next = NULL; - - AcpiDmDisassemble (NextWalkState, Op, ACPI_UINT32_MAX); - Op->Common.Next = Next; - } - } - else - { - /* - * This method has called another method - * NOTE: the method call parse subtree is already deleted at this - * point, so we cannot disassemble the method invocation. - */ - AcpiOsPrintf ("Call to method "); - AcpiNsPrintNodePathname (PreviousMethod, NULL); - } - - PreviousMethod = NextWalkState->MethodNode; - NextWalkState = NextWalkState->Next; - AcpiOsPrintf ("\n"); - } - - /* Display the method locals and arguments */ - - AcpiOsPrintf ("\n"); - AcpiDmDisplayLocals (WalkState); - AcpiOsPrintf ("\n"); - AcpiDmDisplayArguments (WalkState); - AcpiOsPrintf ("\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDecodeInternalObject - * - * PARAMETERS: ObjDesc - Object to be displayed - * - * RETURN: None - * - * DESCRIPTION: Short display of an internal object. Numbers/Strings/Buffers. - * - ******************************************************************************/ - -void -AcpiDmDecodeInternalObject ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - UINT32 i; - - - if (!ObjDesc) - { - AcpiOsPrintf (" Uninitialized"); - return; - } - - if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) - { - AcpiOsPrintf (" %p [%s]", ObjDesc, AcpiUtGetDescriptorName (ObjDesc)); - return; - } - - AcpiOsPrintf (" %s", AcpiUtGetObjectTypeName (ObjDesc)); - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_INTEGER: - - AcpiOsPrintf (" %8.8X%8.8X", - ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); - break; - - - case ACPI_TYPE_STRING: - - AcpiOsPrintf ("(%d) \"%.24s", - ObjDesc->String.Length, ObjDesc->String.Pointer); - - if (ObjDesc->String.Length > 24) - { - AcpiOsPrintf ("..."); - } - else - { - AcpiOsPrintf ("\""); - } - break; - - - case ACPI_TYPE_BUFFER: - - AcpiOsPrintf ("(%d)", ObjDesc->Buffer.Length); - for (i = 0; (i < 8) && (i < ObjDesc->Buffer.Length); i++) - { - AcpiOsPrintf (" %2.2X", ObjDesc->Buffer.Pointer[i]); - } - break; - - - default: - - AcpiOsPrintf (" %p", ObjDesc); - break; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDecodeNode - * - * PARAMETERS: Node - Object to be displayed - * - * RETURN: None - * - * DESCRIPTION: Short display of a namespace node - * - ******************************************************************************/ - -static void -AcpiDmDecodeNode ( - ACPI_NAMESPACE_NODE *Node) -{ - - AcpiOsPrintf (" Name %4.4s", - AcpiUtGetNodeName (Node)); - - if (Node->Flags & ANOBJ_METHOD_ARG) - { - AcpiOsPrintf (" [Method Arg]"); - } - if (Node->Flags & ANOBJ_METHOD_LOCAL) - { - AcpiOsPrintf (" [Method Local]"); - } - - switch (Node->Type) - { - /* These types have no attached object */ - - case ACPI_TYPE_DEVICE: - AcpiOsPrintf (" Device"); - break; - - case ACPI_TYPE_THERMAL: - AcpiOsPrintf (" Thermal Zone"); - break; - - default: - AcpiDmDecodeInternalObject (AcpiNsGetAttachedObject (Node)); - break; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDisplayInternalObject - * - * PARAMETERS: ObjDesc - Object to be displayed - * WalkState - Current walk state - * - * RETURN: None - * - * DESCRIPTION: Short display of an internal object - * - ******************************************************************************/ - -void -AcpiDmDisplayInternalObject ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_WALK_STATE *WalkState) -{ - UINT8 Type; - - - AcpiOsPrintf ("%p ", ObjDesc); - - if (!ObjDesc) - { - AcpiOsPrintf ("\n"); - return; - } - - /* Decode the object type */ - - switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc)) - { - case ACPI_DESC_TYPE_PARSER: - - AcpiOsPrintf (" "); - break; - - - case ACPI_DESC_TYPE_NAMED: - - AcpiDmDecodeNode ((ACPI_NAMESPACE_NODE *) ObjDesc); - break; - - - case ACPI_DESC_TYPE_OPERAND: - - Type = ObjDesc->Common.Type; - if (Type > ACPI_TYPE_LOCAL_MAX) - { - AcpiOsPrintf (" Type %X [Invalid Type]", (UINT32) Type); - return; - } - - /* Decode the ACPI object type */ - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_LOCAL_REFERENCE: - - AcpiOsPrintf ("[%s] ", AcpiUtGetReferenceName (ObjDesc)); - - /* Decode the refererence */ - - switch (ObjDesc->Reference.Class) - { - case ACPI_REFCLASS_LOCAL: - - AcpiOsPrintf ("%X ", ObjDesc->Reference.Value); - if (WalkState) - { - ObjDesc = WalkState->LocalVariables - [ObjDesc->Reference.Value].Object; - AcpiOsPrintf ("%p", ObjDesc); - AcpiDmDecodeInternalObject (ObjDesc); - } - break; - - - case ACPI_REFCLASS_ARG: - - AcpiOsPrintf ("%X ", ObjDesc->Reference.Value); - if (WalkState) - { - ObjDesc = WalkState->Arguments - [ObjDesc->Reference.Value].Object; - AcpiOsPrintf ("%p", ObjDesc); - AcpiDmDecodeInternalObject (ObjDesc); - } - break; - - - case ACPI_REFCLASS_INDEX: - - switch (ObjDesc->Reference.TargetType) - { - case ACPI_TYPE_BUFFER_FIELD: - - AcpiOsPrintf ("%p", ObjDesc->Reference.Object); - AcpiDmDecodeInternalObject (ObjDesc->Reference.Object); - break; - - case ACPI_TYPE_PACKAGE: - - AcpiOsPrintf ("%p", ObjDesc->Reference.Where); - if (!ObjDesc->Reference.Where) - { - AcpiOsPrintf (" Uninitialized WHERE pointer"); - } - else - { - AcpiDmDecodeInternalObject ( - *(ObjDesc->Reference.Where)); - } - break; - - default: - - AcpiOsPrintf ("Unknown index target type"); - break; - } - break; - - - case ACPI_REFCLASS_REFOF: - - if (!ObjDesc->Reference.Object) - { - AcpiOsPrintf ("Uninitialized reference subobject pointer"); - break; - } - - /* Reference can be to a Node or an Operand object */ - - switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc->Reference.Object)) - { - case ACPI_DESC_TYPE_NAMED: - AcpiDmDecodeNode (ObjDesc->Reference.Object); - break; - - case ACPI_DESC_TYPE_OPERAND: - AcpiDmDecodeInternalObject (ObjDesc->Reference.Object); - break; - - default: - break; - } - break; - - - case ACPI_REFCLASS_NAME: - - AcpiDmDecodeNode (ObjDesc->Reference.Node); - break; - - - case ACPI_REFCLASS_DEBUG: - case ACPI_REFCLASS_TABLE: - - AcpiOsPrintf ("\n"); - break; - - - default: /* Unknown reference class */ - - AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class); - break; - } - break; - - - default: - - AcpiOsPrintf (" "); - AcpiDmDecodeInternalObject (ObjDesc); - break; - } - break; - - - default: - - AcpiOsPrintf (" [%s]", - AcpiUtGetDescriptorName (ObjDesc)); - break; - } - - AcpiOsPrintf ("\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDisplayLocals - * - * PARAMETERS: WalkState - State for current method - * - * RETURN: None - * - * DESCRIPTION: Display all locals for the currently running control method - * - ******************************************************************************/ - -void -AcpiDmDisplayLocals ( - ACPI_WALK_STATE *WalkState) -{ - UINT32 i; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_NAMESPACE_NODE *Node; - - - ObjDesc = WalkState->MethodDesc; - Node = WalkState->MethodNode; - if (!Node) - { - AcpiOsPrintf ( - "No method node (Executing subtree for buffer or opregion)\n"); - return; - } - - if (Node->Type != ACPI_TYPE_METHOD) - { - AcpiOsPrintf ("Executing subtree for Buffer/Package/Region\n"); - return; - } - - AcpiOsPrintf ("Local Variables for method [%4.4s]:\n", - AcpiUtGetNodeName (Node)); - - for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++) - { - ObjDesc = WalkState->LocalVariables[i].Object; - AcpiOsPrintf (" Local%X: ", i); - AcpiDmDisplayInternalObject (ObjDesc, WalkState); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDisplayArguments - * - * PARAMETERS: WalkState - State for current method - * - * RETURN: None - * - * DESCRIPTION: Display all arguments for the currently running control method - * - ******************************************************************************/ - -void -AcpiDmDisplayArguments ( - ACPI_WALK_STATE *WalkState) -{ - UINT32 i; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_NAMESPACE_NODE *Node; - - - ObjDesc = WalkState->MethodDesc; - Node = WalkState->MethodNode; - if (!Node) - { - AcpiOsPrintf ( - "No method node (Executing subtree for buffer or opregion)\n"); - return; - } - - if (Node->Type != ACPI_TYPE_METHOD) - { - AcpiOsPrintf ("Executing subtree for Buffer/Package/Region\n"); - return; - } - - AcpiOsPrintf ( - "Arguments for Method [%4.4s]: (%X arguments defined, max concurrency = %X)\n", - AcpiUtGetNodeName (Node), ObjDesc->Method.ParamCount, ObjDesc->Method.SyncLevel); - - for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++) - { - ObjDesc = WalkState->Arguments[i].Object; - AcpiOsPrintf (" Arg%d: ", i); - AcpiDmDisplayInternalObject (ObjDesc, WalkState); - } -} - -#endif - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmopcode.c b/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmopcode.c deleted file mode 100644 index 931ef6c0d..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmopcode.c +++ /dev/null @@ -1,632 +0,0 @@ -/******************************************************************************* - * - * Module Name: dmopcode - AML disassembler, specific AML opcodes - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "amlcode.h" -#include "acdisasm.h" - -#ifdef ACPI_DISASSEMBLER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dmopcode") - -/* Local prototypes */ - -static void -AcpiDmMatchKeyword ( - ACPI_PARSE_OBJECT *Op); - - -/******************************************************************************* - * - * FUNCTION: AcpiDmMethodFlags - * - * PARAMETERS: Op - Method Object to be examined - * - * RETURN: None - * - * DESCRIPTION: Decode control method flags - * - ******************************************************************************/ - -void -AcpiDmMethodFlags ( - ACPI_PARSE_OBJECT *Op) -{ - UINT32 Flags; - UINT32 Args; - - - /* The next Op contains the flags */ - - Op = AcpiPsGetDepthNext (NULL, Op); - Flags = (UINT8) Op->Common.Value.Integer; - Args = Flags & 0x07; - - /* Mark the Op as completed */ - - Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; - - /* 1) Method argument count */ - - AcpiOsPrintf (", %d, ", Args); - - /* 2) Serialize rule */ - - if (!(Flags & 0x08)) - { - AcpiOsPrintf ("Not"); - } - - AcpiOsPrintf ("Serialized"); - - /* 3) SyncLevel */ - - if (Flags & 0xF0) - { - AcpiOsPrintf (", %d", Flags >> 4); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmFieldFlags - * - * PARAMETERS: Op - Field Object to be examined - * - * RETURN: None - * - * DESCRIPTION: Decode Field definition flags - * - ******************************************************************************/ - -void -AcpiDmFieldFlags ( - ACPI_PARSE_OBJECT *Op) -{ - UINT32 Flags; - - - Op = Op->Common.Next; - Flags = (UINT8) Op->Common.Value.Integer; - - /* Mark the Op as completed */ - - Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; - - AcpiOsPrintf ("%s, ", AcpiGbl_AccessTypes [Flags & 0x07]); - AcpiOsPrintf ("%s, ", AcpiGbl_LockRule [(Flags & 0x10) >> 4]); - AcpiOsPrintf ("%s)", AcpiGbl_UpdateRules [(Flags & 0x60) >> 5]); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmAddressSpace - * - * PARAMETERS: SpaceId - ID to be translated - * - * RETURN: None - * - * DESCRIPTION: Decode a SpaceId to an AddressSpaceKeyword - * - ******************************************************************************/ - -void -AcpiDmAddressSpace ( - UINT8 SpaceId) -{ - - if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS) - { - if (SpaceId == 0x7F) - { - AcpiOsPrintf ("FFixedHW, "); - } - else - { - AcpiOsPrintf ("0x%.2X, ", SpaceId); - } - } - else - { - AcpiOsPrintf ("%s, ", AcpiGbl_RegionTypes [SpaceId]); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmRegionFlags - * - * PARAMETERS: Op - Object to be examined - * - * RETURN: None - * - * DESCRIPTION: Decode OperationRegion flags - * - ******************************************************************************/ - -void -AcpiDmRegionFlags ( - ACPI_PARSE_OBJECT *Op) -{ - - - /* The next Op contains the SpaceId */ - - Op = AcpiPsGetDepthNext (NULL, Op); - - /* Mark the Op as completed */ - - Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; - - AcpiOsPrintf (", "); - AcpiDmAddressSpace ((UINT8) Op->Common.Value.Integer); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmMatchOp - * - * PARAMETERS: Op - Match Object to be examined - * - * RETURN: None - * - * DESCRIPTION: Decode Match opcode operands - * - ******************************************************************************/ - -void -AcpiDmMatchOp ( - ACPI_PARSE_OBJECT *Op) -{ - ACPI_PARSE_OBJECT *NextOp; - - - NextOp = AcpiPsGetDepthNext (NULL, Op); - NextOp = NextOp->Common.Next; - - if (!NextOp) - { - /* Handle partial tree during single-step */ - - return; - } - - /* Mark the two nodes that contain the encoding for the match keywords */ - - NextOp->Common.DisasmOpcode = ACPI_DASM_MATCHOP; - - NextOp = NextOp->Common.Next; - NextOp = NextOp->Common.Next; - NextOp->Common.DisasmOpcode = ACPI_DASM_MATCHOP; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmMatchKeyword - * - * PARAMETERS: Op - Match Object to be examined - * - * RETURN: None - * - * DESCRIPTION: Decode Match opcode operands - * - ******************************************************************************/ - -static void -AcpiDmMatchKeyword ( - ACPI_PARSE_OBJECT *Op) -{ - - - if (((UINT32) Op->Common.Value.Integer) > ACPI_MAX_MATCH_OPCODE) - { - AcpiOsPrintf ("/* Unknown Match Keyword encoding */"); - } - else - { - AcpiOsPrintf ("%s", ACPI_CAST_PTR (char, - AcpiGbl_MatchOps[(ACPI_SIZE) Op->Common.Value.Integer])); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDisassembleOneOp - * - * PARAMETERS: WalkState - Current walk info - * Info - Parse tree walk info - * Op - Op that is to be printed - * - * RETURN: None - * - * DESCRIPTION: Disassemble a single AML opcode - * - ******************************************************************************/ - -void -AcpiDmDisassembleOneOp ( - ACPI_WALK_STATE *WalkState, - ACPI_OP_WALK_INFO *Info, - ACPI_PARSE_OBJECT *Op) -{ - const ACPI_OPCODE_INFO *OpInfo = NULL; - UINT32 Offset; - UINT32 Length; - ACPI_PARSE_OBJECT *Child; - ACPI_STATUS Status; - - - if (!Op) - { - AcpiOsPrintf (""); - return; - } - - switch (Op->Common.DisasmOpcode) - { - case ACPI_DASM_MATCHOP: - - AcpiDmMatchKeyword (Op); - return; - - case ACPI_DASM_LNOT_SUFFIX: - switch (Op->Common.AmlOpcode) - { - case AML_LEQUAL_OP: - AcpiOsPrintf ("LNotEqual"); - break; - - case AML_LGREATER_OP: - AcpiOsPrintf ("LLessEqual"); - break; - - case AML_LLESS_OP: - AcpiOsPrintf ("LGreaterEqual"); - break; - - default: - break; - } - Op->Common.DisasmOpcode = 0; - Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; - return; - - default: - break; - } - - - OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); - - /* The op and arguments */ - - switch (Op->Common.AmlOpcode) - { - case AML_LNOT_OP: - - Child = Op->Common.Value.Arg; - if ((Child->Common.AmlOpcode == AML_LEQUAL_OP) || - (Child->Common.AmlOpcode == AML_LGREATER_OP) || - (Child->Common.AmlOpcode == AML_LLESS_OP)) - { - Child->Common.DisasmOpcode = ACPI_DASM_LNOT_SUFFIX; - Op->Common.DisasmOpcode = ACPI_DASM_LNOT_PREFIX; - } - else - { - AcpiOsPrintf ("%s", OpInfo->Name); - } - break; - - case AML_BYTE_OP: - - AcpiOsPrintf ("0x%2.2X", (UINT32) Op->Common.Value.Integer); - break; - - - case AML_WORD_OP: - - if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID) - { - AcpiDmEisaId ((UINT32) Op->Common.Value.Integer); - } - else - { - AcpiOsPrintf ("0x%4.4X", (UINT32) Op->Common.Value.Integer); - } - break; - - - case AML_DWORD_OP: - - if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID) - { - AcpiDmEisaId ((UINT32) Op->Common.Value.Integer); - } - else - { - AcpiOsPrintf ("0x%8.8X", (UINT32) Op->Common.Value.Integer); - } - break; - - - case AML_QWORD_OP: - - AcpiOsPrintf ("0x%8.8X%8.8X", Op->Common.Value.Integer64.Hi, - Op->Common.Value.Integer64.Lo); - break; - - - case AML_STRING_OP: - - AcpiUtPrintString (Op->Common.Value.String, ACPI_UINT8_MAX); - break; - - - case AML_BUFFER_OP: - - /* - * Determine the type of buffer. We can have one of the following: - * - * 1) ResourceTemplate containing Resource Descriptors. - * 2) Unicode String buffer - * 3) ASCII String buffer - * 4) Raw data buffer (if none of the above) - * - * Since there are no special AML opcodes to differentiate these - * types of buffers, we have to closely look at the data in the - * buffer to determine the type. - */ - Status = AcpiDmIsResourceTemplate (Op); - if (ACPI_SUCCESS (Status)) - { - Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE; - AcpiOsPrintf ("ResourceTemplate"); - break; - } - else if (Status == AE_AML_NO_RESOURCE_END_TAG) - { - AcpiOsPrintf ("/**** Is ResourceTemplate, but EndTag not at buffer end ****/ "); - } - - if (AcpiDmIsUnicodeBuffer (Op)) - { - Op->Common.DisasmOpcode = ACPI_DASM_UNICODE; - AcpiOsPrintf ("Unicode ("); - } - else if (AcpiDmIsStringBuffer (Op)) - { - Op->Common.DisasmOpcode = ACPI_DASM_STRING; - AcpiOsPrintf ("Buffer"); - } - else - { - Op->Common.DisasmOpcode = ACPI_DASM_BUFFER; - AcpiOsPrintf ("Buffer"); - } - break; - - - case AML_INT_STATICSTRING_OP: - - if (Op->Common.Value.String) - { - AcpiOsPrintf ("%s", Op->Common.Value.String); - } - else - { - AcpiOsPrintf ("\"\""); - } - break; - - - case AML_INT_NAMEPATH_OP: - - AcpiDmNamestring (Op->Common.Value.Name); - break; - - - case AML_INT_NAMEDFIELD_OP: - - Length = AcpiDmDumpName (Op->Named.Name); - AcpiOsPrintf (",%*.s %d", (int) (5 - Length), " ", - (UINT32) Op->Common.Value.Integer); - AcpiDmCommaIfFieldMember (Op); - - Info->BitOffset += (UINT32) Op->Common.Value.Integer; - break; - - - case AML_INT_RESERVEDFIELD_OP: - - /* Offset() -- Must account for previous offsets */ - - Offset = (UINT32) Op->Common.Value.Integer; - Info->BitOffset += Offset; - - if (Info->BitOffset % 8 == 0) - { - AcpiOsPrintf (" Offset (0x%.2X)", ACPI_DIV_8 (Info->BitOffset)); - } - else - { - AcpiOsPrintf (" , %d", Offset); - } - - AcpiDmCommaIfFieldMember (Op); - break; - - - case AML_INT_ACCESSFIELD_OP: - - AcpiOsPrintf (" AccessAs (%s, ", - AcpiGbl_AccessTypes [(UINT32) (Op->Common.Value.Integer >> 8) & 0x7]); - - AcpiDmDecodeAttribute ((UINT8) Op->Common.Value.Integer); - AcpiOsPrintf (")"); - AcpiDmCommaIfFieldMember (Op); - break; - - - case AML_INT_BYTELIST_OP: - - AcpiDmByteList (Info, Op); - break; - - - case AML_INT_METHODCALL_OP: - - Op = AcpiPsGetDepthNext (NULL, Op); - Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; - - AcpiDmNamestring (Op->Common.Value.Name); - break; - - - default: - - /* Just get the opcode name and print it */ - - AcpiOsPrintf ("%s", OpInfo->Name); - - -#ifdef ACPI_DEBUGGER - - if ((Op->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP) && - (WalkState) && - (WalkState->Results) && - (WalkState->ResultCount)) - { - AcpiDmDecodeInternalObject ( - WalkState->Results->Results.ObjDesc [ - (WalkState->ResultCount - 1) % - ACPI_RESULTS_FRAME_OBJ_NUM]); - } -#endif - - break; - } -} - -#endif /* ACPI_DISASSEMBLER */ diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmresrc.c b/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmresrc.c deleted file mode 100644 index f0fc4b1bd..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmresrc.c +++ /dev/null @@ -1,509 +0,0 @@ -/******************************************************************************* - * - * Module Name: dmresrc.c - Resource Descriptor disassembly - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "amlcode.h" -#include "acdisasm.h" - -#ifdef ACPI_DISASSEMBLER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dbresrc") - - -/* Dispatch tables for Resource disassembly functions */ - -typedef -void (*ACPI_RESOURCE_HANDLER) ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level); - -static ACPI_RESOURCE_HANDLER AcpiGbl_DmResourceDispatch [] = -{ - /* Small descriptors */ - - NULL, /* 0x00, Reserved */ - NULL, /* 0x01, Reserved */ - NULL, /* 0x02, Reserved */ - NULL, /* 0x03, Reserved */ - AcpiDmIrqDescriptor, /* 0x04, ACPI_RESOURCE_NAME_IRQ_FORMAT */ - AcpiDmDmaDescriptor, /* 0x05, ACPI_RESOURCE_NAME_DMA_FORMAT */ - AcpiDmStartDependentDescriptor, /* 0x06, ACPI_RESOURCE_NAME_START_DEPENDENT */ - AcpiDmEndDependentDescriptor, /* 0x07, ACPI_RESOURCE_NAME_END_DEPENDENT */ - AcpiDmIoDescriptor, /* 0x08, ACPI_RESOURCE_NAME_IO_PORT */ - AcpiDmFixedIoDescriptor, /* 0x09, ACPI_RESOURCE_NAME_FIXED_IO_PORT */ - NULL, /* 0x0A, Reserved */ - NULL, /* 0x0B, Reserved */ - NULL, /* 0x0C, Reserved */ - NULL, /* 0x0D, Reserved */ - AcpiDmVendorSmallDescriptor, /* 0x0E, ACPI_RESOURCE_NAME_SMALL_VENDOR */ - NULL, /* 0x0F, ACPI_RESOURCE_NAME_END_TAG (not used) */ - - /* Large descriptors */ - - NULL, /* 0x00, Reserved */ - AcpiDmMemory24Descriptor, /* 0x01, ACPI_RESOURCE_NAME_MEMORY_24 */ - AcpiDmGenericRegisterDescriptor,/* 0x02, ACPI_RESOURCE_NAME_GENERIC_REGISTER */ - NULL, /* 0x03, Reserved */ - AcpiDmVendorLargeDescriptor, /* 0x04, ACPI_RESOURCE_NAME_LARGE_VENDOR */ - AcpiDmMemory32Descriptor, /* 0x05, ACPI_RESOURCE_NAME_MEMORY_32 */ - AcpiDmFixedMemory32Descriptor, /* 0x06, ACPI_RESOURCE_NAME_FIXED_MEMORY_32 */ - AcpiDmDwordDescriptor, /* 0x07, ACPI_RESOURCE_NAME_DWORD_ADDRESS_SPACE */ - AcpiDmWordDescriptor, /* 0x08, ACPI_RESOURCE_NAME_WORD_ADDRESS_SPACE */ - AcpiDmInterruptDescriptor, /* 0x09, ACPI_RESOURCE_NAME_EXTENDED_XRUPT */ - AcpiDmQwordDescriptor, /* 0x0A, ACPI_RESOURCE_NAME_QWORD_ADDRESS_SPACE */ - AcpiDmExtendedDescriptor /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS_SPACE */ -}; - - -/* Only used for single-threaded applications */ -/* TBD: remove when name is passed as parameter to the dump functions */ - -static UINT32 ResourceName; - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDescriptorName - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Emit a name for the descriptor if one is present (indicated - * by the name being changed from the default name.) A name is only - * emitted if a reference to the descriptor has been made somewhere - * in the original ASL code. - * - ******************************************************************************/ - -void -AcpiDmDescriptorName ( - void) -{ - - if (ResourceName == ACPI_DEFAULT_RESNAME) - { - return; - } - - AcpiOsPrintf ("%4.4s", (char *) &ResourceName); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDumpInteger* - * - * PARAMETERS: Value - Value to emit - * Name - Associated name (emitted as a comment) - * - * RETURN: None - * - * DESCRIPTION: Integer output helper functions - * - ******************************************************************************/ - -void -AcpiDmDumpInteger8 ( - UINT8 Value, - char *Name) -{ - AcpiOsPrintf ("0x%2.2X, // %s\n", Value, Name); -} - -void -AcpiDmDumpInteger16 ( - UINT16 Value, - char *Name) -{ - AcpiOsPrintf ("0x%4.4X, // %s\n", Value, Name); -} - -void -AcpiDmDumpInteger32 ( - UINT32 Value, - char *Name) -{ - AcpiOsPrintf ("0x%8.8X, // %s\n", Value, Name); -} - -void -AcpiDmDumpInteger64 ( - UINT64 Value, - char *Name) -{ - AcpiOsPrintf ("0x%8.8X%8.8X, // %s\n", ACPI_FORMAT_UINT64 (Value), Name); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmBitList - * - * PARAMETERS: Mask - 16-bit value corresponding to 16 interrupt - * or DMA values - * - * RETURN: None - * - * DESCRIPTION: Dump a bit mask as a list of individual interrupt/DMA levels. - * - ******************************************************************************/ - -void -AcpiDmBitList ( - UINT16 Mask) -{ - UINT32 i; - BOOLEAN Previous = FALSE; - - - /* Open the initializer list */ - - AcpiOsPrintf ("{"); - - /* Examine each bit */ - - for (i = 0; i < 16; i++) - { - /* Only interested in bits that are set to 1 */ - - if (Mask & 1) - { - if (Previous) - { - AcpiOsPrintf (","); - } - Previous = TRUE; - AcpiOsPrintf ("%d", i); - } - - Mask >>= 1; - } - - /* Close list */ - - AcpiOsPrintf ("}\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmResourceTemplate - * - * PARAMETERS: Info - Curent parse tree walk info - * ByteData - Pointer to the byte list data - * ByteCount - Length of the byte list - * - * RETURN: None - * - * DESCRIPTION: Dump the contents of a Resource Template containing a set of - * Resource Descriptors. - * - ******************************************************************************/ - -void -AcpiDmResourceTemplate ( - ACPI_OP_WALK_INFO *Info, - ACPI_PARSE_OBJECT *Op, - UINT8 *ByteData, - UINT32 ByteCount) -{ - ACPI_STATUS Status; - UINT32 CurrentByteOffset; - UINT8 ResourceType; - UINT32 ResourceLength; - void *Aml; - UINT32 Level; - BOOLEAN DependentFns = FALSE; - UINT8 ResourceIndex; - ACPI_NAMESPACE_NODE *Node; - - - Level = Info->Level; - ResourceName = ACPI_DEFAULT_RESNAME; - Node = Op->Common.Node; - if (Node) - { - Node = Node->Child; - } - - for (CurrentByteOffset = 0; CurrentByteOffset < ByteCount;) - { - Aml = &ByteData[CurrentByteOffset]; - - /* Get the descriptor type and length */ - - ResourceType = AcpiUtGetResourceType (Aml); - ResourceLength = AcpiUtGetResourceLength (Aml); - - /* Validate the Resource Type and Resource Length */ - - Status = AcpiUtValidateResource (Aml, &ResourceIndex); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("/*** Could not validate Resource, type (%X) %s***/\n", - ResourceType, AcpiFormatException (Status)); - return; - } - - /* Point to next descriptor */ - - CurrentByteOffset += AcpiUtGetDescriptorLength (Aml); - - /* Descriptor pre-processing */ - - switch (ResourceType) - { - case ACPI_RESOURCE_NAME_START_DEPENDENT: - - /* Finish a previous StartDependentFns */ - - if (DependentFns) - { - Level--; - AcpiDmIndent (Level); - AcpiOsPrintf ("}\n"); - } - break; - - case ACPI_RESOURCE_NAME_END_DEPENDENT: - - Level--; - DependentFns = FALSE; - break; - - case ACPI_RESOURCE_NAME_END_TAG: - - /* Normal exit, the resource list is finished */ - - if (DependentFns) - { - /* - * Close an open StartDependentDescriptor. This indicates a - * missing EndDependentDescriptor. - */ - Level--; - DependentFns = FALSE; - - /* Go ahead and insert EndDependentFn() */ - - AcpiDmEndDependentDescriptor (Aml, ResourceLength, Level); - - AcpiDmIndent (Level); - AcpiOsPrintf ( - "/*** Disassembler: inserted missing EndDependentFn () ***/\n"); - } - return; - - default: - break; - } - - /* Disassemble the resource structure */ - - if (Node) - { - ResourceName = Node->Name.Integer; - Node = Node->Peer; - } - - AcpiGbl_DmResourceDispatch [ResourceIndex] ( - Aml, ResourceLength, Level); - - /* Descriptor post-processing */ - - if (ResourceType == ACPI_RESOURCE_NAME_START_DEPENDENT) - { - DependentFns = TRUE; - Level++; - } - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmIsResourceTemplate - * - * PARAMETERS: Op - Buffer Op to be examined - * - * RETURN: Status. AE_OK if valid template - * - * DESCRIPTION: Walk a byte list to determine if it consists of a valid set - * of resource descriptors. Nothing is output. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDmIsResourceTemplate ( - ACPI_PARSE_OBJECT *Op) -{ - ACPI_STATUS Status; - ACPI_PARSE_OBJECT *NextOp; - UINT8 *Aml; - UINT8 *EndAml; - ACPI_SIZE Length; - - - /* This op must be a buffer */ - - if (Op->Common.AmlOpcode != AML_BUFFER_OP) - { - return (AE_TYPE); - } - - /* Get the ByteData list and length */ - - NextOp = Op->Common.Value.Arg; - NextOp = NextOp->Common.Next; - if (!NextOp) - { - return (AE_TYPE); - } - - Aml = NextOp->Named.Data; - Length = (ACPI_SIZE) NextOp->Common.Value.Integer; - - /* Walk the byte list, abort on any invalid descriptor type or length */ - - Status = AcpiUtWalkAmlResources (Aml, Length, NULL, &EndAml); - if (ACPI_FAILURE (Status)) - { - return (AE_TYPE); - } - - /* - * For the resource template to be valid, one EndTag must appear - * at the very end of the ByteList, not before. (For proper disassembly - * of a ResourceTemplate, the buffer must not have any extra data after - * the EndTag.) - */ - if ((Aml + Length - sizeof (AML_RESOURCE_END_TAG)) != EndAml) - { - return (AE_AML_NO_RESOURCE_END_TAG); - } - - /* - * All resource descriptors are valid, therefore this list appears - * to be a valid resource template - */ - return (AE_OK); -} - -#endif diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmresrcl.c b/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmresrcl.c deleted file mode 100644 index b1b86db2f..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmresrcl.c +++ /dev/null @@ -1,1125 +0,0 @@ -/******************************************************************************* - * - * Module Name: dmresrcl.c - "Large" Resource Descriptor disassembly - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acdisasm.h" - - -#ifdef ACPI_DISASSEMBLER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dbresrcl") - - -/* Common names for address and memory descriptors */ - -static char *AcpiDmAddressNames[] = -{ - "Granularity", - "Range Minimum", - "Range Maximum", - "Translation Offset", - "Length" -}; - -static char *AcpiDmMemoryNames[] = -{ - "Range Minimum", - "Range Maximum", - "Alignment", - "Length" -}; - - -/* Local prototypes */ - -static void -AcpiDmSpaceFlags ( - UINT8 Flags); - -static void -AcpiDmIoFlags ( - UINT8 Flags); - -static void -AcpiDmIoFlags2 ( - UINT8 SpecificFlags); - -static void -AcpiDmMemoryFlags ( - UINT8 Flags, - UINT8 SpecificFlags); - -static void -AcpiDmMemoryFlags2 ( - UINT8 SpecificFlags); - -static void -AcpiDmResourceSource ( - AML_RESOURCE *Resource, - ACPI_SIZE MinimumLength, - UINT32 Length); - -static void -AcpiDmAddressFields ( - void *Source, - UINT8 Type, - UINT32 Level); - -static void -AcpiDmAddressPrefix ( - UINT8 Type); - -static void -AcpiDmAddressCommon ( - AML_RESOURCE *Resource, - UINT8 Type, - UINT32 Level); - -static void -AcpiDmAddressFlags ( - AML_RESOURCE *Resource); - - -/******************************************************************************* - * - * FUNCTION: AcpiDmMemoryFields - * - * PARAMETERS: Source - Pointer to the contiguous data fields - * Type - 16 or 32 (bit) - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode fields common to Memory24 and Memory32 descriptors - * - ******************************************************************************/ - -static void -AcpiDmMemoryFields ( - void *Source, - UINT8 Type, - UINT32 Level) -{ - UINT32 i; - - - for (i = 0; i < 4; i++) - { - AcpiDmIndent (Level + 1); - - switch (Type) - { - case 16: - AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i], - AcpiDmMemoryNames[i]); - break; - - case 32: - AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i], - AcpiDmMemoryNames[i]); - break; - - default: - return; - } - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmAddressFields - * - * PARAMETERS: Source - Pointer to the contiguous data fields - * Type - 16, 32, or 64 (bit) - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode fields common to address descriptors - * - ******************************************************************************/ - -static void -AcpiDmAddressFields ( - void *Source, - UINT8 Type, - UINT32 Level) -{ - UINT32 i; - - - AcpiOsPrintf ("\n"); - - for (i = 0; i < 5; i++) - { - AcpiDmIndent (Level + 1); - - switch (Type) - { - case 16: - AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i], - AcpiDmAddressNames[i]); - break; - - case 32: - AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i], - AcpiDmAddressNames[i]); - break; - - case 64: - AcpiDmDumpInteger64 (ACPI_CAST_PTR (UINT64, Source)[i], - AcpiDmAddressNames[i]); - break; - - default: - return; - } - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmAddressPrefix - * - * PARAMETERS: Type - Descriptor type - * - * RETURN: None - * - * DESCRIPTION: Emit name prefix representing the address descriptor type - * - ******************************************************************************/ - -static void -AcpiDmAddressPrefix ( - UINT8 Type) -{ - - switch (Type) - { - case ACPI_RESOURCE_TYPE_ADDRESS16: - AcpiOsPrintf ("Word"); - break; - - case ACPI_RESOURCE_TYPE_ADDRESS32: - AcpiOsPrintf ("DWord"); - break; - - case ACPI_RESOURCE_TYPE_ADDRESS64: - AcpiOsPrintf ("QWord"); - break; - - case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64: - AcpiOsPrintf ("Extended"); - break; - - default: - return; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmAddressCommon - * - * PARAMETERS: Resource - Raw AML descriptor - * Type - Descriptor type - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Emit common name and flag fields common to address descriptors - * - ******************************************************************************/ - -static void -AcpiDmAddressCommon ( - AML_RESOURCE *Resource, - UINT8 Type, - UINT32 Level) -{ - UINT8 ResourceType; - UINT8 SpecificFlags; - UINT8 Flags; - - - ResourceType = Resource->Address.ResourceType; - SpecificFlags = Resource->Address.SpecificFlags; - Flags = Resource->Address.Flags; - - AcpiDmIndent (Level); - - /* Validate ResourceType */ - - if ((ResourceType > 2) && (ResourceType < 0xC0)) - { - AcpiOsPrintf ("/**** Invalid Resource Type: 0x%X ****/", ResourceType); - return; - } - - /* Prefix is either Word, DWord, QWord, or Extended */ - - AcpiDmAddressPrefix (Type); - - /* Resource Types above 0xC0 are vendor-defined */ - - if (ResourceType > 2) - { - AcpiOsPrintf ("Space (0x%2.2X, ", ResourceType); - AcpiDmSpaceFlags (Flags); - AcpiOsPrintf (" 0x%2.2X,", SpecificFlags); - return; - } - - /* This is either a Memory, IO, or BusNumber descriptor (0,1,2) */ - - AcpiOsPrintf ("%s (", AcpiGbl_WordDecode [ResourceType & 0x3]); - - /* Decode the general and type-specific flags */ - - if (ResourceType == ACPI_MEMORY_RANGE) - { - AcpiDmMemoryFlags (Flags, SpecificFlags); - } - else /* IO range or BusNumberRange */ - { - AcpiDmIoFlags (Flags); - if (ResourceType == ACPI_IO_RANGE) - { - AcpiOsPrintf (" %s,", AcpiGbl_RngDecode [SpecificFlags & 0x3]); - } - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmAddressFlags - * - * PARAMETERS: Resource - Raw AML descriptor - * - * RETURN: None - * - * DESCRIPTION: Emit flags common to address descriptors - * - ******************************************************************************/ - -static void -AcpiDmAddressFlags ( - AML_RESOURCE *Resource) -{ - - if (Resource->Address.ResourceType == ACPI_IO_RANGE) - { - AcpiDmIoFlags2 (Resource->Address.SpecificFlags); - } - else if (Resource->Address.ResourceType == ACPI_MEMORY_RANGE) - { - AcpiDmMemoryFlags2 (Resource->Address.SpecificFlags); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmSpaceFlags - * - * PARAMETERS: Flags - Flag byte to be decoded - * - * RETURN: None - * - * DESCRIPTION: Decode the flags specific to Space Address space descriptors - * - ******************************************************************************/ - -static void -AcpiDmSpaceFlags ( - UINT8 Flags) -{ - - AcpiOsPrintf ("%s, %s, %s, %s,", - AcpiGbl_ConsumeDecode [(Flags & 1)], - AcpiGbl_DecDecode [(Flags & 0x2) >> 1], - AcpiGbl_MinDecode [(Flags & 0x4) >> 2], - AcpiGbl_MaxDecode [(Flags & 0x8) >> 3]); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmIoFlags - * - * PARAMETERS: Flags - Flag byte to be decoded - * - * RETURN: None - * - * DESCRIPTION: Decode the flags specific to IO Address space descriptors - * - ******************************************************************************/ - -static void -AcpiDmIoFlags ( - UINT8 Flags) -{ - AcpiOsPrintf ("%s, %s, %s, %s,", - AcpiGbl_ConsumeDecode [(Flags & 1)], - AcpiGbl_MinDecode [(Flags & 0x4) >> 2], - AcpiGbl_MaxDecode [(Flags & 0x8) >> 3], - AcpiGbl_DecDecode [(Flags & 0x2) >> 1]); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmIoFlags2 - * - * PARAMETERS: SpecificFlags - "Specific" flag byte to be decoded - * - * RETURN: None - * - * DESCRIPTION: Decode the flags specific to IO Address space descriptors - * - ******************************************************************************/ - -static void -AcpiDmIoFlags2 ( - UINT8 SpecificFlags) -{ - - AcpiOsPrintf (", %s", - AcpiGbl_TtpDecode [(SpecificFlags & 0x10) >> 4]); - - /* TRS is only used if TTP is TypeTranslation */ - - if (SpecificFlags & 0x10) - { - AcpiOsPrintf (", %s", - AcpiGbl_TrsDecode [(SpecificFlags & 0x20) >> 5]); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmMemoryFlags - * - * PARAMETERS: Flags - Flag byte to be decoded - * SpecificFlags - "Specific" flag byte to be decoded - * - * RETURN: None - * - * DESCRIPTION: Decode flags specific to Memory Address Space descriptors - * - ******************************************************************************/ - -static void -AcpiDmMemoryFlags ( - UINT8 Flags, - UINT8 SpecificFlags) -{ - - AcpiOsPrintf ("%s, %s, %s, %s, %s, %s,", - AcpiGbl_ConsumeDecode [(Flags & 1)], - AcpiGbl_DecDecode [(Flags & 0x2) >> 1], - AcpiGbl_MinDecode [(Flags & 0x4) >> 2], - AcpiGbl_MaxDecode [(Flags & 0x8) >> 3], - AcpiGbl_MemDecode [(SpecificFlags & 0x6) >> 1], - AcpiGbl_RwDecode [(SpecificFlags & 0x1)]); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmMemoryFlags2 - * - * PARAMETERS: SpecificFlags - "Specific" flag byte to be decoded - * - * RETURN: None - * - * DESCRIPTION: Decode flags specific to Memory Address Space descriptors - * - ******************************************************************************/ - -static void -AcpiDmMemoryFlags2 ( - UINT8 SpecificFlags) -{ - - AcpiOsPrintf (", %s, %s", - AcpiGbl_MtpDecode [(SpecificFlags & 0x18) >> 3], - AcpiGbl_TtpDecode [(SpecificFlags & 0x20) >> 5]); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmResourceSource - * - * PARAMETERS: Resource - Raw AML descriptor - * MinimumLength - descriptor length without optional fields - * ResourceLength - * - * RETURN: None - * - * DESCRIPTION: Dump optional ResourceSource fields of an address descriptor - * - ******************************************************************************/ - -static void -AcpiDmResourceSource ( - AML_RESOURCE *Resource, - ACPI_SIZE MinimumTotalLength, - UINT32 ResourceLength) -{ - UINT8 *AmlResourceSource; - UINT32 TotalLength; - - - TotalLength = ResourceLength + sizeof (AML_RESOURCE_LARGE_HEADER); - - /* Check if the optional ResourceSource fields are present */ - - if (TotalLength <= MinimumTotalLength) - { - /* The two optional fields are not used */ - - AcpiOsPrintf (",, "); - return; - } - - /* Get a pointer to the ResourceSource */ - - AmlResourceSource = ACPI_ADD_PTR (UINT8, Resource, MinimumTotalLength); - - /* - * Always emit the ResourceSourceIndex (Byte) - * - * NOTE: Some ASL compilers always create a 0 byte (in the AML) for the - * Index even if the String does not exist. Although this is in violation - * of the ACPI specification, it is very important to emit ASL code that - * can be compiled back to the identical AML. There may be fields and/or - * indexes into the resource template buffer that are compiled to absolute - * offsets, and these will be broken if the AML length is changed. - */ - AcpiOsPrintf ("0x%2.2X,", (UINT32) AmlResourceSource[0]); - - /* Make sure that the ResourceSource string exists before dumping it */ - - if (TotalLength > (MinimumTotalLength + 1)) - { - AcpiOsPrintf (" "); - AcpiUtPrintString ((char *) &AmlResourceSource[1], ACPI_UINT8_MAX); - } - - AcpiOsPrintf (", "); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmWordDescriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a Word Address Space descriptor - * - ******************************************************************************/ - -void -AcpiDmWordDescriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - /* Dump resource name and flags */ - - AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS16, Level); - - /* Dump the 5 contiguous WORD values */ - - AcpiDmAddressFields (&Resource->Address16.Granularity, 16, Level); - - /* The ResourceSource fields are optional */ - - AcpiDmIndent (Level + 1); - AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS16), Length); - - /* Insert a descriptor name */ - - AcpiDmDescriptorName (); - - /* Type-specific flags */ - - AcpiDmAddressFlags (Resource); - AcpiOsPrintf (")\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDwordDescriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a DWord Address Space descriptor - * - ******************************************************************************/ - -void -AcpiDmDwordDescriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - /* Dump resource name and flags */ - - AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS32, Level); - - /* Dump the 5 contiguous DWORD values */ - - AcpiDmAddressFields (&Resource->Address32.Granularity, 32, Level); - - /* The ResourceSource fields are optional */ - - AcpiDmIndent (Level + 1); - AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS32), Length); - - /* Insert a descriptor name */ - - AcpiDmDescriptorName (); - - /* Type-specific flags */ - - AcpiDmAddressFlags (Resource); - AcpiOsPrintf (")\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmQwordDescriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a QWord Address Space descriptor - * - ******************************************************************************/ - -void -AcpiDmQwordDescriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - /* Dump resource name and flags */ - - AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS64, Level); - - /* Dump the 5 contiguous QWORD values */ - - AcpiDmAddressFields (&Resource->Address64.Granularity, 64, Level); - - /* The ResourceSource fields are optional */ - - AcpiDmIndent (Level + 1); - AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS64), Length); - - /* Insert a descriptor name */ - - AcpiDmDescriptorName (); - - /* Type-specific flags */ - - AcpiDmAddressFlags (Resource); - AcpiOsPrintf (")\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmExtendedDescriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a Extended Address Space descriptor - * - ******************************************************************************/ - -void -AcpiDmExtendedDescriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - /* Dump resource name and flags */ - - AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64, Level); - - /* Dump the 5 contiguous QWORD values */ - - AcpiDmAddressFields (&Resource->ExtAddress64.Granularity, 64, Level); - - /* Extra field for this descriptor only */ - - AcpiDmIndent (Level + 1); - AcpiDmDumpInteger64 (Resource->ExtAddress64.TypeSpecific, - "Type-Specific Attributes"); - - /* Insert a descriptor name */ - - AcpiDmIndent (Level + 1); - AcpiDmDescriptorName (); - - /* Type-specific flags */ - - AcpiDmAddressFlags (Resource); - AcpiOsPrintf (")\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmMemory24Descriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a Memory24 descriptor - * - ******************************************************************************/ - -void -AcpiDmMemory24Descriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - /* Dump name and read/write flag */ - - AcpiDmIndent (Level); - AcpiOsPrintf ("Memory24 (%s,\n", - AcpiGbl_RwDecode [Resource->Memory24.Flags & 1]); - - /* Dump the 4 contiguous WORD values */ - - AcpiDmMemoryFields (&Resource->Memory24.Minimum, 16, Level); - - /* Insert a descriptor name */ - - AcpiDmIndent (Level + 1); - AcpiDmDescriptorName (); - AcpiOsPrintf (")\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmMemory32Descriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a Memory32 descriptor - * - ******************************************************************************/ - -void -AcpiDmMemory32Descriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - /* Dump name and read/write flag */ - - AcpiDmIndent (Level); - AcpiOsPrintf ("Memory32 (%s,\n", - AcpiGbl_RwDecode [Resource->Memory32.Flags & 1]); - - /* Dump the 4 contiguous DWORD values */ - - AcpiDmMemoryFields (&Resource->Memory32.Minimum, 32, Level); - - /* Insert a descriptor name */ - - AcpiDmIndent (Level + 1); - AcpiDmDescriptorName (); - AcpiOsPrintf (")\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmFixedMemory32Descriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a Fixed Memory32 descriptor - * - ******************************************************************************/ - -void -AcpiDmFixedMemory32Descriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - /* Dump name and read/write flag */ - - AcpiDmIndent (Level); - AcpiOsPrintf ("Memory32Fixed (%s,\n", - AcpiGbl_RwDecode [Resource->FixedMemory32.Flags & 1]); - - AcpiDmIndent (Level + 1); - AcpiDmDumpInteger32 (Resource->FixedMemory32.Address, "Address Base"); - - AcpiDmIndent (Level + 1); - AcpiDmDumpInteger32 (Resource->FixedMemory32.AddressLength, "Address Length"); - - /* Insert a descriptor name */ - - AcpiDmIndent (Level + 1); - AcpiDmDescriptorName (); - AcpiOsPrintf (")\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmGenericRegisterDescriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a Generic Register descriptor - * - ******************************************************************************/ - -void -AcpiDmGenericRegisterDescriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - AcpiDmIndent (Level); - AcpiOsPrintf ("Register ("); - AcpiDmAddressSpace (Resource->GenericReg.AddressSpaceId); - AcpiOsPrintf ("\n"); - - AcpiDmIndent (Level + 1); - AcpiDmDumpInteger8 (Resource->GenericReg.BitWidth, "Bit Width"); - - AcpiDmIndent (Level + 1); - AcpiDmDumpInteger8 (Resource->GenericReg.BitOffset, "Bit Offset"); - - AcpiDmIndent (Level + 1); - AcpiDmDumpInteger64 (Resource->GenericReg.Address, "Address"); - - /* Optional field for ACPI 3.0 */ - - AcpiDmIndent (Level + 1); - if (Resource->GenericReg.AccessSize) - { - AcpiOsPrintf ("0x%2.2X, // %s\n", - Resource->GenericReg.AccessSize, "Access Size"); - AcpiDmIndent (Level + 1); - } - else - { - AcpiOsPrintf (","); - } - - /* DescriptorName was added for ACPI 3.0+ */ - - AcpiDmDescriptorName (); - AcpiOsPrintf (")\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmInterruptDescriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a extended Interrupt descriptor - * - ******************************************************************************/ - -void -AcpiDmInterruptDescriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - UINT32 i; - - - AcpiDmIndent (Level); - AcpiOsPrintf ("Interrupt (%s, %s, %s, %s, ", - AcpiGbl_ConsumeDecode [(Resource->ExtendedIrq.Flags & 1)], - AcpiGbl_HeDecode [(Resource->ExtendedIrq.Flags >> 1) & 1], - AcpiGbl_LlDecode [(Resource->ExtendedIrq.Flags >> 2) & 1], - AcpiGbl_ShrDecode [(Resource->ExtendedIrq.Flags >> 3) & 1]); - - /* - * The ResourceSource fields are optional and appear after the interrupt - * list. Must compute length based on length of the list. First xrupt - * is included in the struct (reason for -1 below) - */ - AcpiDmResourceSource (Resource, - sizeof (AML_RESOURCE_EXTENDED_IRQ) + - ((UINT32) Resource->ExtendedIrq.InterruptCount - 1) * sizeof (UINT32), - Resource->ExtendedIrq.ResourceLength); - - /* Insert a descriptor name */ - - AcpiDmDescriptorName (); - AcpiOsPrintf (")\n"); - - /* Dump the interrupt list */ - - AcpiDmIndent (Level); - AcpiOsPrintf ("{\n"); - for (i = 0; i < Resource->ExtendedIrq.InterruptCount; i++) - { - AcpiDmIndent (Level + 1); - AcpiOsPrintf ("0x%8.8X,\n", - (UINT32) Resource->ExtendedIrq.Interrupts[i]); - } - - AcpiDmIndent (Level); - AcpiOsPrintf ("}\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmVendorCommon - * - * PARAMETERS: Name - Descriptor name suffix - * ByteData - Pointer to the vendor byte data - * Length - Length of the byte data - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a Vendor descriptor, both Large and Small - * - ******************************************************************************/ - -void -AcpiDmVendorCommon ( - char *Name, - UINT8 *ByteData, - UINT32 Length, - UINT32 Level) -{ - - /* Dump macro name */ - - AcpiDmIndent (Level); - AcpiOsPrintf ("Vendor%s (", Name); - - /* Insert a descriptor name */ - - AcpiDmDescriptorName (); - AcpiOsPrintf (") // Length = 0x%.2X\n", Length); - - /* Dump the vendor bytes */ - - AcpiDmIndent (Level); - AcpiOsPrintf ("{\n"); - - AcpiDmDisasmByteList (Level + 1, ByteData, Length); - - AcpiDmIndent (Level); - AcpiOsPrintf ("}\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmVendorLargeDescriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a Vendor Large descriptor - * - ******************************************************************************/ - -void -AcpiDmVendorLargeDescriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - AcpiDmVendorCommon ("Long ", - ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_LARGE_HEADER)), - Length, Level); -} - -#endif - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmresrcs.c b/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmresrcs.c deleted file mode 100644 index 50898527f..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmresrcs.c +++ /dev/null @@ -1,387 +0,0 @@ -/******************************************************************************* - * - * Module Name: dmresrcs.c - "Small" Resource Descriptor disassembly - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acdisasm.h" - - -#ifdef ACPI_DISASSEMBLER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dbresrcs") - - -/******************************************************************************* - * - * FUNCTION: AcpiDmIrqDescriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a IRQ descriptor, either Irq() or IrqNoFlags() - * - ******************************************************************************/ - -void -AcpiDmIrqDescriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - AcpiDmIndent (Level); - AcpiOsPrintf ("%s (", - AcpiGbl_IrqDecode [Length & 1]); - - /* Decode flags byte if present */ - - if (Length & 1) - { - AcpiOsPrintf ("%s, %s, %s, ", - AcpiGbl_HeDecode [Resource->Irq.Flags & 1], - AcpiGbl_LlDecode [(Resource->Irq.Flags >> 3) & 1], - AcpiGbl_ShrDecode [(Resource->Irq.Flags >> 4) & 1]); - } - - /* Insert a descriptor name */ - - AcpiDmDescriptorName (); - AcpiOsPrintf (")\n"); - - AcpiDmIndent (Level + 1); - AcpiDmBitList (Resource->Irq.IrqMask); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDmaDescriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a DMA descriptor - * - ******************************************************************************/ - -void -AcpiDmDmaDescriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - AcpiDmIndent (Level); - AcpiOsPrintf ("DMA (%s, %s, %s, ", - AcpiGbl_TypDecode [(Resource->Dma.Flags >> 5) & 3], - AcpiGbl_BmDecode [(Resource->Dma.Flags >> 2) & 1], - AcpiGbl_SizDecode [(Resource->Dma.Flags >> 0) & 3]); - - /* Insert a descriptor name */ - - AcpiDmDescriptorName (); - AcpiOsPrintf (")\n"); - - AcpiDmIndent (Level + 1); - AcpiDmBitList (Resource->Dma.DmaChannelMask); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmIoDescriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode an IO descriptor - * - ******************************************************************************/ - -void -AcpiDmIoDescriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - AcpiDmIndent (Level); - AcpiOsPrintf ("IO (%s,\n", - AcpiGbl_IoDecode [(Resource->Io.Flags & 1)]); - - AcpiDmIndent (Level + 1); - AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum"); - - AcpiDmIndent (Level + 1); - AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum"); - - AcpiDmIndent (Level + 1); - AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment"); - - AcpiDmIndent (Level + 1); - AcpiDmDumpInteger8 (Resource->Io.AddressLength, "Length"); - - /* Insert a descriptor name */ - - AcpiDmIndent (Level + 1); - AcpiDmDescriptorName (); - AcpiOsPrintf (")\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmFixedIoDescriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a Fixed IO descriptor - * - ******************************************************************************/ - -void -AcpiDmFixedIoDescriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - AcpiDmIndent (Level); - AcpiOsPrintf ("FixedIO (\n"); - - AcpiDmIndent (Level + 1); - AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address"); - - AcpiDmIndent (Level + 1); - AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length"); - - /* Insert a descriptor name */ - - AcpiDmIndent (Level + 1); - AcpiDmDescriptorName (); - AcpiOsPrintf (")\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmStartDependentDescriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a Start Dependendent functions descriptor - * - ******************************************************************************/ - -void -AcpiDmStartDependentDescriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - AcpiDmIndent (Level); - - if (Length & 1) - { - AcpiOsPrintf ("StartDependentFn (0x%2.2X, 0x%2.2X)\n", - (UINT32) Resource->StartDpf.Flags & 3, - (UINT32) (Resource->StartDpf.Flags >> 2) & 3); - } - else - { - AcpiOsPrintf ("StartDependentFnNoPri ()\n"); - } - - AcpiDmIndent (Level); - AcpiOsPrintf ("{\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmEndDependentDescriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode an End Dependent functions descriptor - * - ******************************************************************************/ - -void -AcpiDmEndDependentDescriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - AcpiDmIndent (Level); - AcpiOsPrintf ("}\n"); - AcpiDmIndent (Level); - AcpiOsPrintf ("EndDependentFn ()\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmVendorSmallDescriptor - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Length - Length of the descriptor in bytes - * Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Decode a Vendor Small Descriptor - * - ******************************************************************************/ - -void -AcpiDmVendorSmallDescriptor ( - AML_RESOURCE *Resource, - UINT32 Length, - UINT32 Level) -{ - - AcpiDmVendorCommon ("Short", - ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_SMALL_HEADER)), - Length, Level); -} - -#endif - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmutils.c b/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmutils.c deleted file mode 100644 index 111c785ce..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmutils.c +++ /dev/null @@ -1,375 +0,0 @@ -/******************************************************************************* - * - * Module Name: dmutils - AML disassembler utilities - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "amlcode.h" -#include "acdisasm.h" - -#ifdef ACPI_ASL_COMPILER -#include -#endif - -#ifdef ACPI_DISASSEMBLER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dmutils") - - -/* Data used in keeping track of fields */ -#if 0 -const char *AcpiGbl_FENames[] = -{ - "skip", - "?access?" -}; /* FE = Field Element */ -#endif - -/* Operators for Match() */ - -const char *AcpiGbl_MatchOps[] = -{ - "MTR", - "MEQ", - "MLE", - "MLT", - "MGE", - "MGT" -}; - -/* Access type decoding */ - -const char *AcpiGbl_AccessTypes[] = -{ - "AnyAcc", - "ByteAcc", - "WordAcc", - "DWordAcc", - "QWordAcc", - "BufferAcc", - "InvalidAccType", - "InvalidAccType" -}; - -/* Lock rule decoding */ - -const char *AcpiGbl_LockRule[] = -{ - "NoLock", - "Lock" -}; - -/* Update rule decoding */ - -const char *AcpiGbl_UpdateRules[] = -{ - "Preserve", - "WriteAsOnes", - "WriteAsZeros", - "InvalidUpdateRule" -}; - -/* Strings used to decode resource descriptors */ - -const char *AcpiGbl_WordDecode[] = -{ - "Memory", - "IO", - "BusNumber", - "UnknownResourceType" -}; - -const char *AcpiGbl_IrqDecode[] = -{ - "IRQNoFlags", - "IRQ" -}; - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDecodeAttribute - * - * PARAMETERS: Attribute - Attribute field of AccessAs keyword - * - * RETURN: None - * - * DESCRIPTION: Decode the AccessAs attribute byte. (Mostly SMBus stuff) - * - ******************************************************************************/ - -void -AcpiDmDecodeAttribute ( - UINT8 Attribute) -{ - - switch (Attribute) - { - case AML_FIELD_ATTRIB_SMB_QUICK: - - AcpiOsPrintf ("SMBQuick"); - break; - - case AML_FIELD_ATTRIB_SMB_SEND_RCV: - - AcpiOsPrintf ("SMBSendReceive"); - break; - - case AML_FIELD_ATTRIB_SMB_BYTE: - - AcpiOsPrintf ("SMBByte"); - break; - - case AML_FIELD_ATTRIB_SMB_WORD: - - AcpiOsPrintf ("SMBWord"); - break; - - case AML_FIELD_ATTRIB_SMB_WORD_CALL: - - AcpiOsPrintf ("SMBProcessCall"); - break; - - case AML_FIELD_ATTRIB_SMB_BLOCK: - - AcpiOsPrintf ("SMBBlock"); - break; - - case AML_FIELD_ATTRIB_SMB_BLOCK_CALL: - - AcpiOsPrintf ("SMBBlockProcessCall"); - break; - - default: - - AcpiOsPrintf ("0x%.2X", Attribute); - break; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmIndent - * - * PARAMETERS: Level - Current source code indentation level - * - * RETURN: None - * - * DESCRIPTION: Indent 4 spaces per indentation level. - * - ******************************************************************************/ - -void -AcpiDmIndent ( - UINT32 Level) -{ - - if (!Level) - { - return; - } - - AcpiOsPrintf ("%*.s", ACPI_MUL_4 (Level), " "); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmCommaIfListMember - * - * PARAMETERS: Op - Current operator/operand - * - * RETURN: TRUE if a comma was inserted - * - * DESCRIPTION: Insert a comma if this Op is a member of an argument list. - * - ******************************************************************************/ - -BOOLEAN -AcpiDmCommaIfListMember ( - ACPI_PARSE_OBJECT *Op) -{ - - if (!Op->Common.Next) - { - return FALSE; - } - - if (AcpiDmListType (Op->Common.Parent) & BLOCK_COMMA_LIST) - { - /* Check for a NULL target operand */ - - if ((Op->Common.Next->Common.AmlOpcode == AML_INT_NAMEPATH_OP) && - (!Op->Common.Next->Common.Value.String)) - { - /* - * To handle the Divide() case where there are two optional - * targets, look ahead one more op. If null, this null target - * is the one and only target -- no comma needed. Otherwise, - * we need a comma to prepare for the next target. - */ - if (!Op->Common.Next->Common.Next) - { - return FALSE; - } - } - - if ((Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST) && - (!(Op->Common.Next->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST))) - { - return FALSE; - } - - AcpiOsPrintf (", "); - return (TRUE); - } - - else if ((Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST) && - (Op->Common.Next->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST)) - { - AcpiOsPrintf (", "); - return (TRUE); - } - - return (FALSE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmCommaIfFieldMember - * - * PARAMETERS: Op - Current operator/operand - * - * RETURN: None - * - * DESCRIPTION: Insert a comma if this Op is a member of a Field argument list. - * - ******************************************************************************/ - -void -AcpiDmCommaIfFieldMember ( - ACPI_PARSE_OBJECT *Op) -{ - - if (Op->Common.Next) - { - AcpiOsPrintf (", "); - } -} - -#endif diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmwalk.c b/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmwalk.c deleted file mode 100644 index 85477fede..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/disassembler/dmwalk.c +++ /dev/null @@ -1,1006 +0,0 @@ -/******************************************************************************* - * - * Module Name: dmwalk - AML disassembly tree walk - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "amlcode.h" -#include "acdisasm.h" -#include "acdebug.h" - - -#ifdef ACPI_DISASSEMBLER - -#define _COMPONENT ACPI_CA_DEBUGGER - ACPI_MODULE_NAME ("dmwalk") - - -#define DB_FULL_OP_INFO "[%4.4s] @%5.5X #%4.4X: " - -/* Stub for non-compiler code */ - -#ifndef ACPI_ASL_COMPILER -void -AcpiDmEmitExternals ( - void) -{ - return; -} -#endif - -/* Local prototypes */ - -static ACPI_STATUS -AcpiDmDescendingOp ( - ACPI_PARSE_OBJECT *Op, - UINT32 Level, - void *Context); - -static ACPI_STATUS -AcpiDmAscendingOp ( - ACPI_PARSE_OBJECT *Op, - UINT32 Level, - void *Context); - -static UINT32 -AcpiDmBlockType ( - ACPI_PARSE_OBJECT *Op); - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDisassemble - * - * PARAMETERS: WalkState - Current state - * Origin - Starting object - * NumOpcodes - Max number of opcodes to be displayed - * - * RETURN: None - * - * DESCRIPTION: Disassemble parser object and its children. This is the - * main entry point of the disassembler. - * - ******************************************************************************/ - -void -AcpiDmDisassemble ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Origin, - UINT32 NumOpcodes) -{ - ACPI_PARSE_OBJECT *Op = Origin; - ACPI_OP_WALK_INFO Info; - - - if (!Op) - { - return; - } - - Info.Flags = 0; - Info.Level = 0; - Info.Count = 0; - Info.WalkState = WalkState; - AcpiDmWalkParseTree (Op, AcpiDmDescendingOp, AcpiDmAscendingOp, &Info); - return; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmWalkParseTree - * - * PARAMETERS: Op - Root Op object - * DescendingCallback - Called during tree descent - * AscendingCallback - Called during tree ascent - * Context - To be passed to the callbacks - * - * RETURN: Status from callback(s) - * - * DESCRIPTION: Walk the entire parse tree. - * - ******************************************************************************/ - -void -AcpiDmWalkParseTree ( - ACPI_PARSE_OBJECT *Op, - ASL_WALK_CALLBACK DescendingCallback, - ASL_WALK_CALLBACK AscendingCallback, - void *Context) -{ - BOOLEAN NodePreviouslyVisited; - ACPI_PARSE_OBJECT *StartOp = Op; - ACPI_STATUS Status; - ACPI_PARSE_OBJECT *Next; - ACPI_OP_WALK_INFO *Info = Context; - - - Info->Level = 0; - NodePreviouslyVisited = FALSE; - - while (Op) - { - if (NodePreviouslyVisited) - { - if (AscendingCallback) - { - Status = AscendingCallback (Op, Info->Level, Context); - if (ACPI_FAILURE (Status)) - { - return; - } - } - } - else - { - /* Let the callback process the node */ - - Status = DescendingCallback (Op, Info->Level, Context); - if (ACPI_SUCCESS (Status)) - { - /* Visit children first, once */ - - Next = AcpiPsGetArg (Op, 0); - if (Next) - { - Info->Level++; - Op = Next; - continue; - } - } - else if (Status != AE_CTRL_DEPTH) - { - /* Exit immediately on any error */ - - return; - } - } - - /* Terminate walk at start op */ - - if (Op == StartOp) - { - break; - } - - /* No more children, re-visit this node */ - - if (!NodePreviouslyVisited) - { - NodePreviouslyVisited = TRUE; - continue; - } - - /* No more children, visit peers */ - - if (Op->Common.Next) - { - Op = Op->Common.Next; - NodePreviouslyVisited = FALSE; - } - else - { - /* No peers, re-visit parent */ - - if (Info->Level != 0 ) - { - Info->Level--; - } - - Op = Op->Common.Parent; - NodePreviouslyVisited = TRUE; - } - } - - /* If we get here, the walk completed with no errors */ - - return; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmBlockType - * - * PARAMETERS: Op - Object to be examined - * - * RETURN: BlockType - not a block, parens, braces, or even both. - * - * DESCRIPTION: Type of block for this op (parens or braces) - * - ******************************************************************************/ - -static UINT32 -AcpiDmBlockType ( - ACPI_PARSE_OBJECT *Op) -{ - const ACPI_OPCODE_INFO *OpInfo; - - - if (!Op) - { - return (BLOCK_NONE); - } - - switch (Op->Common.AmlOpcode) - { - case AML_ELSE_OP: - - return (BLOCK_BRACE); - - case AML_METHOD_OP: - case AML_DEVICE_OP: - case AML_SCOPE_OP: - case AML_PROCESSOR_OP: - case AML_POWER_RES_OP: - case AML_THERMAL_ZONE_OP: - case AML_IF_OP: - case AML_WHILE_OP: - case AML_FIELD_OP: - case AML_INDEX_FIELD_OP: - case AML_BANK_FIELD_OP: - - return (BLOCK_PAREN | BLOCK_BRACE); - - case AML_BUFFER_OP: - - if (Op->Common.DisasmOpcode == ACPI_DASM_UNICODE) - { - return (BLOCK_NONE); - } - - /*lint -fallthrough */ - - case AML_PACKAGE_OP: - case AML_VAR_PACKAGE_OP: - - return (BLOCK_PAREN | BLOCK_BRACE); - - case AML_EVENT_OP: - - return (BLOCK_PAREN); - - default: - - OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); - if (OpInfo->Flags & AML_HAS_ARGS) - { - return (BLOCK_PAREN); - } - - return (BLOCK_NONE); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmListType - * - * PARAMETERS: Op - Object to be examined - * - * RETURN: ListType - has commas or not. - * - * DESCRIPTION: Type of block for this op (parens or braces) - * - ******************************************************************************/ - -UINT32 -AcpiDmListType ( - ACPI_PARSE_OBJECT *Op) -{ - const ACPI_OPCODE_INFO *OpInfo; - - - if (!Op) - { - return (BLOCK_NONE); - } - - switch (Op->Common.AmlOpcode) - { - - case AML_ELSE_OP: - case AML_METHOD_OP: - case AML_DEVICE_OP: - case AML_SCOPE_OP: - case AML_POWER_RES_OP: - case AML_PROCESSOR_OP: - case AML_THERMAL_ZONE_OP: - case AML_IF_OP: - case AML_WHILE_OP: - case AML_FIELD_OP: - case AML_INDEX_FIELD_OP: - case AML_BANK_FIELD_OP: - - return (BLOCK_NONE); - - case AML_BUFFER_OP: - case AML_PACKAGE_OP: - case AML_VAR_PACKAGE_OP: - - return (BLOCK_COMMA_LIST); - - default: - - OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); - if (OpInfo->Flags & AML_HAS_ARGS) - { - return (BLOCK_COMMA_LIST); - } - - return (BLOCK_NONE); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmDescendingOp - * - * PARAMETERS: ASL_WALK_CALLBACK - * - * RETURN: Status - * - * DESCRIPTION: First visitation of a parse object during tree descent. - * Decode opcode name and begin parameter list(s), if any. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDmDescendingOp ( - ACPI_PARSE_OBJECT *Op, - UINT32 Level, - void *Context) -{ - ACPI_OP_WALK_INFO *Info = Context; - const ACPI_OPCODE_INFO *OpInfo; - UINT32 Name; - ACPI_PARSE_OBJECT *NextOp; - - - if (Op->Common.DisasmFlags & ACPI_PARSEOP_IGNORE) - { - /* Ignore this op -- it was handled elsewhere */ - - return (AE_CTRL_DEPTH); - } - - /* Level 0 is at the Definition Block level */ - - if (Level == 0) - { - /* In verbose mode, print the AML offset, opcode and depth count */ - - if (Info->WalkState) - { - VERBOSE_PRINT ((DB_FULL_OP_INFO, - (Info->WalkState->MethodNode ? - Info->WalkState->MethodNode->Name.Ascii : " "), - Op->Common.AmlOffset, (UINT32) Op->Common.AmlOpcode)); - } - - if (Op->Common.AmlOpcode == AML_SCOPE_OP) - { - /* This is the beginning of the Definition Block */ - - AcpiOsPrintf ("{\n"); - - /* Emit all External() declarations here */ - - AcpiDmEmitExternals (); - return (AE_OK); - } - } - else if ((AcpiDmBlockType (Op->Common.Parent) & BLOCK_BRACE) && - (!(Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST)) && - (Op->Common.AmlOpcode != AML_INT_BYTELIST_OP)) - { - /* - * This is a first-level element of a term list, - * indent a new line - */ - AcpiDmIndent (Level); - Info->LastLevel = Level; - Info->Count = 0; - } - - /* - * This is an inexpensive mechanism to try and keep lines from getting - * too long. When the limit is hit, start a new line at the previous - * indent plus one. A better but more expensive mechanism would be to - * keep track of the current column. - */ - Info->Count++; - if (Info->Count /*+Info->LastLevel*/ > 10) - { - Info->Count = 0; - AcpiOsPrintf ("\n"); - AcpiDmIndent (Info->LastLevel + 1); - } - - /* Print the opcode name */ - - AcpiDmDisassembleOneOp (NULL, Info, Op); - - if (Op->Common.DisasmOpcode == ACPI_DASM_LNOT_PREFIX) - { - return (AE_OK); - } - - if ((Op->Common.AmlOpcode == AML_NAME_OP) || - (Op->Common.AmlOpcode == AML_RETURN_OP)) - { - Info->Level--; - } - - /* Start the opcode argument list if necessary */ - - OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); - - if ((OpInfo->Flags & AML_HAS_ARGS) || - (Op->Common.AmlOpcode == AML_EVENT_OP)) - { - /* This opcode has an argument list */ - - if (AcpiDmBlockType (Op) & BLOCK_PAREN) - { - AcpiOsPrintf (" ("); - } - - /* If this is a named opcode, print the associated name value */ - - if (OpInfo->Flags & AML_NAMED) - { - switch (Op->Common.AmlOpcode) - { - case AML_ALIAS_OP: - - NextOp = AcpiPsGetDepthNext (NULL, Op); - NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; - AcpiDmNamestring (NextOp->Common.Value.Name); - AcpiOsPrintf (", "); - - /*lint -fallthrough */ - - default: - - Name = AcpiPsGetName (Op); - if (Op->Named.Path) - { - AcpiDmNamestring ((char *) Op->Named.Path); - } - else - { - AcpiDmDumpName (Name); - } - - if (Op->Common.AmlOpcode != AML_INT_NAMEDFIELD_OP) - { - if (AcpiGbl_DbOpt_verbose) - { - (void) AcpiPsDisplayObjectPathname (NULL, Op); - } - } - break; - } - - switch (Op->Common.AmlOpcode) - { - case AML_METHOD_OP: - - AcpiDmMethodFlags (Op); - AcpiOsPrintf (")"); - break; - - - case AML_NAME_OP: - - /* Check for _HID and related EISAID() */ - - AcpiDmIsEisaId (Op); - AcpiOsPrintf (", "); - break; - - - case AML_REGION_OP: - - AcpiDmRegionFlags (Op); - break; - - - case AML_POWER_RES_OP: - - /* Mark the next two Ops as part of the parameter list */ - - AcpiOsPrintf (", "); - NextOp = AcpiPsGetDepthNext (NULL, Op); - NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST; - - NextOp = NextOp->Common.Next; - NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST; - return (AE_OK); - - - case AML_PROCESSOR_OP: - - /* Mark the next three Ops as part of the parameter list */ - - AcpiOsPrintf (", "); - NextOp = AcpiPsGetDepthNext (NULL, Op); - NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST; - - NextOp = NextOp->Common.Next; - NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST; - - NextOp = NextOp->Common.Next; - NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST; - return (AE_OK); - - - case AML_MUTEX_OP: - case AML_DATA_REGION_OP: - - AcpiOsPrintf (", "); - return (AE_OK); - - - case AML_EVENT_OP: - case AML_ALIAS_OP: - - return (AE_OK); - - - case AML_SCOPE_OP: - case AML_DEVICE_OP: - case AML_THERMAL_ZONE_OP: - - AcpiOsPrintf (")"); - break; - - - default: - - AcpiOsPrintf ("*** Unhandled named opcode %X\n", Op->Common.AmlOpcode); - break; - } - } - - else switch (Op->Common.AmlOpcode) - { - case AML_FIELD_OP: - case AML_BANK_FIELD_OP: - case AML_INDEX_FIELD_OP: - - Info->BitOffset = 0; - - /* Name of the parent OperationRegion */ - - NextOp = AcpiPsGetDepthNext (NULL, Op); - AcpiDmNamestring (NextOp->Common.Value.Name); - AcpiOsPrintf (", "); - NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; - - switch (Op->Common.AmlOpcode) - { - case AML_BANK_FIELD_OP: - - /* Namestring - Bank Name */ - - NextOp = AcpiPsGetDepthNext (NULL, NextOp); - AcpiDmNamestring (NextOp->Common.Value.Name); - NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; - AcpiOsPrintf (", "); - - /* - * Bank Value. This is a TermArg in the middle of the parameter - * list, must handle it here. - * - * Disassemble the TermArg parse tree. ACPI_PARSEOP_PARAMLIST - * eliminates newline in the output. - */ - NextOp = NextOp->Common.Next; - - Info->Flags = ACPI_PARSEOP_PARAMLIST; - AcpiDmWalkParseTree (NextOp, AcpiDmDescendingOp, AcpiDmAscendingOp, Info); - Info->Flags = 0; - Info->Level = Level; - - NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; - AcpiOsPrintf (", "); - break; - - case AML_INDEX_FIELD_OP: - - /* Namestring - Data Name */ - - NextOp = AcpiPsGetDepthNext (NULL, NextOp); - AcpiDmNamestring (NextOp->Common.Value.Name); - AcpiOsPrintf (", "); - NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; - break; - - default: - - break; - } - - AcpiDmFieldFlags (NextOp); - break; - - - case AML_BUFFER_OP: - - /* The next op is the size parameter */ - - NextOp = AcpiPsGetDepthNext (NULL, Op); - if (!NextOp) - { - /* Single-step support */ - - return (AE_OK); - } - - if (Op->Common.DisasmOpcode == ACPI_DASM_RESOURCE) - { - /* - * We have a resource list. Don't need to output - * the buffer size Op. Open up a new block - */ - NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; - NextOp = NextOp->Common.Next; - AcpiOsPrintf (")\n"); - AcpiDmIndent (Info->Level); - AcpiOsPrintf ("{\n"); - return (AE_OK); - } - - /* Normal Buffer, mark size as in the parameter list */ - - NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST; - return (AE_OK); - - - case AML_VAR_PACKAGE_OP: - case AML_IF_OP: - case AML_WHILE_OP: - - /* The next op is the size or predicate parameter */ - - NextOp = AcpiPsGetDepthNext (NULL, Op); - if (NextOp) - { - NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST; - } - return (AE_OK); - - - case AML_PACKAGE_OP: - - /* The next op is the size or predicate parameter */ - - NextOp = AcpiPsGetDepthNext (NULL, Op); - if (NextOp) - { - NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMLIST; - } - return (AE_OK); - - - case AML_MATCH_OP: - - AcpiDmMatchOp (Op); - break; - - - default: - - break; - } - - if (AcpiDmBlockType (Op) & BLOCK_BRACE) - { - AcpiOsPrintf ("\n"); - AcpiDmIndent (Level); - AcpiOsPrintf ("{\n"); - } - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDmAscendingOp - * - * PARAMETERS: ASL_WALK_CALLBACK - * - * RETURN: Status - * - * DESCRIPTION: Second visitation of a parse object, during ascent of parse - * tree. Close out any parameter lists and complete the opcode. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDmAscendingOp ( - ACPI_PARSE_OBJECT *Op, - UINT32 Level, - void *Context) -{ - ACPI_OP_WALK_INFO *Info = Context; - - - if (Op->Common.DisasmFlags & ACPI_PARSEOP_IGNORE) - { - /* Ignore this op -- it was handled elsewhere */ - - return (AE_OK); - } - - if ((Level == 0) && (Op->Common.AmlOpcode == AML_SCOPE_OP)) - { - /* Indicates the end of the current descriptor block (table) */ - - AcpiOsPrintf ("}\n\n"); - return (AE_OK); - } - - switch (AcpiDmBlockType (Op)) - { - case BLOCK_PAREN: - - /* Completed an op that has arguments, add closing paren */ - - AcpiOsPrintf (")"); - - /* Could be a nested operator, check if comma required */ - - if (!AcpiDmCommaIfListMember (Op)) - { - if ((AcpiDmBlockType (Op->Common.Parent) & BLOCK_BRACE) && - (!(Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST)) && - (Op->Common.AmlOpcode != AML_INT_BYTELIST_OP)) - { - /* - * This is a first-level element of a term list - * start a new line - */ - if (!(Info->Flags & ACPI_PARSEOP_PARAMLIST)) - { - AcpiOsPrintf ("\n"); - } - } - } - break; - - - case BLOCK_BRACE: - case (BLOCK_BRACE | BLOCK_PAREN): - - /* Completed an op that has a term list, add closing brace */ - - if (Op->Common.DisasmFlags & ACPI_PARSEOP_EMPTY_TERMLIST) - { - AcpiOsPrintf ("}"); - } - else - { - AcpiDmIndent (Level); - AcpiOsPrintf ("}"); - } - - AcpiDmCommaIfListMember (Op); - - if (AcpiDmBlockType (Op->Common.Parent) != BLOCK_PAREN) - { - AcpiOsPrintf ("\n"); - if (!(Op->Common.DisasmFlags & ACPI_PARSEOP_EMPTY_TERMLIST)) - { - if ((Op->Common.AmlOpcode == AML_IF_OP) && - (Op->Common.Next) && - (Op->Common.Next->Common.AmlOpcode == AML_ELSE_OP)) - { - break; - } - - if ((AcpiDmBlockType (Op->Common.Parent) & BLOCK_BRACE) && - (!Op->Common.Next)) - { - break; - } - AcpiOsPrintf ("\n"); - } - } - break; - - - case BLOCK_NONE: - default: - - /* Could be a nested operator, check if comma required */ - - if (!AcpiDmCommaIfListMember (Op)) - { - if ((AcpiDmBlockType (Op->Common.Parent) & BLOCK_BRACE) && - (!(Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST)) && - (Op->Common.AmlOpcode != AML_INT_BYTELIST_OP)) - { - /* - * This is a first-level element of a term list - * start a new line - */ - AcpiOsPrintf ("\n"); - } - } - else if (Op->Common.Parent) - { - switch (Op->Common.Parent->Common.AmlOpcode) - { - case AML_PACKAGE_OP: - case AML_VAR_PACKAGE_OP: - - if (!(Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST)) - { - AcpiOsPrintf ("\n"); - } - break; - - default: - - break; - } - } - break; - } - - if (Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST) - { - if ((Op->Common.Next) && - (Op->Common.Next->Common.DisasmFlags & ACPI_PARSEOP_PARAMLIST)) - { - return (AE_OK); - } - - /* - * Just completed a parameter node for something like "Buffer (param)". - * Close the paren and open up the term list block with a brace - */ - if (Op->Common.Next) - { - AcpiOsPrintf (")\n"); - AcpiDmIndent (Level - 1); - AcpiOsPrintf ("{\n"); - } - else - { - Op->Common.Parent->Common.DisasmFlags |= - ACPI_PARSEOP_EMPTY_TERMLIST; - AcpiOsPrintf (") {"); - } - } - - if ((Op->Common.AmlOpcode == AML_NAME_OP) || - (Op->Common.AmlOpcode == AML_RETURN_OP)) - { - Info->Level++; - } - return (AE_OK); -} - - -#endif /* ACPI_DISASSEMBLER */ diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsfield.c b/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsfield.c deleted file mode 100644 index 12d55f40c..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsfield.c +++ /dev/null @@ -1,776 +0,0 @@ -/****************************************************************************** - * - * Module Name: dsfield - Dispatcher field routines - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __DSFIELD_C__ - -#include "acpi.h" -#include "accommon.h" -#include "amlcode.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "acparser.h" - - -#define _COMPONENT ACPI_DISPATCHER - ACPI_MODULE_NAME ("dsfield") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiDsGetFieldNames ( - ACPI_CREATE_FIELD_INFO *Info, - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Arg); - - -/******************************************************************************* - * - * FUNCTION: AcpiDsCreateBufferField - * - * PARAMETERS: Op - Current parse op (CreateXXField) - * WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Execute the CreateField operators: - * CreateBitFieldOp, - * CreateByteFieldOp, - * CreateWordFieldOp, - * CreateDWordFieldOp, - * CreateQWordFieldOp, - * CreateFieldOp (all of which define a field in a buffer) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsCreateBufferField ( - ACPI_PARSE_OBJECT *Op, - ACPI_WALK_STATE *WalkState) -{ - ACPI_PARSE_OBJECT *Arg; - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT *SecondDesc = NULL; - UINT32 Flags; - - - ACPI_FUNCTION_TRACE (DsCreateBufferField); - - - /* - * Get the NameString argument (name of the new BufferField) - */ - if (Op->Common.AmlOpcode == AML_CREATE_FIELD_OP) - { - /* For CreateField, name is the 4th argument */ - - Arg = AcpiPsGetArg (Op, 3); - } - else - { - /* For all other CreateXXXField operators, name is the 3rd argument */ - - Arg = AcpiPsGetArg (Op, 2); - } - - if (!Arg) - { - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } - - if (WalkState->DeferredNode) - { - Node = WalkState->DeferredNode; - Status = AE_OK; - } - else - { - /* Execute flag should always be set when this function is entered */ - - if (!(WalkState->ParseFlags & ACPI_PARSE_EXECUTE)) - { - return_ACPI_STATUS (AE_AML_INTERNAL); - } - - /* Creating new namespace node, should not already exist */ - - Flags = ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE | - ACPI_NS_ERROR_IF_FOUND; - - /* - * Mark node temporary if we are executing a normal control - * method. (Don't mark if this is a module-level code method) - */ - if (WalkState->MethodNode && - !(WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL)) - { - Flags |= ACPI_NS_TEMPORARY; - } - - /* Enter the NameString into the namespace */ - - Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.String, - ACPI_TYPE_ANY, ACPI_IMODE_LOAD_PASS1, - Flags, WalkState, &Node); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR_NAMESPACE (Arg->Common.Value.String, Status); - return_ACPI_STATUS (Status); - } - } - - /* - * We could put the returned object (Node) on the object stack for later, - * but for now, we will put it in the "op" object that the parser uses, - * so we can get it again at the end of this scope. - */ - Op->Common.Node = Node; - - /* - * If there is no object attached to the node, this node was just created - * and we need to create the field object. Otherwise, this was a lookup - * of an existing node and we don't want to create the field object again. - */ - ObjDesc = AcpiNsGetAttachedObject (Node); - if (ObjDesc) - { - return_ACPI_STATUS (AE_OK); - } - - /* - * The Field definition is not fully parsed at this time. - * (We must save the address of the AML for the buffer and index operands) - */ - - /* Create the buffer field object */ - - ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_BUFFER_FIELD); - if (!ObjDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* - * Remember location in AML stream of the field unit opcode and operands -- - * since the buffer and index operands must be evaluated. - */ - SecondDesc = ObjDesc->Common.NextObject; - SecondDesc->Extra.AmlStart = Op->Named.Data; - SecondDesc->Extra.AmlLength = Op->Named.Length; - ObjDesc->BufferField.Node = Node; - - /* Attach constructed field descriptors to parent node */ - - Status = AcpiNsAttachObject (Node, ObjDesc, ACPI_TYPE_BUFFER_FIELD); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - -Cleanup: - - /* Remove local reference to the object */ - - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsGetFieldNames - * - * PARAMETERS: Info - CreateField info structure - * ` WalkState - Current method state - * Arg - First parser arg for the field name list - * - * RETURN: Status - * - * DESCRIPTION: Process all named fields in a field declaration. Names are - * entered into the namespace. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDsGetFieldNames ( - ACPI_CREATE_FIELD_INFO *Info, - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Arg) -{ - ACPI_STATUS Status; - ACPI_INTEGER Position; - - - ACPI_FUNCTION_TRACE_PTR (DsGetFieldNames, Info); - - - /* First field starts at bit zero */ - - Info->FieldBitPosition = 0; - - /* Process all elements in the field list (of parse nodes) */ - - while (Arg) - { - /* - * Three types of field elements are handled: - * 1) Offset - specifies a bit offset - * 2) AccessAs - changes the access mode - * 3) Name - Enters a new named field into the namespace - */ - switch (Arg->Common.AmlOpcode) - { - case AML_INT_RESERVEDFIELD_OP: - - Position = (ACPI_INTEGER) Info->FieldBitPosition - + (ACPI_INTEGER) Arg->Common.Value.Size; - - if (Position > ACPI_UINT32_MAX) - { - ACPI_ERROR ((AE_INFO, - "Bit offset within field too large (> 0xFFFFFFFF)")); - return_ACPI_STATUS (AE_SUPPORT); - } - - Info->FieldBitPosition = (UINT32) Position; - break; - - - case AML_INT_ACCESSFIELD_OP: - - /* - * Get a new AccessType and AccessAttribute -- to be used for all - * field units that follow, until field end or another AccessAs - * keyword. - * - * In FieldFlags, preserve the flag bits other than the - * ACCESS_TYPE bits - */ - Info->FieldFlags = (UINT8) - ((Info->FieldFlags & ~(AML_FIELD_ACCESS_TYPE_MASK)) | - ((UINT8) ((UINT32) Arg->Common.Value.Integer >> 8))); - - Info->Attribute = (UINT8) (Arg->Common.Value.Integer); - break; - - - case AML_INT_NAMEDFIELD_OP: - - /* Lookup the name, it should already exist */ - - Status = AcpiNsLookup (WalkState->ScopeInfo, - (char *) &Arg->Named.Name, Info->FieldType, - ACPI_IMODE_EXECUTE, ACPI_NS_DONT_OPEN_SCOPE, - WalkState, &Info->FieldNode); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR_NAMESPACE ((char *) &Arg->Named.Name, Status); - return_ACPI_STATUS (Status); - } - else - { - Arg->Common.Node = Info->FieldNode; - Info->FieldBitLength = Arg->Common.Value.Size; - - /* - * If there is no object attached to the node, this node was - * just created and we need to create the field object. - * Otherwise, this was a lookup of an existing node and we - * don't want to create the field object again. - */ - if (!AcpiNsGetAttachedObject (Info->FieldNode)) - { - Status = AcpiExPrepFieldValue (Info); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - } - - /* Keep track of bit position for the next field */ - - Position = (ACPI_INTEGER) Info->FieldBitPosition - + (ACPI_INTEGER) Arg->Common.Value.Size; - - if (Position > ACPI_UINT32_MAX) - { - ACPI_ERROR ((AE_INFO, - "Field [%4.4s] bit offset too large (> 0xFFFFFFFF)", - ACPI_CAST_PTR (char, &Info->FieldNode->Name))); - return_ACPI_STATUS (AE_SUPPORT); - } - - Info->FieldBitPosition += Info->FieldBitLength; - break; - - - default: - - ACPI_ERROR ((AE_INFO, - "Invalid opcode in field list: %X", Arg->Common.AmlOpcode)); - return_ACPI_STATUS (AE_AML_BAD_OPCODE); - } - - Arg = Arg->Common.Next; - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsCreateField - * - * PARAMETERS: Op - Op containing the Field definition and args - * RegionNode - Object for the containing Operation Region - * ` WalkState - Current method state - * - * RETURN: Status - * - * DESCRIPTION: Create a new field in the specified operation region - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsCreateField ( - ACPI_PARSE_OBJECT *Op, - ACPI_NAMESPACE_NODE *RegionNode, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - ACPI_PARSE_OBJECT *Arg; - ACPI_CREATE_FIELD_INFO Info; - - - ACPI_FUNCTION_TRACE_PTR (DsCreateField, Op); - - - /* First arg is the name of the parent OpRegion (must already exist) */ - - Arg = Op->Common.Value.Arg; - if (!RegionNode) - { - Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.Name, - ACPI_TYPE_REGION, ACPI_IMODE_EXECUTE, - ACPI_NS_SEARCH_PARENT, WalkState, &RegionNode); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR_NAMESPACE (Arg->Common.Value.Name, Status); - return_ACPI_STATUS (Status); - } - } - - /* Second arg is the field flags */ - - Arg = Arg->Common.Next; - Info.FieldFlags = (UINT8) Arg->Common.Value.Integer; - Info.Attribute = 0; - - /* Each remaining arg is a Named Field */ - - Info.FieldType = ACPI_TYPE_LOCAL_REGION_FIELD; - Info.RegionNode = RegionNode; - - Status = AcpiDsGetFieldNames (&Info, WalkState, Arg->Common.Next); - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsInitFieldObjects - * - * PARAMETERS: Op - Op containing the Field definition and args - * ` WalkState - Current method state - * - * RETURN: Status - * - * DESCRIPTION: For each "Field Unit" name in the argument list that is - * part of the field declaration, enter the name into the - * namespace. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsInitFieldObjects ( - ACPI_PARSE_OBJECT *Op, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - ACPI_PARSE_OBJECT *Arg = NULL; - ACPI_NAMESPACE_NODE *Node; - UINT8 Type = 0; - UINT32 Flags; - - - ACPI_FUNCTION_TRACE_PTR (DsInitFieldObjects, Op); - - - /* Execute flag should always be set when this function is entered */ - - if (!(WalkState->ParseFlags & ACPI_PARSE_EXECUTE)) - { - if (WalkState->ParseFlags & ACPI_PARSE_DEFERRED_OP) - { - /* BankField Op is deferred, just return OK */ - - return_ACPI_STATUS (AE_OK); - } - - return_ACPI_STATUS (AE_AML_INTERNAL); - } - - /* - * Get the FieldList argument for this opcode. This is the start of the - * list of field elements. - */ - switch (WalkState->Opcode) - { - case AML_FIELD_OP: - Arg = AcpiPsGetArg (Op, 2); - Type = ACPI_TYPE_LOCAL_REGION_FIELD; - break; - - case AML_BANK_FIELD_OP: - Arg = AcpiPsGetArg (Op, 4); - Type = ACPI_TYPE_LOCAL_BANK_FIELD; - break; - - case AML_INDEX_FIELD_OP: - Arg = AcpiPsGetArg (Op, 3); - Type = ACPI_TYPE_LOCAL_INDEX_FIELD; - break; - - default: - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Creating new namespace node(s), should not already exist */ - - Flags = ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE | - ACPI_NS_ERROR_IF_FOUND; - - /* - * Mark node(s) temporary if we are executing a normal control - * method. (Don't mark if this is a module-level code method) - */ - if (WalkState->MethodNode && - !(WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL)) - { - Flags |= ACPI_NS_TEMPORARY; - } - - /* - * Walk the list of entries in the FieldList - * Note: FieldList can be of zero length. In this case, Arg will be NULL. - */ - while (Arg) - { - /* - * Ignore OFFSET and ACCESSAS terms here; we are only interested in the - * field names in order to enter them into the namespace. - */ - if (Arg->Common.AmlOpcode == AML_INT_NAMEDFIELD_OP) - { - Status = AcpiNsLookup (WalkState->ScopeInfo, - (char *) &Arg->Named.Name, Type, ACPI_IMODE_LOAD_PASS1, - Flags, WalkState, &Node); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR_NAMESPACE ((char *) &Arg->Named.Name, Status); - if (Status != AE_ALREADY_EXISTS) - { - return_ACPI_STATUS (Status); - } - - /* Name already exists, just ignore this error */ - - Status = AE_OK; - } - - Arg->Common.Node = Node; - } - - /* Get the next field element in the list */ - - Arg = Arg->Common.Next; - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsCreateBankField - * - * PARAMETERS: Op - Op containing the Field definition and args - * RegionNode - Object for the containing Operation Region - * WalkState - Current method state - * - * RETURN: Status - * - * DESCRIPTION: Create a new bank field in the specified operation region - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsCreateBankField ( - ACPI_PARSE_OBJECT *Op, - ACPI_NAMESPACE_NODE *RegionNode, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - ACPI_PARSE_OBJECT *Arg; - ACPI_CREATE_FIELD_INFO Info; - - - ACPI_FUNCTION_TRACE_PTR (DsCreateBankField, Op); - - - /* First arg is the name of the parent OpRegion (must already exist) */ - - Arg = Op->Common.Value.Arg; - if (!RegionNode) - { - Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.Name, - ACPI_TYPE_REGION, ACPI_IMODE_EXECUTE, - ACPI_NS_SEARCH_PARENT, WalkState, &RegionNode); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR_NAMESPACE (Arg->Common.Value.Name, Status); - return_ACPI_STATUS (Status); - } - } - - /* Second arg is the Bank Register (Field) (must already exist) */ - - Arg = Arg->Common.Next; - Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.String, - ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, - ACPI_NS_SEARCH_PARENT, WalkState, &Info.RegisterNode); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR_NAMESPACE (Arg->Common.Value.String, Status); - return_ACPI_STATUS (Status); - } - - /* - * Third arg is the BankValue - * This arg is a TermArg, not a constant - * It will be evaluated later, by AcpiDsEvalBankFieldOperands - */ - Arg = Arg->Common.Next; - - /* Fourth arg is the field flags */ - - Arg = Arg->Common.Next; - Info.FieldFlags = (UINT8) Arg->Common.Value.Integer; - - /* Each remaining arg is a Named Field */ - - Info.FieldType = ACPI_TYPE_LOCAL_BANK_FIELD; - Info.RegionNode = RegionNode; - - /* - * Use Info.DataRegisterNode to store BankField Op - * It's safe because DataRegisterNode will never be used when create bank field - * We store AmlStart and AmlLength in the BankField Op for late evaluation - * Used in AcpiExPrepFieldValue(Info) - * - * TBD: Or, should we add a field in ACPI_CREATE_FIELD_INFO, like "void *ParentOp"? - */ - Info.DataRegisterNode = (ACPI_NAMESPACE_NODE*) Op; - - Status = AcpiDsGetFieldNames (&Info, WalkState, Arg->Common.Next); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsCreateIndexField - * - * PARAMETERS: Op - Op containing the Field definition and args - * RegionNode - Object for the containing Operation Region - * ` WalkState - Current method state - * - * RETURN: Status - * - * DESCRIPTION: Create a new index field in the specified operation region - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsCreateIndexField ( - ACPI_PARSE_OBJECT *Op, - ACPI_NAMESPACE_NODE *RegionNode, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - ACPI_PARSE_OBJECT *Arg; - ACPI_CREATE_FIELD_INFO Info; - - - ACPI_FUNCTION_TRACE_PTR (DsCreateIndexField, Op); - - - /* First arg is the name of the Index register (must already exist) */ - - Arg = Op->Common.Value.Arg; - Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.String, - ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, - ACPI_NS_SEARCH_PARENT, WalkState, &Info.RegisterNode); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR_NAMESPACE (Arg->Common.Value.String, Status); - return_ACPI_STATUS (Status); - } - - /* Second arg is the data register (must already exist) */ - - Arg = Arg->Common.Next; - Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.String, - ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, - ACPI_NS_SEARCH_PARENT, WalkState, &Info.DataRegisterNode); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR_NAMESPACE (Arg->Common.Value.String, Status); - return_ACPI_STATUS (Status); - } - - /* Next arg is the field flags */ - - Arg = Arg->Common.Next; - Info.FieldFlags = (UINT8) Arg->Common.Value.Integer; - - /* Each remaining arg is a Named Field */ - - Info.FieldType = ACPI_TYPE_LOCAL_INDEX_FIELD; - Info.RegionNode = RegionNode; - - Status = AcpiDsGetFieldNames (&Info, WalkState, Arg->Common.Next); - - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsinit.c b/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsinit.c deleted file mode 100644 index efea20e83..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsinit.c +++ /dev/null @@ -1,310 +0,0 @@ -/****************************************************************************** - * - * Module Name: dsinit - Object initialization namespace walk - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __DSINIT_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acdispat.h" -#include "acnamesp.h" -#include "actables.h" - -#define _COMPONENT ACPI_DISPATCHER - ACPI_MODULE_NAME ("dsinit") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiDsInitOneObject ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue); - - -/******************************************************************************* - * - * FUNCTION: AcpiDsInitOneObject - * - * PARAMETERS: ObjHandle - Node for the object - * Level - Current nesting level - * Context - Points to a init info struct - * ReturnValue - Not used - * - * RETURN: Status - * - * DESCRIPTION: Callback from AcpiWalkNamespace. Invoked for every object - * within the namespace. - * - * Currently, the only objects that require initialization are: - * 1) Methods - * 2) Operation Regions - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDsInitOneObject ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue) -{ - ACPI_INIT_WALK_INFO *Info = (ACPI_INIT_WALK_INFO *) Context; - ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; - ACPI_OBJECT_TYPE Type; - ACPI_STATUS Status; - - - ACPI_FUNCTION_ENTRY (); - - - /* - * We are only interested in NS nodes owned by the table that - * was just loaded - */ - if (Node->OwnerId != Info->OwnerId) - { - return (AE_OK); - } - - Info->ObjectCount++; - - /* And even then, we are only interested in a few object types */ - - Type = AcpiNsGetType (ObjHandle); - - switch (Type) - { - case ACPI_TYPE_REGION: - - Status = AcpiDsInitializeRegion (ObjHandle); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "During Region initialization %p [%4.4s]", - ObjHandle, AcpiUtGetNodeName (ObjHandle))); - } - - Info->OpRegionCount++; - break; - - - case ACPI_TYPE_METHOD: - - Info->MethodCount++; - break; - - - case ACPI_TYPE_DEVICE: - - Info->DeviceCount++; - break; - - - default: - break; - } - - /* - * We ignore errors from above, and always return OK, since - * we don't want to abort the walk on a single error. - */ - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsInitializeObjects - * - * PARAMETERS: TableDesc - Descriptor for parent ACPI table - * StartNode - Root of subtree to be initialized. - * - * RETURN: Status - * - * DESCRIPTION: Walk the namespace starting at "StartNode" and perform any - * necessary initialization on the objects found therein - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsInitializeObjects ( - UINT32 TableIndex, - ACPI_NAMESPACE_NODE *StartNode) -{ - ACPI_STATUS Status; - ACPI_INIT_WALK_INFO Info; - ACPI_TABLE_HEADER *Table; - ACPI_OWNER_ID OwnerId; - - - ACPI_FUNCTION_TRACE (DsInitializeObjects); - - - Status = AcpiTbGetOwnerId (TableIndex, &OwnerId); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "**** Starting initialization of namespace objects ****\n")); - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "Parsing all Control Methods:")); - - Info.MethodCount = 0; - Info.OpRegionCount = 0; - Info.ObjectCount = 0; - Info.DeviceCount = 0; - Info.TableIndex = TableIndex; - Info.OwnerId = OwnerId; - - /* Walk entire namespace from the supplied root */ - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * We don't use AcpiWalkNamespace since we do not want to acquire - * the namespace reader lock. - */ - Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, StartNode, ACPI_UINT32_MAX, - ACPI_NS_WALK_UNLOCK, AcpiDsInitOneObject, NULL, &Info, NULL); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, "During WalkNamespace")); - } - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - - Status = AcpiGetTableByIndex (TableIndex, &Table); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, - "\nTable [%4.4s](id %4.4X) - %hd Objects with %hd Devices %hd Methods %hd Regions\n", - Table->Signature, OwnerId, Info.ObjectCount, - Info.DeviceCount, Info.MethodCount, Info.OpRegionCount)); - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "%hd Methods, %hd Regions\n", Info.MethodCount, Info.OpRegionCount)); - - return_ACPI_STATUS (AE_OK); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsmethod.c b/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsmethod.c deleted file mode 100644 index 48172e962..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsmethod.c +++ /dev/null @@ -1,762 +0,0 @@ -/****************************************************************************** - * - * Module Name: dsmethod - Parser/Interpreter interface - control method parsing - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __DSMETHOD_C__ - -#include "acpi.h" -#include "accommon.h" -#include "amlcode.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "acdisasm.h" - - -#define _COMPONENT ACPI_DISPATCHER - ACPI_MODULE_NAME ("dsmethod") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiDsCreateMethodMutex ( - ACPI_OPERAND_OBJECT *MethodDesc); - - -/******************************************************************************* - * - * FUNCTION: AcpiDsMethodError - * - * PARAMETERS: Status - Execution status - * WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Called on method error. Invoke the global exception handler if - * present, dump the method data if the disassembler is configured - * - * Note: Allows the exception handler to change the status code - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsMethodError ( - ACPI_STATUS Status, - ACPI_WALK_STATE *WalkState) -{ - ACPI_FUNCTION_ENTRY (); - - - /* Ignore AE_OK and control exception codes */ - - if (ACPI_SUCCESS (Status) || - (Status & AE_CODE_CONTROL)) - { - return (Status); - } - - /* Invoke the global exception handler */ - - if (AcpiGbl_ExceptionHandler) - { - /* Exit the interpreter, allow handler to execute methods */ - - AcpiExExitInterpreter (); - - /* - * Handler can map the exception code to anything it wants, including - * AE_OK, in which case the executing method will not be aborted. - */ - Status = AcpiGbl_ExceptionHandler (Status, - WalkState->MethodNode ? - WalkState->MethodNode->Name.Integer : 0, - WalkState->Opcode, WalkState->AmlOffset, NULL); - AcpiExEnterInterpreter (); - } - - AcpiDsClearImplicitReturn (WalkState); - -#ifdef ACPI_DISASSEMBLER - if (ACPI_FAILURE (Status)) - { - /* Display method locals/args if disassembler is present */ - - AcpiDmDumpMethodInfo (Status, WalkState, WalkState->Op); - } -#endif - - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsCreateMethodMutex - * - * PARAMETERS: ObjDesc - The method object - * - * RETURN: Status - * - * DESCRIPTION: Create a mutex object for a serialized control method - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDsCreateMethodMutex ( - ACPI_OPERAND_OBJECT *MethodDesc) -{ - ACPI_OPERAND_OBJECT *MutexDesc; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (DsCreateMethodMutex); - - - /* Create the new mutex object */ - - MutexDesc = AcpiUtCreateInternalObject (ACPI_TYPE_MUTEX); - if (!MutexDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Create the actual OS Mutex */ - - Status = AcpiOsCreateMutex (&MutexDesc->Mutex.OsMutex); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - MutexDesc->Mutex.SyncLevel = MethodDesc->Method.SyncLevel; - MethodDesc->Method.Mutex = MutexDesc; - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsBeginMethodExecution - * - * PARAMETERS: MethodNode - Node of the method - * ObjDesc - The method object - * WalkState - current state, NULL if not yet executing - * a method. - * - * RETURN: Status - * - * DESCRIPTION: Prepare a method for execution. Parses the method if necessary, - * increments the thread count, and waits at the method semaphore - * for clearance to execute. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsBeginMethodExecution ( - ACPI_NAMESPACE_NODE *MethodNode, - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE_PTR (DsBeginMethodExecution, MethodNode); - - - if (!MethodNode) - { - return_ACPI_STATUS (AE_NULL_ENTRY); - } - - /* Prevent wraparound of thread count */ - - if (ObjDesc->Method.ThreadCount == ACPI_UINT8_MAX) - { - ACPI_ERROR ((AE_INFO, - "Method reached maximum reentrancy limit (255)")); - return_ACPI_STATUS (AE_AML_METHOD_LIMIT); - } - - /* - * If this method is serialized, we need to acquire the method mutex. - */ - if (ObjDesc->Method.MethodFlags & AML_METHOD_SERIALIZED) - { - /* - * Create a mutex for the method if it is defined to be Serialized - * and a mutex has not already been created. We defer the mutex creation - * until a method is actually executed, to minimize the object count - */ - if (!ObjDesc->Method.Mutex) - { - Status = AcpiDsCreateMethodMutex (ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* - * The CurrentSyncLevel (per-thread) must be less than or equal to - * the sync level of the method. This mechanism provides some - * deadlock prevention - * - * Top-level method invocation has no walk state at this point - */ - if (WalkState && - (WalkState->Thread->CurrentSyncLevel > ObjDesc->Method.Mutex->Mutex.SyncLevel)) - { - ACPI_ERROR ((AE_INFO, - "Cannot acquire Mutex for method [%4.4s], current SyncLevel is too large (%d)", - AcpiUtGetNodeName (MethodNode), - WalkState->Thread->CurrentSyncLevel)); - - return_ACPI_STATUS (AE_AML_MUTEX_ORDER); - } - - /* - * Obtain the method mutex if necessary. Do not acquire mutex for a - * recursive call. - */ - if (!WalkState || - !ObjDesc->Method.Mutex->Mutex.ThreadId || - (WalkState->Thread->ThreadId != ObjDesc->Method.Mutex->Mutex.ThreadId)) - { - /* - * Acquire the method mutex. This releases the interpreter if we - * block (and reacquires it before it returns) - */ - Status = AcpiExSystemWaitMutex (ObjDesc->Method.Mutex->Mutex.OsMutex, - ACPI_WAIT_FOREVER); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Update the mutex and walk info and save the original SyncLevel */ - - if (WalkState) - { - ObjDesc->Method.Mutex->Mutex.OriginalSyncLevel = - WalkState->Thread->CurrentSyncLevel; - - ObjDesc->Method.Mutex->Mutex.ThreadId = WalkState->Thread->ThreadId; - WalkState->Thread->CurrentSyncLevel = ObjDesc->Method.SyncLevel; - } - else - { - ObjDesc->Method.Mutex->Mutex.OriginalSyncLevel = - ObjDesc->Method.Mutex->Mutex.SyncLevel; - } - } - - /* Always increase acquisition depth */ - - ObjDesc->Method.Mutex->Mutex.AcquisitionDepth++; - } - - /* - * Allocate an Owner ID for this method, only if this is the first thread - * to begin concurrent execution. We only need one OwnerId, even if the - * method is invoked recursively. - */ - if (!ObjDesc->Method.OwnerId) - { - Status = AcpiUtAllocateOwnerId (&ObjDesc->Method.OwnerId); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - } - - /* - * Increment the method parse tree thread count since it has been - * reentered one more time (even if it is the same thread) - */ - ObjDesc->Method.ThreadCount++; - AcpiMethodCount++; - return_ACPI_STATUS (Status); - - -Cleanup: - /* On error, must release the method mutex (if present) */ - - if (ObjDesc->Method.Mutex) - { - AcpiOsReleaseMutex (ObjDesc->Method.Mutex->Mutex.OsMutex); - } - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsCallControlMethod - * - * PARAMETERS: Thread - Info for this thread - * ThisWalkState - Current walk state - * Op - Current Op to be walked - * - * RETURN: Status - * - * DESCRIPTION: Transfer execution to a called control method - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsCallControlMethod ( - ACPI_THREAD_STATE *Thread, - ACPI_WALK_STATE *ThisWalkState, - ACPI_PARSE_OBJECT *Op) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *MethodNode; - ACPI_WALK_STATE *NextWalkState = NULL; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_EVALUATE_INFO *Info; - UINT32 i; - - - ACPI_FUNCTION_TRACE_PTR (DsCallControlMethod, ThisWalkState); - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Calling method %p, currentstate=%p\n", - ThisWalkState->PrevOp, ThisWalkState)); - - /* - * Get the namespace entry for the control method we are about to call - */ - MethodNode = ThisWalkState->MethodCallNode; - if (!MethodNode) - { - return_ACPI_STATUS (AE_NULL_ENTRY); - } - - ObjDesc = AcpiNsGetAttachedObject (MethodNode); - if (!ObjDesc) - { - return_ACPI_STATUS (AE_NULL_OBJECT); - } - - /* Init for new method, possibly wait on method mutex */ - - Status = AcpiDsBeginMethodExecution (MethodNode, ObjDesc, - ThisWalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Begin method parse/execution. Create a new walk state */ - - NextWalkState = AcpiDsCreateWalkState (ObjDesc->Method.OwnerId, - NULL, ObjDesc, Thread); - if (!NextWalkState) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* - * The resolved arguments were put on the previous walk state's operand - * stack. Operands on the previous walk state stack always - * start at index 0. Also, null terminate the list of arguments - */ - ThisWalkState->Operands [ThisWalkState->NumOperands] = NULL; - - /* - * Allocate and initialize the evaluation information block - * TBD: this is somewhat inefficient, should change interface to - * DsInitAmlWalk. For now, keeps this struct off the CPU stack - */ - Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); - if (!Info) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - Info->Parameters = &ThisWalkState->Operands[0]; - - Status = AcpiDsInitAmlWalk (NextWalkState, NULL, MethodNode, - ObjDesc->Method.AmlStart, ObjDesc->Method.AmlLength, - Info, ACPI_IMODE_EXECUTE); - - ACPI_FREE (Info); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - /* - * Delete the operands on the previous walkstate operand stack - * (they were copied to new objects) - */ - for (i = 0; i < ObjDesc->Method.ParamCount; i++) - { - AcpiUtRemoveReference (ThisWalkState->Operands [i]); - ThisWalkState->Operands [i] = NULL; - } - - /* Clear the operand stack */ - - ThisWalkState->NumOperands = 0; - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "**** Begin nested execution of [%4.4s] **** WalkState=%p\n", - MethodNode->Name.Ascii, NextWalkState)); - - /* Invoke an internal method if necessary */ - - if (ObjDesc->Method.MethodFlags & AML_METHOD_INTERNAL_ONLY) - { - Status = ObjDesc->Method.Extra.Implementation (NextWalkState); - if (Status == AE_OK) - { - Status = AE_CTRL_TERMINATE; - } - } - - return_ACPI_STATUS (Status); - - -Cleanup: - - /* On error, we must terminate the method properly */ - - AcpiDsTerminateControlMethod (ObjDesc, NextWalkState); - if (NextWalkState) - { - AcpiDsDeleteWalkState (NextWalkState); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsRestartControlMethod - * - * PARAMETERS: WalkState - State for preempted method (caller) - * ReturnDesc - Return value from the called method - * - * RETURN: Status - * - * DESCRIPTION: Restart a method that was preempted by another (nested) method - * invocation. Handle the return value (if any) from the callee. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsRestartControlMethod ( - ACPI_WALK_STATE *WalkState, - ACPI_OPERAND_OBJECT *ReturnDesc) -{ - ACPI_STATUS Status; - int SameAsImplicitReturn; - - - ACPI_FUNCTION_TRACE_PTR (DsRestartControlMethod, WalkState); - - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "****Restart [%4.4s] Op %p ReturnValueFromCallee %p\n", - AcpiUtGetNodeName (WalkState->MethodNode), - WalkState->MethodCallOp, ReturnDesc)); - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - " ReturnFromThisMethodUsed?=%X ResStack %p Walk %p\n", - WalkState->ReturnUsed, - WalkState->Results, WalkState)); - - /* Did the called method return a value? */ - - if (ReturnDesc) - { - /* Is the implicit return object the same as the return desc? */ - - SameAsImplicitReturn = (WalkState->ImplicitReturnObj == ReturnDesc); - - /* Are we actually going to use the return value? */ - - if (WalkState->ReturnUsed) - { - /* Save the return value from the previous method */ - - Status = AcpiDsResultPush (ReturnDesc, WalkState); - if (ACPI_FAILURE (Status)) - { - AcpiUtRemoveReference (ReturnDesc); - return_ACPI_STATUS (Status); - } - - /* - * Save as THIS method's return value in case it is returned - * immediately to yet another method - */ - WalkState->ReturnDesc = ReturnDesc; - } - - /* - * The following code is the optional support for the so-called - * "implicit return". Some AML code assumes that the last value of the - * method is "implicitly" returned to the caller, in the absence of an - * explicit return value. - * - * Just save the last result of the method as the return value. - * - * NOTE: this is optional because the ASL language does not actually - * support this behavior. - */ - else if (!AcpiDsDoImplicitReturn (ReturnDesc, WalkState, FALSE) || - SameAsImplicitReturn) - { - /* - * Delete the return value if it will not be used by the - * calling method or remove one reference if the explicit return - * is the same as the implicit return value. - */ - AcpiUtRemoveReference (ReturnDesc); - } - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsTerminateControlMethod - * - * PARAMETERS: MethodDesc - Method object - * WalkState - State associated with the method - * - * RETURN: None - * - * DESCRIPTION: Terminate a control method. Delete everything that the method - * created, delete all locals and arguments, and delete the parse - * tree if requested. - * - * MUTEX: Interpreter is locked - * - ******************************************************************************/ - -void -AcpiDsTerminateControlMethod ( - ACPI_OPERAND_OBJECT *MethodDesc, - ACPI_WALK_STATE *WalkState) -{ - - ACPI_FUNCTION_TRACE_PTR (DsTerminateControlMethod, WalkState); - - - /* MethodDesc is required, WalkState is optional */ - - if (!MethodDesc) - { - return_VOID; - } - - if (WalkState) - { - /* Delete all arguments and locals */ - - AcpiDsMethodDataDeleteAll (WalkState); - - /* - * If method is serialized, release the mutex and restore the - * current sync level for this thread - */ - if (MethodDesc->Method.Mutex) - { - /* Acquisition Depth handles recursive calls */ - - MethodDesc->Method.Mutex->Mutex.AcquisitionDepth--; - if (!MethodDesc->Method.Mutex->Mutex.AcquisitionDepth) - { - WalkState->Thread->CurrentSyncLevel = - MethodDesc->Method.Mutex->Mutex.OriginalSyncLevel; - - AcpiOsReleaseMutex (MethodDesc->Method.Mutex->Mutex.OsMutex); - MethodDesc->Method.Mutex->Mutex.ThreadId = 0; - } - } - - /* - * Delete any namespace objects created anywhere within the - * namespace by the execution of this method. Unless this method - * is a module-level executable code method, in which case we - * want make the objects permanent. - */ - if (!(MethodDesc->Method.Flags & AOPOBJ_MODULE_LEVEL)) - { - AcpiNsDeleteNamespaceByOwner (MethodDesc->Method.OwnerId); - } - } - - /* Decrement the thread count on the method */ - - if (MethodDesc->Method.ThreadCount) - { - MethodDesc->Method.ThreadCount--; - } - else - { - ACPI_ERROR ((AE_INFO, - "Invalid zero thread count in method")); - } - - /* Are there any other threads currently executing this method? */ - - if (MethodDesc->Method.ThreadCount) - { - /* - * Additional threads. Do not release the OwnerId in this case, - * we immediately reuse it for the next thread executing this method - */ - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "*** Completed execution of one thread, %d threads remaining\n", - MethodDesc->Method.ThreadCount)); - } - else - { - /* This is the only executing thread for this method */ - - /* - * Support to dynamically change a method from NotSerialized to - * Serialized if it appears that the method is incorrectly written and - * does not support multiple thread execution. The best example of this - * is if such a method creates namespace objects and blocks. A second - * thread will fail with an AE_ALREADY_EXISTS exception - * - * This code is here because we must wait until the last thread exits - * before creating the synchronization semaphore. - */ - if ((MethodDesc->Method.MethodFlags & AML_METHOD_SERIALIZED) && - (!MethodDesc->Method.Mutex)) - { - (void) AcpiDsCreateMethodMutex (MethodDesc); - } - - /* No more threads, we can free the OwnerId */ - - if (!(MethodDesc->Method.Flags & AOPOBJ_MODULE_LEVEL)) - { - AcpiUtReleaseOwnerId (&MethodDesc->Method.OwnerId); - } - } - - return_VOID; -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsmthdat.c b/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsmthdat.c deleted file mode 100644 index 551e8480a..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsmthdat.c +++ /dev/null @@ -1,846 +0,0 @@ -/******************************************************************************* - * - * Module Name: dsmthdat - control method arguments and local variables - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __DSMTHDAT_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acdispat.h" -#include "acnamesp.h" -#include "acinterp.h" - - -#define _COMPONENT ACPI_DISPATCHER - ACPI_MODULE_NAME ("dsmthdat") - -/* Local prototypes */ - -static void -AcpiDsMethodDataDeleteValue ( - UINT8 Type, - UINT32 Index, - ACPI_WALK_STATE *WalkState); - -static ACPI_STATUS -AcpiDsMethodDataSetValue ( - UINT8 Type, - UINT32 Index, - ACPI_OPERAND_OBJECT *Object, - ACPI_WALK_STATE *WalkState); - -#ifdef ACPI_OBSOLETE_FUNCTIONS -ACPI_OBJECT_TYPE -AcpiDsMethodDataGetType ( - UINT16 Opcode, - UINT32 Index, - ACPI_WALK_STATE *WalkState); -#endif - - -/******************************************************************************* - * - * FUNCTION: AcpiDsMethodDataInit - * - * PARAMETERS: WalkState - Current walk state object - * - * RETURN: Status - * - * DESCRIPTION: Initialize the data structures that hold the method's arguments - * and locals. The data struct is an array of namespace nodes for - * each - this allows RefOf and DeRefOf to work properly for these - * special data types. - * - * NOTES: WalkState fields are initialized to zero by the - * ACPI_ALLOCATE_ZEROED(). - * - * A pseudo-Namespace Node is assigned to each argument and local - * so that RefOf() can return a pointer to the Node. - * - ******************************************************************************/ - -void -AcpiDsMethodDataInit ( - ACPI_WALK_STATE *WalkState) -{ - UINT32 i; - - - ACPI_FUNCTION_TRACE (DsMethodDataInit); - - - /* Init the method arguments */ - - for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++) - { - ACPI_MOVE_32_TO_32 (&WalkState->Arguments[i].Name, NAMEOF_ARG_NTE); - WalkState->Arguments[i].Name.Integer |= (i << 24); - WalkState->Arguments[i].DescriptorType = ACPI_DESC_TYPE_NAMED; - WalkState->Arguments[i].Type = ACPI_TYPE_ANY; - WalkState->Arguments[i].Flags = - ANOBJ_END_OF_PEER_LIST | ANOBJ_METHOD_ARG; - } - - /* Init the method locals */ - - for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++) - { - ACPI_MOVE_32_TO_32 (&WalkState->LocalVariables[i].Name, NAMEOF_LOCAL_NTE); - - WalkState->LocalVariables[i].Name.Integer |= (i << 24); - WalkState->LocalVariables[i].DescriptorType = ACPI_DESC_TYPE_NAMED; - WalkState->LocalVariables[i].Type = ACPI_TYPE_ANY; - WalkState->LocalVariables[i].Flags = - ANOBJ_END_OF_PEER_LIST | ANOBJ_METHOD_LOCAL; - } - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsMethodDataDeleteAll - * - * PARAMETERS: WalkState - Current walk state object - * - * RETURN: None - * - * DESCRIPTION: Delete method locals and arguments. Arguments are only - * deleted if this method was called from another method. - * - ******************************************************************************/ - -void -AcpiDsMethodDataDeleteAll ( - ACPI_WALK_STATE *WalkState) -{ - UINT32 Index; - - - ACPI_FUNCTION_TRACE (DsMethodDataDeleteAll); - - - /* Detach the locals */ - - for (Index = 0; Index < ACPI_METHOD_NUM_LOCALS; Index++) - { - if (WalkState->LocalVariables[Index].Object) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Deleting Local%d=%p\n", - Index, WalkState->LocalVariables[Index].Object)); - - /* Detach object (if present) and remove a reference */ - - AcpiNsDetachObject (&WalkState->LocalVariables[Index]); - } - } - - /* Detach the arguments */ - - for (Index = 0; Index < ACPI_METHOD_NUM_ARGS; Index++) - { - if (WalkState->Arguments[Index].Object) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Deleting Arg%d=%p\n", - Index, WalkState->Arguments[Index].Object)); - - /* Detach object (if present) and remove a reference */ - - AcpiNsDetachObject (&WalkState->Arguments[Index]); - } - } - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsMethodDataInitArgs - * - * PARAMETERS: *Params - Pointer to a parameter list for the method - * MaxParamCount - The arg count for this method - * WalkState - Current walk state object - * - * RETURN: Status - * - * DESCRIPTION: Initialize arguments for a method. The parameter list is a list - * of ACPI operand objects, either null terminated or whose length - * is defined by MaxParamCount. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsMethodDataInitArgs ( - ACPI_OPERAND_OBJECT **Params, - UINT32 MaxParamCount, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - UINT32 Index = 0; - - - ACPI_FUNCTION_TRACE_PTR (DsMethodDataInitArgs, Params); - - - if (!Params) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "No param list passed to method\n")); - return_ACPI_STATUS (AE_OK); - } - - /* Copy passed parameters into the new method stack frame */ - - while ((Index < ACPI_METHOD_NUM_ARGS) && - (Index < MaxParamCount) && - Params[Index]) - { - /* - * A valid parameter. - * Store the argument in the method/walk descriptor. - * Do not copy the arg in order to implement call by reference - */ - Status = AcpiDsMethodDataSetValue (ACPI_REFCLASS_ARG, Index, - Params[Index], WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Index++; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%d args passed to method\n", Index)); - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsMethodDataGetNode - * - * PARAMETERS: Type - Either ACPI_REFCLASS_LOCAL or - * ACPI_REFCLASS_ARG - * Index - Which Local or Arg whose type to get - * WalkState - Current walk state object - * Node - Where the node is returned. - * - * RETURN: Status and node - * - * DESCRIPTION: Get the Node associated with a local or arg. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsMethodDataGetNode ( - UINT8 Type, - UINT32 Index, - ACPI_WALK_STATE *WalkState, - ACPI_NAMESPACE_NODE **Node) -{ - ACPI_FUNCTION_TRACE (DsMethodDataGetNode); - - - /* - * Method Locals and Arguments are supported - */ - switch (Type) - { - case ACPI_REFCLASS_LOCAL: - - if (Index > ACPI_METHOD_MAX_LOCAL) - { - ACPI_ERROR ((AE_INFO, - "Local index %d is invalid (max %d)", - Index, ACPI_METHOD_MAX_LOCAL)); - return_ACPI_STATUS (AE_AML_INVALID_INDEX); - } - - /* Return a pointer to the pseudo-node */ - - *Node = &WalkState->LocalVariables[Index]; - break; - - case ACPI_REFCLASS_ARG: - - if (Index > ACPI_METHOD_MAX_ARG) - { - ACPI_ERROR ((AE_INFO, - "Arg index %d is invalid (max %d)", - Index, ACPI_METHOD_MAX_ARG)); - return_ACPI_STATUS (AE_AML_INVALID_INDEX); - } - - /* Return a pointer to the pseudo-node */ - - *Node = &WalkState->Arguments[Index]; - break; - - default: - ACPI_ERROR ((AE_INFO, "Type %d is invalid", Type)); - return_ACPI_STATUS (AE_TYPE); - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsMethodDataSetValue - * - * PARAMETERS: Type - Either ACPI_REFCLASS_LOCAL or - * ACPI_REFCLASS_ARG - * Index - Which Local or Arg to get - * Object - Object to be inserted into the stack entry - * WalkState - Current walk state object - * - * RETURN: Status - * - * DESCRIPTION: Insert an object onto the method stack at entry Opcode:Index. - * Note: There is no "implicit conversion" for locals. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDsMethodDataSetValue ( - UINT8 Type, - UINT32 Index, - ACPI_OPERAND_OBJECT *Object, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - - - ACPI_FUNCTION_TRACE (DsMethodDataSetValue); - - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "NewObj %p Type %2.2X, Refs=%d [%s]\n", Object, - Type, Object->Common.ReferenceCount, - AcpiUtGetTypeName (Object->Common.Type))); - - /* Get the namespace node for the arg/local */ - - Status = AcpiDsMethodDataGetNode (Type, Index, WalkState, &Node); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Increment ref count so object can't be deleted while installed. - * NOTE: We do not copy the object in order to preserve the call by - * reference semantics of ACPI Control Method invocation. - * (See ACPI Specification 2.0C) - */ - AcpiUtAddReference (Object); - - /* Install the object */ - - Node->Object = Object; - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsMethodDataGetValue - * - * PARAMETERS: Type - Either ACPI_REFCLASS_LOCAL or - * ACPI_REFCLASS_ARG - * Index - Which localVar or argument to get - * WalkState - Current walk state object - * DestDesc - Where Arg or Local value is returned - * - * RETURN: Status - * - * DESCRIPTION: Retrieve value of selected Arg or Local for this method - * Used only in AcpiExResolveToValue(). - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsMethodDataGetValue ( - UINT8 Type, - UINT32 Index, - ACPI_WALK_STATE *WalkState, - ACPI_OPERAND_OBJECT **DestDesc) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - ACPI_OPERAND_OBJECT *Object; - - - ACPI_FUNCTION_TRACE (DsMethodDataGetValue); - - - /* Validate the object descriptor */ - - if (!DestDesc) - { - ACPI_ERROR ((AE_INFO, "Null object descriptor pointer")); - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Get the namespace node for the arg/local */ - - Status = AcpiDsMethodDataGetNode (Type, Index, WalkState, &Node); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Get the object from the node */ - - Object = Node->Object; - - /* Examine the returned object, it must be valid. */ - - if (!Object) - { - /* - * Index points to uninitialized object. - * This means that either 1) The expected argument was - * not passed to the method, or 2) A local variable - * was referenced by the method (via the ASL) - * before it was initialized. Either case is an error. - */ - - /* If slack enabled, init the LocalX/ArgX to an Integer of value zero */ - - if (AcpiGbl_EnableInterpreterSlack) - { - Object = AcpiUtCreateIntegerObject ((UINT64) 0); - if (!Object) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - Node->Object = Object; - } - - /* Otherwise, return the error */ - - else switch (Type) - { - case ACPI_REFCLASS_ARG: - - ACPI_ERROR ((AE_INFO, - "Uninitialized Arg[%d] at node %p", - Index, Node)); - - return_ACPI_STATUS (AE_AML_UNINITIALIZED_ARG); - - case ACPI_REFCLASS_LOCAL: - - /* - * No error message for this case, will be trapped again later to - * detect and ignore cases of Store(LocalX,LocalX) - */ - return_ACPI_STATUS (AE_AML_UNINITIALIZED_LOCAL); - - default: - - ACPI_ERROR ((AE_INFO, "Not a Arg/Local opcode: %X", Type)); - return_ACPI_STATUS (AE_AML_INTERNAL); - } - } - - /* - * The Index points to an initialized and valid object. - * Return an additional reference to the object - */ - *DestDesc = Object; - AcpiUtAddReference (Object); - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsMethodDataDeleteValue - * - * PARAMETERS: Type - Either ACPI_REFCLASS_LOCAL or - * ACPI_REFCLASS_ARG - * Index - Which localVar or argument to delete - * WalkState - Current walk state object - * - * RETURN: None - * - * DESCRIPTION: Delete the entry at Opcode:Index. Inserts - * a null into the stack slot after the object is deleted. - * - ******************************************************************************/ - -static void -AcpiDsMethodDataDeleteValue ( - UINT8 Type, - UINT32 Index, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - ACPI_OPERAND_OBJECT *Object; - - - ACPI_FUNCTION_TRACE (DsMethodDataDeleteValue); - - - /* Get the namespace node for the arg/local */ - - Status = AcpiDsMethodDataGetNode (Type, Index, WalkState, &Node); - if (ACPI_FAILURE (Status)) - { - return_VOID; - } - - /* Get the associated object */ - - Object = AcpiNsGetAttachedObject (Node); - - /* - * Undefine the Arg or Local by setting its descriptor - * pointer to NULL. Locals/Args can contain both - * ACPI_OPERAND_OBJECTS and ACPI_NAMESPACE_NODEs - */ - Node->Object = NULL; - - if ((Object) && - (ACPI_GET_DESCRIPTOR_TYPE (Object) == ACPI_DESC_TYPE_OPERAND)) - { - /* - * There is a valid object. - * Decrement the reference count by one to balance the - * increment when the object was stored. - */ - AcpiUtRemoveReference (Object); - } - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsStoreObjectToLocal - * - * PARAMETERS: Type - Either ACPI_REFCLASS_LOCAL or - * ACPI_REFCLASS_ARG - * Index - Which Local or Arg to set - * ObjDesc - Value to be stored - * WalkState - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Store a value in an Arg or Local. The ObjDesc is installed - * as the new value for the Arg or Local and the reference count - * for ObjDesc is incremented. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsStoreObjectToLocal ( - UINT8 Type, - UINT32 Index, - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - ACPI_OPERAND_OBJECT *CurrentObjDesc; - ACPI_OPERAND_OBJECT *NewObjDesc; - - - ACPI_FUNCTION_TRACE (DsStoreObjectToLocal); - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Type=%2.2X Index=%d Obj=%p\n", - Type, Index, ObjDesc)); - - /* Parameter validation */ - - if (!ObjDesc) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Get the namespace node for the arg/local */ - - Status = AcpiDsMethodDataGetNode (Type, Index, WalkState, &Node); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - CurrentObjDesc = AcpiNsGetAttachedObject (Node); - if (CurrentObjDesc == ObjDesc) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p already installed!\n", - ObjDesc)); - return_ACPI_STATUS (Status); - } - - /* - * If the reference count on the object is more than one, we must - * take a copy of the object before we store. A reference count - * of exactly 1 means that the object was just created during the - * evaluation of an expression, and we can safely use it since it - * is not used anywhere else. - */ - NewObjDesc = ObjDesc; - if (ObjDesc->Common.ReferenceCount > 1) - { - Status = AcpiUtCopyIobjectToIobject (ObjDesc, &NewObjDesc, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* - * If there is an object already in this slot, we either - * have to delete it, or if this is an argument and there - * is an object reference stored there, we have to do - * an indirect store! - */ - if (CurrentObjDesc) - { - /* - * Check for an indirect store if an argument - * contains an object reference (stored as an Node). - * We don't allow this automatic dereferencing for - * locals, since a store to a local should overwrite - * anything there, including an object reference. - * - * If both Arg0 and Local0 contain RefOf (Local4): - * - * Store (1, Arg0) - Causes indirect store to local4 - * Store (1, Local0) - Stores 1 in local0, overwriting - * the reference to local4 - * Store (1, DeRefof (Local0)) - Causes indirect store to local4 - * - * Weird, but true. - */ - if (Type == ACPI_REFCLASS_ARG) - { - /* - * If we have a valid reference object that came from RefOf(), - * do the indirect store - */ - if ((ACPI_GET_DESCRIPTOR_TYPE (CurrentObjDesc) == ACPI_DESC_TYPE_OPERAND) && - (CurrentObjDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) && - (CurrentObjDesc->Reference.Class == ACPI_REFCLASS_REFOF)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Arg (%p) is an ObjRef(Node), storing in node %p\n", - NewObjDesc, CurrentObjDesc)); - - /* - * Store this object to the Node (perform the indirect store) - * NOTE: No implicit conversion is performed, as per the ACPI - * specification rules on storing to Locals/Args. - */ - Status = AcpiExStoreObjectToNode (NewObjDesc, - CurrentObjDesc->Reference.Object, WalkState, - ACPI_NO_IMPLICIT_CONVERSION); - - /* Remove local reference if we copied the object above */ - - if (NewObjDesc != ObjDesc) - { - AcpiUtRemoveReference (NewObjDesc); - } - return_ACPI_STATUS (Status); - } - } - - /* Delete the existing object before storing the new one */ - - AcpiDsMethodDataDeleteValue (Type, Index, WalkState); - } - - /* - * Install the Obj descriptor (*NewObjDesc) into - * the descriptor for the Arg or Local. - * (increments the object reference count by one) - */ - Status = AcpiDsMethodDataSetValue (Type, Index, NewObjDesc, WalkState); - - /* Remove local reference if we copied the object above */ - - if (NewObjDesc != ObjDesc) - { - AcpiUtRemoveReference (NewObjDesc); - } - - return_ACPI_STATUS (Status); -} - - -#ifdef ACPI_OBSOLETE_FUNCTIONS -/******************************************************************************* - * - * FUNCTION: AcpiDsMethodDataGetType - * - * PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP - * Index - Which Local or Arg whose type to get - * WalkState - Current walk state object - * - * RETURN: Data type of current value of the selected Arg or Local - * - * DESCRIPTION: Get the type of the object stored in the Local or Arg - * - ******************************************************************************/ - -ACPI_OBJECT_TYPE -AcpiDsMethodDataGetType ( - UINT16 Opcode, - UINT32 Index, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - ACPI_OPERAND_OBJECT *Object; - - - ACPI_FUNCTION_TRACE (DsMethodDataGetType); - - - /* Get the namespace node for the arg/local */ - - Status = AcpiDsMethodDataGetNode (Opcode, Index, WalkState, &Node); - if (ACPI_FAILURE (Status)) - { - return_VALUE ((ACPI_TYPE_NOT_FOUND)); - } - - /* Get the object */ - - Object = AcpiNsGetAttachedObject (Node); - if (!Object) - { - /* Uninitialized local/arg, return TYPE_ANY */ - - return_VALUE (ACPI_TYPE_ANY); - } - - /* Get the object type */ - - return_VALUE (Object->Type); -} -#endif - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsobject.c b/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsobject.c deleted file mode 100644 index cf444a1df..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsobject.c +++ /dev/null @@ -1,925 +0,0 @@ -/****************************************************************************** - * - * Module Name: dsobject - Dispatcher object management routines - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __DSOBJECT_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "amlcode.h" -#include "acdispat.h" -#include "acnamesp.h" -#include "acinterp.h" - -#define _COMPONENT ACPI_DISPATCHER - ACPI_MODULE_NAME ("dsobject") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiDsBuildInternalObject ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op, - ACPI_OPERAND_OBJECT **ObjDescPtr); - - -#ifndef ACPI_NO_METHOD_EXECUTION -/******************************************************************************* - * - * FUNCTION: AcpiDsBuildInternalObject - * - * PARAMETERS: WalkState - Current walk state - * Op - Parser object to be translated - * ObjDescPtr - Where the ACPI internal object is returned - * - * RETURN: Status - * - * DESCRIPTION: Translate a parser Op object to the equivalent namespace object - * Simple objects are any objects other than a package object! - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDsBuildInternalObject ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op, - ACPI_OPERAND_OBJECT **ObjDescPtr) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (DsBuildInternalObject); - - - *ObjDescPtr = NULL; - if (Op->Common.AmlOpcode == AML_INT_NAMEPATH_OP) - { - /* - * This is a named object reference. If this name was - * previously looked up in the namespace, it was stored in this op. - * Otherwise, go ahead and look it up now - */ - if (!Op->Common.Node) - { - Status = AcpiNsLookup (WalkState->ScopeInfo, - Op->Common.Value.String, - ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, - ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, NULL, - ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE, &(Op->Common.Node))); - if (ACPI_FAILURE (Status)) - { - /* Check if we are resolving a named reference within a package */ - - if ((Status == AE_NOT_FOUND) && (AcpiGbl_EnableInterpreterSlack) && - - ((Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) || - (Op->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP))) - { - /* - * We didn't find the target and we are populating elements - * of a package - ignore if slack enabled. Some ASL code - * contains dangling invalid references in packages and - * expects that no exception will be issued. Leave the - * element as a null element. It cannot be used, but it - * can be overwritten by subsequent ASL code - this is - * typically the case. - */ - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Ignoring unresolved reference in package [%4.4s]\n", - WalkState->ScopeInfo->Scope.Node->Name.Ascii)); - - return_ACPI_STATUS (AE_OK); - } - else - { - ACPI_ERROR_NAMESPACE (Op->Common.Value.String, Status); - } - - return_ACPI_STATUS (Status); - } - } - - /* Special object resolution for elements of a package */ - - if ((Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) || - (Op->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP)) - { - /* - * Attempt to resolve the node to a value before we insert it into - * the package. If this is a reference to a common data type, - * resolve it immediately. According to the ACPI spec, package - * elements can only be "data objects" or method references. - * Attempt to resolve to an Integer, Buffer, String or Package. - * If cannot, return the named reference (for things like Devices, - * Methods, etc.) Buffer Fields and Fields will resolve to simple - * objects (int/buf/str/pkg). - * - * NOTE: References to things like Devices, Methods, Mutexes, etc. - * will remain as named references. This behavior is not described - * in the ACPI spec, but it appears to be an oversight. - */ - ObjDesc = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Op->Common.Node); - - Status = AcpiExResolveNodeToValue ( - ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE, &ObjDesc), - WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - switch (Op->Common.Node->Type) - { - /* - * For these types, we need the actual node, not the subobject. - * However, the subobject did not get an extra reference count above. - * - * TBD: should ExResolveNodeToValue be changed to fix this? - */ - case ACPI_TYPE_DEVICE: - case ACPI_TYPE_THERMAL: - - AcpiUtAddReference (Op->Common.Node->Object); - - /*lint -fallthrough */ - /* - * For these types, we need the actual node, not the subobject. - * The subobject got an extra reference count in ExResolveNodeToValue. - */ - case ACPI_TYPE_MUTEX: - case ACPI_TYPE_METHOD: - case ACPI_TYPE_POWER: - case ACPI_TYPE_PROCESSOR: - case ACPI_TYPE_EVENT: - case ACPI_TYPE_REGION: - - /* We will create a reference object for these types below */ - break; - - default: - /* - * All other types - the node was resolved to an actual - * object, we are done. - */ - goto Exit; - } - } - } - - /* Create and init a new internal ACPI object */ - - ObjDesc = AcpiUtCreateInternalObject ( - (AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode))->ObjectType); - if (!ObjDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - Status = AcpiDsInitObjectFromOp (WalkState, Op, Op->Common.AmlOpcode, - &ObjDesc); - if (ACPI_FAILURE (Status)) - { - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); - } - -Exit: - *ObjDescPtr = ObjDesc; - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsBuildInternalBufferObj - * - * PARAMETERS: WalkState - Current walk state - * Op - Parser object to be translated - * BufferLength - Length of the buffer - * ObjDescPtr - Where the ACPI internal object is returned - * - * RETURN: Status - * - * DESCRIPTION: Translate a parser Op package object to the equivalent - * namespace object - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsBuildInternalBufferObj ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op, - UINT32 BufferLength, - ACPI_OPERAND_OBJECT **ObjDescPtr) -{ - ACPI_PARSE_OBJECT *Arg; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_PARSE_OBJECT *ByteList; - UINT32 ByteListLength = 0; - - - ACPI_FUNCTION_TRACE (DsBuildInternalBufferObj); - - - /* - * If we are evaluating a Named buffer object "Name (xxxx, Buffer)". - * The buffer object already exists (from the NS node), otherwise it must - * be created. - */ - ObjDesc = *ObjDescPtr; - if (!ObjDesc) - { - /* Create a new buffer object */ - - ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_BUFFER); - *ObjDescPtr = ObjDesc; - if (!ObjDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - } - - /* - * Second arg is the buffer data (optional) ByteList can be either - * individual bytes or a string initializer. In either case, a - * ByteList appears in the AML. - */ - Arg = Op->Common.Value.Arg; /* skip first arg */ - - ByteList = Arg->Named.Next; - if (ByteList) - { - if (ByteList->Common.AmlOpcode != AML_INT_BYTELIST_OP) - { - ACPI_ERROR ((AE_INFO, - "Expecting bytelist, got AML opcode %X in op %p", - ByteList->Common.AmlOpcode, ByteList)); - - AcpiUtRemoveReference (ObjDesc); - return (AE_TYPE); - } - - ByteListLength = (UINT32) ByteList->Common.Value.Integer; - } - - /* - * The buffer length (number of bytes) will be the larger of: - * 1) The specified buffer length and - * 2) The length of the initializer byte list - */ - ObjDesc->Buffer.Length = BufferLength; - if (ByteListLength > BufferLength) - { - ObjDesc->Buffer.Length = ByteListLength; - } - - /* Allocate the buffer */ - - if (ObjDesc->Buffer.Length == 0) - { - ObjDesc->Buffer.Pointer = NULL; - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Buffer defined with zero length in AML, creating\n")); - } - else - { - ObjDesc->Buffer.Pointer = ACPI_ALLOCATE_ZEROED ( - ObjDesc->Buffer.Length); - if (!ObjDesc->Buffer.Pointer) - { - AcpiUtDeleteObjectDesc (ObjDesc); - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Initialize buffer from the ByteList (if present) */ - - if (ByteList) - { - ACPI_MEMCPY (ObjDesc->Buffer.Pointer, ByteList->Named.Data, - ByteListLength); - } - } - - ObjDesc->Buffer.Flags |= AOPOBJ_DATA_VALID; - Op->Common.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjDesc); - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsBuildInternalPackageObj - * - * PARAMETERS: WalkState - Current walk state - * Op - Parser object to be translated - * ElementCount - Number of elements in the package - this is - * the NumElements argument to Package() - * ObjDescPtr - Where the ACPI internal object is returned - * - * RETURN: Status - * - * DESCRIPTION: Translate a parser Op package object to the equivalent - * namespace object - * - * NOTE: The number of elements in the package will be always be the NumElements - * count, regardless of the number of elements in the package list. If - * NumElements is smaller, only that many package list elements are used. - * if NumElements is larger, the Package object is padded out with - * objects of type Uninitialized (as per ACPI spec.) - * - * Even though the ASL compilers do not allow NumElements to be smaller - * than the Package list length (for the fixed length package opcode), some - * BIOS code modifies the AML on the fly to adjust the NumElements, and - * this code compensates for that. This also provides compatibility with - * other AML interpreters. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsBuildInternalPackageObj ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op, - UINT32 ElementCount, - ACPI_OPERAND_OBJECT **ObjDescPtr) -{ - ACPI_PARSE_OBJECT *Arg; - ACPI_PARSE_OBJECT *Parent; - ACPI_OPERAND_OBJECT *ObjDesc = NULL; - ACPI_STATUS Status = AE_OK; - UINT32 i; - UINT16 Index; - UINT16 ReferenceCount; - - - ACPI_FUNCTION_TRACE (DsBuildInternalPackageObj); - - - /* Find the parent of a possibly nested package */ - - Parent = Op->Common.Parent; - while ((Parent->Common.AmlOpcode == AML_PACKAGE_OP) || - (Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP)) - { - Parent = Parent->Common.Parent; - } - - /* - * If we are evaluating a Named package object "Name (xxxx, Package)", - * the package object already exists, otherwise it must be created. - */ - ObjDesc = *ObjDescPtr; - if (!ObjDesc) - { - ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_PACKAGE); - *ObjDescPtr = ObjDesc; - if (!ObjDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - ObjDesc->Package.Node = Parent->Common.Node; - } - - /* - * Allocate the element array (array of pointers to the individual - * objects) based on the NumElements parameter. Add an extra pointer slot - * so that the list is always null terminated. - */ - ObjDesc->Package.Elements = ACPI_ALLOCATE_ZEROED ( - ((ACPI_SIZE) ElementCount + 1) * sizeof (void *)); - - if (!ObjDesc->Package.Elements) - { - AcpiUtDeleteObjectDesc (ObjDesc); - return_ACPI_STATUS (AE_NO_MEMORY); - } - - ObjDesc->Package.Count = ElementCount; - - /* - * Initialize the elements of the package, up to the NumElements count. - * Package is automatically padded with uninitialized (NULL) elements - * if NumElements is greater than the package list length. Likewise, - * Package is truncated if NumElements is less than the list length. - */ - Arg = Op->Common.Value.Arg; - Arg = Arg->Common.Next; - for (i = 0; Arg && (i < ElementCount); i++) - { - if (Arg->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP) - { - if (Arg->Common.Node->Type == ACPI_TYPE_METHOD) - { - /* - * A method reference "looks" to the parser to be a method - * invocation, so we special case it here - */ - Arg->Common.AmlOpcode = AML_INT_NAMEPATH_OP; - Status = AcpiDsBuildInternalObject (WalkState, Arg, - &ObjDesc->Package.Elements[i]); - } - else - { - /* This package element is already built, just get it */ - - ObjDesc->Package.Elements[i] = - ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Arg->Common.Node); - } - } - else - { - Status = AcpiDsBuildInternalObject (WalkState, Arg, - &ObjDesc->Package.Elements[i]); - } - - if (*ObjDescPtr) - { - /* Existing package, get existing reference count */ - - ReferenceCount = (*ObjDescPtr)->Common.ReferenceCount; - if (ReferenceCount > 1) - { - /* Make new element ref count match original ref count */ - - for (Index = 0; Index < (ReferenceCount - 1); Index++) - { - AcpiUtAddReference ((ObjDesc->Package.Elements[i])); - } - } - } - - Arg = Arg->Common.Next; - } - - /* Check for match between NumElements and actual length of PackageList */ - - if (Arg) - { - /* - * NumElements was exhausted, but there are remaining elements in the - * PackageList. Truncate the package to NumElements. - * - * Note: technically, this is an error, from ACPI spec: "It is an error - * for NumElements to be less than the number of elements in the - * PackageList". However, we just print a message and - * no exception is returned. This provides Windows compatibility. Some - * BIOSs will alter the NumElements on the fly, creating this type - * of ill-formed package object. - */ - while (Arg) - { - /* - * We must delete any package elements that were created earlier - * and are not going to be used because of the package truncation. - */ - if (Arg->Common.Node) - { - AcpiUtRemoveReference ( - ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Arg->Common.Node)); - Arg->Common.Node = NULL; - } - - /* Find out how many elements there really are */ - - i++; - Arg = Arg->Common.Next; - } - - ACPI_INFO ((AE_INFO, - "Actual Package length (0x%X) is larger than NumElements field (0x%X), truncated\n", - i, ElementCount)); - } - else if (i < ElementCount) - { - /* - * Arg list (elements) was exhausted, but we did not reach NumElements count. - * Note: this is not an error, the package is padded out with NULLs. - */ - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Package List length (0x%X) smaller than NumElements count (0x%X), padded with null elements\n", - i, ElementCount)); - } - - ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID; - Op->Common.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjDesc); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsCreateNode - * - * PARAMETERS: WalkState - Current walk state - * Node - NS Node to be initialized - * Op - Parser object to be translated - * - * RETURN: Status - * - * DESCRIPTION: Create the object to be associated with a namespace node - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsCreateNode ( - ACPI_WALK_STATE *WalkState, - ACPI_NAMESPACE_NODE *Node, - ACPI_PARSE_OBJECT *Op) -{ - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *ObjDesc; - - - ACPI_FUNCTION_TRACE_PTR (DsCreateNode, Op); - - - /* - * Because of the execution pass through the non-control-method - * parts of the table, we can arrive here twice. Only init - * the named object node the first time through - */ - if (AcpiNsGetAttachedObject (Node)) - { - return_ACPI_STATUS (AE_OK); - } - - if (!Op->Common.Value.Arg) - { - /* No arguments, there is nothing to do */ - - return_ACPI_STATUS (AE_OK); - } - - /* Build an internal object for the argument(s) */ - - Status = AcpiDsBuildInternalObject (WalkState, Op->Common.Value.Arg, - &ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Re-type the object according to its argument */ - - Node->Type = ObjDesc->Common.Type; - - /* Attach obj to node */ - - Status = AcpiNsAttachObject (Node, ObjDesc, Node->Type); - - /* Remove local reference to the object */ - - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - -#endif /* ACPI_NO_METHOD_EXECUTION */ - - -/******************************************************************************* - * - * FUNCTION: AcpiDsInitObjectFromOp - * - * PARAMETERS: WalkState - Current walk state - * Op - Parser op used to init the internal object - * Opcode - AML opcode associated with the object - * RetObjDesc - Namespace object to be initialized - * - * RETURN: Status - * - * DESCRIPTION: Initialize a namespace object from a parser Op and its - * associated arguments. The namespace object is a more compact - * representation of the Op and its arguments. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsInitObjectFromOp ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op, - UINT16 Opcode, - ACPI_OPERAND_OBJECT **RetObjDesc) -{ - const ACPI_OPCODE_INFO *OpInfo; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (DsInitObjectFromOp); - - - ObjDesc = *RetObjDesc; - OpInfo = AcpiPsGetOpcodeInfo (Opcode); - if (OpInfo->Class == AML_CLASS_UNKNOWN) - { - /* Unknown opcode */ - - return_ACPI_STATUS (AE_TYPE); - } - - /* Perform per-object initialization */ - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_BUFFER: - - /* - * Defer evaluation of Buffer TermArg operand - */ - ObjDesc->Buffer.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, - WalkState->Operands[0]); - ObjDesc->Buffer.AmlStart = Op->Named.Data; - ObjDesc->Buffer.AmlLength = Op->Named.Length; - break; - - - case ACPI_TYPE_PACKAGE: - - /* - * Defer evaluation of Package TermArg operand - */ - ObjDesc->Package.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, - WalkState->Operands[0]); - ObjDesc->Package.AmlStart = Op->Named.Data; - ObjDesc->Package.AmlLength = Op->Named.Length; - break; - - - case ACPI_TYPE_INTEGER: - - switch (OpInfo->Type) - { - case AML_TYPE_CONSTANT: - /* - * Resolve AML Constants here - AND ONLY HERE! - * All constants are integers. - * We mark the integer with a flag that indicates that it started - * life as a constant -- so that stores to constants will perform - * as expected (noop). ZeroOp is used as a placeholder for optional - * target operands. - */ - ObjDesc->Common.Flags = AOPOBJ_AML_CONSTANT; - - switch (Opcode) - { - case AML_ZERO_OP: - - ObjDesc->Integer.Value = 0; - break; - - case AML_ONE_OP: - - ObjDesc->Integer.Value = 1; - break; - - case AML_ONES_OP: - - ObjDesc->Integer.Value = ACPI_INTEGER_MAX; - - /* Truncate value if we are executing from a 32-bit ACPI table */ - -#ifndef ACPI_NO_METHOD_EXECUTION - AcpiExTruncateFor32bitTable (ObjDesc); -#endif - break; - - case AML_REVISION_OP: - - ObjDesc->Integer.Value = ACPI_CA_VERSION; - break; - - default: - - ACPI_ERROR ((AE_INFO, - "Unknown constant opcode %X", Opcode)); - Status = AE_AML_OPERAND_TYPE; - break; - } - break; - - - case AML_TYPE_LITERAL: - - ObjDesc->Integer.Value = Op->Common.Value.Integer; -#ifndef ACPI_NO_METHOD_EXECUTION - AcpiExTruncateFor32bitTable (ObjDesc); -#endif - break; - - - default: - ACPI_ERROR ((AE_INFO, "Unknown Integer type %X", - OpInfo->Type)); - Status = AE_AML_OPERAND_TYPE; - break; - } - break; - - - case ACPI_TYPE_STRING: - - ObjDesc->String.Pointer = Op->Common.Value.String; - ObjDesc->String.Length = (UINT32) ACPI_STRLEN (Op->Common.Value.String); - - /* - * The string is contained in the ACPI table, don't ever try - * to delete it - */ - ObjDesc->Common.Flags |= AOPOBJ_STATIC_POINTER; - break; - - - case ACPI_TYPE_METHOD: - break; - - - case ACPI_TYPE_LOCAL_REFERENCE: - - switch (OpInfo->Type) - { - case AML_TYPE_LOCAL_VARIABLE: - - /* Local ID (0-7) is (AML opcode - base AML_LOCAL_OP) */ - - ObjDesc->Reference.Value = ((UINT32) Opcode) - AML_LOCAL_OP; - ObjDesc->Reference.Class = ACPI_REFCLASS_LOCAL; - -#ifndef ACPI_NO_METHOD_EXECUTION - Status = AcpiDsMethodDataGetNode (ACPI_REFCLASS_LOCAL, - ObjDesc->Reference.Value, WalkState, - ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE, - &ObjDesc->Reference.Object)); -#endif - break; - - - case AML_TYPE_METHOD_ARGUMENT: - - /* Arg ID (0-6) is (AML opcode - base AML_ARG_OP) */ - - ObjDesc->Reference.Value = ((UINT32) Opcode) - AML_ARG_OP; - ObjDesc->Reference.Class = ACPI_REFCLASS_ARG; - -#ifndef ACPI_NO_METHOD_EXECUTION - Status = AcpiDsMethodDataGetNode (ACPI_REFCLASS_ARG, - ObjDesc->Reference.Value, WalkState, - ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE, - &ObjDesc->Reference.Object)); -#endif - break; - - default: /* Object name or Debug object */ - - switch (Op->Common.AmlOpcode) - { - case AML_INT_NAMEPATH_OP: - - /* Node was saved in Op */ - - ObjDesc->Reference.Node = Op->Common.Node; - ObjDesc->Reference.Object = Op->Common.Node->Object; - ObjDesc->Reference.Class = ACPI_REFCLASS_NAME; - break; - - case AML_DEBUG_OP: - - ObjDesc->Reference.Class = ACPI_REFCLASS_DEBUG; - break; - - default: - - ACPI_ERROR ((AE_INFO, - "Unimplemented reference type for AML opcode: %4.4X", Opcode)); - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - break; - } - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Unimplemented data type: %X", - ObjDesc->Common.Type)); - - Status = AE_AML_OPERAND_TYPE; - break; - } - - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsopcode.c b/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsopcode.c deleted file mode 100644 index 3edbacc1d..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsopcode.c +++ /dev/null @@ -1,1619 +0,0 @@ -/****************************************************************************** - * - * Module Name: dsopcode - Dispatcher Op Region support and handling of - * "control" opcodes - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __DSOPCODE_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "amlcode.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "acevents.h" -#include "actables.h" - -#define _COMPONENT ACPI_DISPATCHER - ACPI_MODULE_NAME ("dsopcode") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiDsExecuteArguments ( - ACPI_NAMESPACE_NODE *Node, - ACPI_NAMESPACE_NODE *ScopeNode, - UINT32 AmlLength, - UINT8 *AmlStart); - -static ACPI_STATUS -AcpiDsInitBufferField ( - UINT16 AmlOpcode, - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_OPERAND_OBJECT *BufferDesc, - ACPI_OPERAND_OBJECT *OffsetDesc, - ACPI_OPERAND_OBJECT *LengthDesc, - ACPI_OPERAND_OBJECT *ResultDesc); - - -/******************************************************************************* - * - * FUNCTION: AcpiDsExecuteArguments - * - * PARAMETERS: Node - Object NS node - * ScopeNode - Parent NS node - * AmlLength - Length of executable AML - * AmlStart - Pointer to the AML - * - * RETURN: Status. - * - * DESCRIPTION: Late (deferred) execution of region or field arguments - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDsExecuteArguments ( - ACPI_NAMESPACE_NODE *Node, - ACPI_NAMESPACE_NODE *ScopeNode, - UINT32 AmlLength, - UINT8 *AmlStart) -{ - ACPI_STATUS Status; - ACPI_PARSE_OBJECT *Op; - ACPI_WALK_STATE *WalkState; - - - ACPI_FUNCTION_TRACE (DsExecuteArguments); - - - /* - * Allocate a new parser op to be the root of the parsed tree - */ - Op = AcpiPsAllocOp (AML_INT_EVAL_SUBTREE_OP); - if (!Op) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Save the Node for use in AcpiPsParseAml */ - - Op->Common.Node = ScopeNode; - - /* Create and initialize a new parser state */ - - WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL); - if (!WalkState) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, AmlStart, - AmlLength, NULL, ACPI_IMODE_LOAD_PASS1); - if (ACPI_FAILURE (Status)) - { - AcpiDsDeleteWalkState (WalkState); - goto Cleanup; - } - - /* Mark this parse as a deferred opcode */ - - WalkState->ParseFlags = ACPI_PARSE_DEFERRED_OP; - WalkState->DeferredNode = Node; - - /* Pass1: Parse the entire declaration */ - - Status = AcpiPsParseAml (WalkState); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - /* Get and init the Op created above */ - - Op->Common.Node = Node; - AcpiPsDeleteParseTree (Op); - - /* Evaluate the deferred arguments */ - - Op = AcpiPsAllocOp (AML_INT_EVAL_SUBTREE_OP); - if (!Op) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - Op->Common.Node = ScopeNode; - - /* Create and initialize a new parser state */ - - WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL); - if (!WalkState) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* Execute the opcode and arguments */ - - Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, AmlStart, - AmlLength, NULL, ACPI_IMODE_EXECUTE); - if (ACPI_FAILURE (Status)) - { - AcpiDsDeleteWalkState (WalkState); - goto Cleanup; - } - - /* Mark this execution as a deferred opcode */ - - WalkState->DeferredNode = Node; - Status = AcpiPsParseAml (WalkState); - -Cleanup: - AcpiPsDeleteParseTree (Op); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsGetBufferFieldArguments - * - * PARAMETERS: ObjDesc - A valid BufferField object - * - * RETURN: Status. - * - * DESCRIPTION: Get BufferField Buffer and Index. This implements the late - * evaluation of these field attributes. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsGetBufferFieldArguments ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_OPERAND_OBJECT *ExtraDesc; - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_PTR (DsGetBufferFieldArguments, ObjDesc); - - - if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) - { - return_ACPI_STATUS (AE_OK); - } - - /* Get the AML pointer (method object) and BufferField node */ - - ExtraDesc = AcpiNsGetSecondaryObject (ObjDesc); - Node = ObjDesc->BufferField.Node; - - ACPI_DEBUG_EXEC(AcpiUtDisplayInitPathname (ACPI_TYPE_BUFFER_FIELD, Node, NULL)); - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] BufferField Arg Init\n", - AcpiUtGetNodeName (Node))); - - /* Execute the AML code for the TermArg arguments */ - - Status = AcpiDsExecuteArguments (Node, AcpiNsGetParentNode (Node), - ExtraDesc->Extra.AmlLength, ExtraDesc->Extra.AmlStart); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsGetBankFieldArguments - * - * PARAMETERS: ObjDesc - A valid BankField object - * - * RETURN: Status. - * - * DESCRIPTION: Get BankField BankValue. This implements the late - * evaluation of these field attributes. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsGetBankFieldArguments ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_OPERAND_OBJECT *ExtraDesc; - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_PTR (DsGetBankFieldArguments, ObjDesc); - - - if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) - { - return_ACPI_STATUS (AE_OK); - } - - /* Get the AML pointer (method object) and BankField node */ - - ExtraDesc = AcpiNsGetSecondaryObject (ObjDesc); - Node = ObjDesc->BankField.Node; - - ACPI_DEBUG_EXEC(AcpiUtDisplayInitPathname (ACPI_TYPE_LOCAL_BANK_FIELD, Node, NULL)); - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] BankField Arg Init\n", - AcpiUtGetNodeName (Node))); - - /* Execute the AML code for the TermArg arguments */ - - Status = AcpiDsExecuteArguments (Node, AcpiNsGetParentNode (Node), - ExtraDesc->Extra.AmlLength, ExtraDesc->Extra.AmlStart); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsGetBufferArguments - * - * PARAMETERS: ObjDesc - A valid Buffer object - * - * RETURN: Status. - * - * DESCRIPTION: Get Buffer length and initializer byte list. This implements - * the late evaluation of these attributes. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsGetBufferArguments ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_PTR (DsGetBufferArguments, ObjDesc); - - - if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) - { - return_ACPI_STATUS (AE_OK); - } - - /* Get the Buffer node */ - - Node = ObjDesc->Buffer.Node; - if (!Node) - { - ACPI_ERROR ((AE_INFO, - "No pointer back to NS node in buffer obj %p", ObjDesc)); - return_ACPI_STATUS (AE_AML_INTERNAL); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Buffer Arg Init\n")); - - /* Execute the AML code for the TermArg arguments */ - - Status = AcpiDsExecuteArguments (Node, Node, - ObjDesc->Buffer.AmlLength, ObjDesc->Buffer.AmlStart); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsGetPackageArguments - * - * PARAMETERS: ObjDesc - A valid Package object - * - * RETURN: Status. - * - * DESCRIPTION: Get Package length and initializer byte list. This implements - * the late evaluation of these attributes. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsGetPackageArguments ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_PTR (DsGetPackageArguments, ObjDesc); - - - if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) - { - return_ACPI_STATUS (AE_OK); - } - - /* Get the Package node */ - - Node = ObjDesc->Package.Node; - if (!Node) - { - ACPI_ERROR ((AE_INFO, - "No pointer back to NS node in package %p", ObjDesc)); - return_ACPI_STATUS (AE_AML_INTERNAL); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Package Arg Init\n")); - - /* Execute the AML code for the TermArg arguments */ - - Status = AcpiDsExecuteArguments (Node, Node, - ObjDesc->Package.AmlLength, ObjDesc->Package.AmlStart); - return_ACPI_STATUS (Status); -} - - -/***************************************************************************** - * - * FUNCTION: AcpiDsGetRegionArguments - * - * PARAMETERS: ObjDesc - A valid region object - * - * RETURN: Status. - * - * DESCRIPTION: Get region address and length. This implements the late - * evaluation of these region attributes. - * - ****************************************************************************/ - -ACPI_STATUS -AcpiDsGetRegionArguments ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *ExtraDesc; - - - ACPI_FUNCTION_TRACE_PTR (DsGetRegionArguments, ObjDesc); - - - if (ObjDesc->Region.Flags & AOPOBJ_DATA_VALID) - { - return_ACPI_STATUS (AE_OK); - } - - ExtraDesc = AcpiNsGetSecondaryObject (ObjDesc); - if (!ExtraDesc) - { - return_ACPI_STATUS (AE_NOT_EXIST); - } - - /* Get the Region node */ - - Node = ObjDesc->Region.Node; - - ACPI_DEBUG_EXEC (AcpiUtDisplayInitPathname (ACPI_TYPE_REGION, Node, NULL)); - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] OpRegion Arg Init at AML %p\n", - AcpiUtGetNodeName (Node), ExtraDesc->Extra.AmlStart)); - - /* Execute the argument AML */ - - Status = AcpiDsExecuteArguments (Node, AcpiNsGetParentNode (Node), - ExtraDesc->Extra.AmlLength, ExtraDesc->Extra.AmlStart); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsInitializeRegion - * - * PARAMETERS: ObjHandle - Region namespace node - * - * RETURN: Status - * - * DESCRIPTION: Front end to EvInitializeRegion - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsInitializeRegion ( - ACPI_HANDLE ObjHandle) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status; - - - ObjDesc = AcpiNsGetAttachedObject (ObjHandle); - - /* Namespace is NOT locked */ - - Status = AcpiEvInitializeRegion (ObjDesc, FALSE); - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsInitBufferField - * - * PARAMETERS: AmlOpcode - CreateXxxField - * ObjDesc - BufferField object - * BufferDesc - Host Buffer - * OffsetDesc - Offset into buffer - * LengthDesc - Length of field (CREATE_FIELD_OP only) - * ResultDesc - Where to store the result - * - * RETURN: Status - * - * DESCRIPTION: Perform actual initialization of a buffer field - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDsInitBufferField ( - UINT16 AmlOpcode, - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_OPERAND_OBJECT *BufferDesc, - ACPI_OPERAND_OBJECT *OffsetDesc, - ACPI_OPERAND_OBJECT *LengthDesc, - ACPI_OPERAND_OBJECT *ResultDesc) -{ - UINT32 Offset; - UINT32 BitOffset; - UINT32 BitCount; - UINT8 FieldFlags; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_PTR (DsInitBufferField, ObjDesc); - - - /* Host object must be a Buffer */ - - if (BufferDesc->Common.Type != ACPI_TYPE_BUFFER) - { - ACPI_ERROR ((AE_INFO, - "Target of Create Field is not a Buffer object - %s", - AcpiUtGetObjectTypeName (BufferDesc))); - - Status = AE_AML_OPERAND_TYPE; - goto Cleanup; - } - - /* - * The last parameter to all of these opcodes (ResultDesc) started - * out as a NameString, and should therefore now be a NS node - * after resolution in AcpiExResolveOperands(). - */ - if (ACPI_GET_DESCRIPTOR_TYPE (ResultDesc) != ACPI_DESC_TYPE_NAMED) - { - ACPI_ERROR ((AE_INFO, - "(%s) destination not a NS Node [%s]", - AcpiPsGetOpcodeName (AmlOpcode), - AcpiUtGetDescriptorName (ResultDesc))); - - Status = AE_AML_OPERAND_TYPE; - goto Cleanup; - } - - Offset = (UINT32) OffsetDesc->Integer.Value; - - /* - * Setup the Bit offsets and counts, according to the opcode - */ - switch (AmlOpcode) - { - case AML_CREATE_FIELD_OP: - - /* Offset is in bits, count is in bits */ - - FieldFlags = AML_FIELD_ACCESS_BYTE; - BitOffset = Offset; - BitCount = (UINT32) LengthDesc->Integer.Value; - - /* Must have a valid (>0) bit count */ - - if (BitCount == 0) - { - ACPI_ERROR ((AE_INFO, - "Attempt to CreateField of length zero")); - Status = AE_AML_OPERAND_VALUE; - goto Cleanup; - } - break; - - case AML_CREATE_BIT_FIELD_OP: - - /* Offset is in bits, Field is one bit */ - - BitOffset = Offset; - BitCount = 1; - FieldFlags = AML_FIELD_ACCESS_BYTE; - break; - - case AML_CREATE_BYTE_FIELD_OP: - - /* Offset is in bytes, field is one byte */ - - BitOffset = 8 * Offset; - BitCount = 8; - FieldFlags = AML_FIELD_ACCESS_BYTE; - break; - - case AML_CREATE_WORD_FIELD_OP: - - /* Offset is in bytes, field is one word */ - - BitOffset = 8 * Offset; - BitCount = 16; - FieldFlags = AML_FIELD_ACCESS_WORD; - break; - - case AML_CREATE_DWORD_FIELD_OP: - - /* Offset is in bytes, field is one dword */ - - BitOffset = 8 * Offset; - BitCount = 32; - FieldFlags = AML_FIELD_ACCESS_DWORD; - break; - - case AML_CREATE_QWORD_FIELD_OP: - - /* Offset is in bytes, field is one qword */ - - BitOffset = 8 * Offset; - BitCount = 64; - FieldFlags = AML_FIELD_ACCESS_QWORD; - break; - - default: - - ACPI_ERROR ((AE_INFO, - "Unknown field creation opcode %02x", - AmlOpcode)); - Status = AE_AML_BAD_OPCODE; - goto Cleanup; - } - - /* Entire field must fit within the current length of the buffer */ - - if ((BitOffset + BitCount) > - (8 * (UINT32) BufferDesc->Buffer.Length)) - { - ACPI_ERROR ((AE_INFO, - "Field [%4.4s] at %d exceeds Buffer [%4.4s] size %d (bits)", - AcpiUtGetNodeName (ResultDesc), - BitOffset + BitCount, - AcpiUtGetNodeName (BufferDesc->Buffer.Node), - 8 * (UINT32) BufferDesc->Buffer.Length)); - Status = AE_AML_BUFFER_LIMIT; - goto Cleanup; - } - - /* - * Initialize areas of the field object that are common to all fields - * For FieldFlags, use LOCK_RULE = 0 (NO_LOCK), - * UPDATE_RULE = 0 (UPDATE_PRESERVE) - */ - Status = AcpiExPrepCommonFieldObject (ObjDesc, FieldFlags, 0, - BitOffset, BitCount); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - ObjDesc->BufferField.BufferObj = BufferDesc; - - /* Reference count for BufferDesc inherits ObjDesc count */ - - BufferDesc->Common.ReferenceCount = (UINT16) - (BufferDesc->Common.ReferenceCount + ObjDesc->Common.ReferenceCount); - - -Cleanup: - - /* Always delete the operands */ - - AcpiUtRemoveReference (OffsetDesc); - AcpiUtRemoveReference (BufferDesc); - - if (AmlOpcode == AML_CREATE_FIELD_OP) - { - AcpiUtRemoveReference (LengthDesc); - } - - /* On failure, delete the result descriptor */ - - if (ACPI_FAILURE (Status)) - { - AcpiUtRemoveReference (ResultDesc); /* Result descriptor */ - } - else - { - /* Now the address and length are valid for this BufferField */ - - ObjDesc->BufferField.Flags |= AOPOBJ_DATA_VALID; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsEvalBufferFieldOperands - * - * PARAMETERS: WalkState - Current walk - * Op - A valid BufferField Op object - * - * RETURN: Status - * - * DESCRIPTION: Get BufferField Buffer and Index - * Called from AcpiDsExecEndOp during BufferField parse tree walk - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsEvalBufferFieldOperands ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op) -{ - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_NAMESPACE_NODE *Node; - ACPI_PARSE_OBJECT *NextOp; - - - ACPI_FUNCTION_TRACE_PTR (DsEvalBufferFieldOperands, Op); - - - /* - * This is where we evaluate the address and length fields of the - * CreateXxxField declaration - */ - Node = Op->Common.Node; - - /* NextOp points to the op that holds the Buffer */ - - NextOp = Op->Common.Value.Arg; - - /* Evaluate/create the address and length operands */ - - Status = AcpiDsCreateOperands (WalkState, NextOp); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (!ObjDesc) - { - return_ACPI_STATUS (AE_NOT_EXIST); - } - - /* Resolve the operands */ - - Status = AcpiExResolveOperands (Op->Common.AmlOpcode, - ACPI_WALK_OPERANDS, WalkState); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR ((AE_INFO, "(%s) bad operand(s) (%X)", - AcpiPsGetOpcodeName (Op->Common.AmlOpcode), Status)); - - return_ACPI_STATUS (Status); - } - - /* Initialize the Buffer Field */ - - if (Op->Common.AmlOpcode == AML_CREATE_FIELD_OP) - { - /* NOTE: Slightly different operands for this opcode */ - - Status = AcpiDsInitBufferField (Op->Common.AmlOpcode, ObjDesc, - WalkState->Operands[0], WalkState->Operands[1], - WalkState->Operands[2], WalkState->Operands[3]); - } - else - { - /* All other, CreateXxxField opcodes */ - - Status = AcpiDsInitBufferField (Op->Common.AmlOpcode, ObjDesc, - WalkState->Operands[0], WalkState->Operands[1], - NULL, WalkState->Operands[2]); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsEvalRegionOperands - * - * PARAMETERS: WalkState - Current walk - * Op - A valid region Op object - * - * RETURN: Status - * - * DESCRIPTION: Get region address and length - * Called from AcpiDsExecEndOp during OpRegion parse tree walk - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsEvalRegionOperands ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op) -{ - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT *OperandDesc; - ACPI_NAMESPACE_NODE *Node; - ACPI_PARSE_OBJECT *NextOp; - - - ACPI_FUNCTION_TRACE_PTR (DsEvalRegionOperands, Op); - - - /* - * This is where we evaluate the address and length fields of the - * OpRegion declaration - */ - Node = Op->Common.Node; - - /* NextOp points to the op that holds the SpaceID */ - - NextOp = Op->Common.Value.Arg; - - /* NextOp points to address op */ - - NextOp = NextOp->Common.Next; - - /* Evaluate/create the address and length operands */ - - Status = AcpiDsCreateOperands (WalkState, NextOp); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Resolve the length and address operands to numbers */ - - Status = AcpiExResolveOperands (Op->Common.AmlOpcode, - ACPI_WALK_OPERANDS, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (!ObjDesc) - { - return_ACPI_STATUS (AE_NOT_EXIST); - } - - /* - * Get the length operand and save it - * (at Top of stack) - */ - OperandDesc = WalkState->Operands[WalkState->NumOperands - 1]; - - ObjDesc->Region.Length = (UINT32) OperandDesc->Integer.Value; - AcpiUtRemoveReference (OperandDesc); - - /* - * Get the address and save it - * (at top of stack - 1) - */ - OperandDesc = WalkState->Operands[WalkState->NumOperands - 2]; - - ObjDesc->Region.Address = (ACPI_PHYSICAL_ADDRESS) - OperandDesc->Integer.Value; - AcpiUtRemoveReference (OperandDesc); - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n", - ObjDesc, - ACPI_FORMAT_NATIVE_UINT (ObjDesc->Region.Address), - ObjDesc->Region.Length)); - - /* Now the address and length are valid for this opregion */ - - ObjDesc->Region.Flags |= AOPOBJ_DATA_VALID; - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsEvalTableRegionOperands - * - * PARAMETERS: WalkState - Current walk - * Op - A valid region Op object - * - * RETURN: Status - * - * DESCRIPTION: Get region address and length - * Called from AcpiDsExecEndOp during DataTableRegion parse tree walk - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsEvalTableRegionOperands ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op) -{ - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT **Operand; - ACPI_NAMESPACE_NODE *Node; - ACPI_PARSE_OBJECT *NextOp; - UINT32 TableIndex; - ACPI_TABLE_HEADER *Table; - - - ACPI_FUNCTION_TRACE_PTR (DsEvalTableRegionOperands, Op); - - - /* - * This is where we evaluate the SignatureString and OemIDString - * and OemTableIDString of the DataTableRegion declaration - */ - Node = Op->Common.Node; - - /* NextOp points to SignatureString op */ - - NextOp = Op->Common.Value.Arg; - - /* - * Evaluate/create the SignatureString and OemIDString - * and OemTableIDString operands - */ - Status = AcpiDsCreateOperands (WalkState, NextOp); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Resolve the SignatureString and OemIDString - * and OemTableIDString operands - */ - Status = AcpiExResolveOperands (Op->Common.AmlOpcode, - ACPI_WALK_OPERANDS, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Operand = &WalkState->Operands[0]; - - /* Find the ACPI table */ - - Status = AcpiTbFindTable (Operand[0]->String.Pointer, - Operand[1]->String.Pointer, Operand[2]->String.Pointer, - &TableIndex); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - AcpiUtRemoveReference (Operand[0]); - AcpiUtRemoveReference (Operand[1]); - AcpiUtRemoveReference (Operand[2]); - - Status = AcpiGetTableByIndex (TableIndex, &Table); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (!ObjDesc) - { - return_ACPI_STATUS (AE_NOT_EXIST); - } - - ObjDesc->Region.Address = (ACPI_PHYSICAL_ADDRESS) ACPI_TO_INTEGER (Table); - ObjDesc->Region.Length = Table->Length; - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n", - ObjDesc, - ACPI_FORMAT_NATIVE_UINT (ObjDesc->Region.Address), - ObjDesc->Region.Length)); - - /* Now the address and length are valid for this opregion */ - - ObjDesc->Region.Flags |= AOPOBJ_DATA_VALID; - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsEvalDataObjectOperands - * - * PARAMETERS: WalkState - Current walk - * Op - A valid DataObject Op object - * ObjDesc - DataObject - * - * RETURN: Status - * - * DESCRIPTION: Get the operands and complete the following data object types: - * Buffer, Package. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsEvalDataObjectOperands ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op, - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *ArgDesc; - UINT32 Length; - - - ACPI_FUNCTION_TRACE (DsEvalDataObjectOperands); - - - /* The first operand (for all of these data objects) is the length */ - - /* - * Set proper index into operand stack for AcpiDsObjStackPush - * invoked inside AcpiDsCreateOperand. - */ - WalkState->OperandIndex = WalkState->NumOperands; - - Status = AcpiDsCreateOperand (WalkState, Op->Common.Value.Arg, 1); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Status = AcpiExResolveOperands (WalkState->Opcode, - &(WalkState->Operands [WalkState->NumOperands -1]), - WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Extract length operand */ - - ArgDesc = WalkState->Operands [WalkState->NumOperands - 1]; - Length = (UINT32) ArgDesc->Integer.Value; - - /* Cleanup for length operand */ - - Status = AcpiDsObjStackPop (1, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - AcpiUtRemoveReference (ArgDesc); - - /* - * Create the actual data object - */ - switch (Op->Common.AmlOpcode) - { - case AML_BUFFER_OP: - - Status = AcpiDsBuildInternalBufferObj (WalkState, Op, Length, &ObjDesc); - break; - - case AML_PACKAGE_OP: - case AML_VAR_PACKAGE_OP: - - Status = AcpiDsBuildInternalPackageObj (WalkState, Op, Length, &ObjDesc); - break; - - default: - return_ACPI_STATUS (AE_AML_BAD_OPCODE); - } - - if (ACPI_SUCCESS (Status)) - { - /* - * Return the object in the WalkState, unless the parent is a package - - * in this case, the return object will be stored in the parse tree - * for the package. - */ - if ((!Op->Common.Parent) || - ((Op->Common.Parent->Common.AmlOpcode != AML_PACKAGE_OP) && - (Op->Common.Parent->Common.AmlOpcode != AML_VAR_PACKAGE_OP) && - (Op->Common.Parent->Common.AmlOpcode != AML_NAME_OP))) - { - WalkState->ResultObj = ObjDesc; - } - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsEvalBankFieldOperands - * - * PARAMETERS: WalkState - Current walk - * Op - A valid BankField Op object - * - * RETURN: Status - * - * DESCRIPTION: Get BankField BankValue - * Called from AcpiDsExecEndOp during BankField parse tree walk - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsEvalBankFieldOperands ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op) -{ - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT *OperandDesc; - ACPI_NAMESPACE_NODE *Node; - ACPI_PARSE_OBJECT *NextOp; - ACPI_PARSE_OBJECT *Arg; - - - ACPI_FUNCTION_TRACE_PTR (DsEvalBankFieldOperands, Op); - - - /* - * This is where we evaluate the BankValue field of the - * BankField declaration - */ - - /* NextOp points to the op that holds the Region */ - - NextOp = Op->Common.Value.Arg; - - /* NextOp points to the op that holds the Bank Register */ - - NextOp = NextOp->Common.Next; - - /* NextOp points to the op that holds the Bank Value */ - - NextOp = NextOp->Common.Next; - - /* - * Set proper index into operand stack for AcpiDsObjStackPush - * invoked inside AcpiDsCreateOperand. - * - * We use WalkState->Operands[0] to store the evaluated BankValue - */ - WalkState->OperandIndex = 0; - - Status = AcpiDsCreateOperand (WalkState, NextOp, 0); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Status = AcpiExResolveToValue (&WalkState->Operands[0], WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ACPI_DUMP_OPERANDS (ACPI_WALK_OPERANDS, - AcpiPsGetOpcodeName (Op->Common.AmlOpcode), 1); - /* - * Get the BankValue operand and save it - * (at Top of stack) - */ - OperandDesc = WalkState->Operands[0]; - - /* Arg points to the start Bank Field */ - - Arg = AcpiPsGetArg (Op, 4); - while (Arg) - { - /* Ignore OFFSET and ACCESSAS terms here */ - - if (Arg->Common.AmlOpcode == AML_INT_NAMEDFIELD_OP) - { - Node = Arg->Common.Node; - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (!ObjDesc) - { - return_ACPI_STATUS (AE_NOT_EXIST); - } - - ObjDesc->BankField.Value = (UINT32) OperandDesc->Integer.Value; - } - - /* Move to next field in the list */ - - Arg = Arg->Common.Next; - } - - AcpiUtRemoveReference (OperandDesc); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsExecBeginControlOp - * - * PARAMETERS: WalkList - The list that owns the walk stack - * Op - The control Op - * - * RETURN: Status - * - * DESCRIPTION: Handles all control ops encountered during control method - * execution. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsExecBeginControlOp ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op) -{ - ACPI_STATUS Status = AE_OK; - ACPI_GENERIC_STATE *ControlState; - - - ACPI_FUNCTION_NAME (DsExecBeginControlOp); - - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p Opcode=%2.2X State=%p\n", Op, - Op->Common.AmlOpcode, WalkState)); - - switch (Op->Common.AmlOpcode) - { - case AML_WHILE_OP: - - /* - * If this is an additional iteration of a while loop, continue. - * There is no need to allocate a new control state. - */ - if (WalkState->ControlState) - { - if (WalkState->ControlState->Control.AmlPredicateStart == - (WalkState->ParserState.Aml - 1)) - { - /* Reset the state to start-of-loop */ - - WalkState->ControlState->Common.State = ACPI_CONTROL_CONDITIONAL_EXECUTING; - break; - } - } - - /*lint -fallthrough */ - - case AML_IF_OP: - - /* - * IF/WHILE: Create a new control state to manage these - * constructs. We need to manage these as a stack, in order - * to handle nesting. - */ - ControlState = AcpiUtCreateControlState (); - if (!ControlState) - { - Status = AE_NO_MEMORY; - break; - } - /* - * Save a pointer to the predicate for multiple executions - * of a loop - */ - ControlState->Control.AmlPredicateStart = WalkState->ParserState.Aml - 1; - ControlState->Control.PackageEnd = WalkState->ParserState.PkgEnd; - ControlState->Control.Opcode = Op->Common.AmlOpcode; - - - /* Push the control state on this walk's control stack */ - - AcpiUtPushGenericState (&WalkState->ControlState, ControlState); - break; - - case AML_ELSE_OP: - - /* Predicate is in the state object */ - /* If predicate is true, the IF was executed, ignore ELSE part */ - - if (WalkState->LastPredicate) - { - Status = AE_CTRL_TRUE; - } - - break; - - case AML_RETURN_OP: - - break; - - default: - break; - } - - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsExecEndControlOp - * - * PARAMETERS: WalkList - The list that owns the walk stack - * Op - The control Op - * - * RETURN: Status - * - * DESCRIPTION: Handles all control ops encountered during control method - * execution. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsExecEndControlOp ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op) -{ - ACPI_STATUS Status = AE_OK; - ACPI_GENERIC_STATE *ControlState; - - - ACPI_FUNCTION_NAME (DsExecEndControlOp); - - - switch (Op->Common.AmlOpcode) - { - case AML_IF_OP: - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[IF_OP] Op=%p\n", Op)); - - /* - * Save the result of the predicate in case there is an - * ELSE to come - */ - WalkState->LastPredicate = - (BOOLEAN) WalkState->ControlState->Common.Value; - - /* - * Pop the control state that was created at the start - * of the IF and free it - */ - ControlState = AcpiUtPopGenericState (&WalkState->ControlState); - AcpiUtDeleteGenericState (ControlState); - break; - - - case AML_ELSE_OP: - - break; - - - case AML_WHILE_OP: - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[WHILE_OP] Op=%p\n", Op)); - - ControlState = WalkState->ControlState; - if (ControlState->Common.Value) - { - /* Predicate was true, the body of the loop was just executed */ - - /* - * This loop counter mechanism allows the interpreter to escape - * possibly infinite loops. This can occur in poorly written AML - * when the hardware does not respond within a while loop and the - * loop does not implement a timeout. - */ - ControlState->Control.LoopCount++; - if (ControlState->Control.LoopCount > ACPI_MAX_LOOP_ITERATIONS) - { - Status = AE_AML_INFINITE_LOOP; - break; - } - - /* - * Go back and evaluate the predicate and maybe execute the loop - * another time - */ - Status = AE_CTRL_PENDING; - WalkState->AmlLastWhile = ControlState->Control.AmlPredicateStart; - break; - } - - /* Predicate was false, terminate this while loop */ - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "[WHILE_OP] termination! Op=%p\n",Op)); - - /* Pop this control state and free it */ - - ControlState = AcpiUtPopGenericState (&WalkState->ControlState); - AcpiUtDeleteGenericState (ControlState); - break; - - - case AML_RETURN_OP: - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "[RETURN_OP] Op=%p Arg=%p\n",Op, Op->Common.Value.Arg)); - - /* - * One optional operand -- the return value - * It can be either an immediate operand or a result that - * has been bubbled up the tree - */ - if (Op->Common.Value.Arg) - { - /* Since we have a real Return(), delete any implicit return */ - - AcpiDsClearImplicitReturn (WalkState); - - /* Return statement has an immediate operand */ - - Status = AcpiDsCreateOperands (WalkState, Op->Common.Value.Arg); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* - * If value being returned is a Reference (such as - * an arg or local), resolve it now because it may - * cease to exist at the end of the method. - */ - Status = AcpiExResolveToValue (&WalkState->Operands [0], WalkState); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* - * Get the return value and save as the last result - * value. This is the only place where WalkState->ReturnDesc - * is set to anything other than zero! - */ - WalkState->ReturnDesc = WalkState->Operands[0]; - } - else if (WalkState->ResultCount) - { - /* Since we have a real Return(), delete any implicit return */ - - AcpiDsClearImplicitReturn (WalkState); - - /* - * The return value has come from a previous calculation. - * - * If value being returned is a Reference (such as - * an arg or local), resolve it now because it may - * cease to exist at the end of the method. - * - * Allow references created by the Index operator to return unchanged. - */ - if ((ACPI_GET_DESCRIPTOR_TYPE (WalkState->Results->Results.ObjDesc[0]) == ACPI_DESC_TYPE_OPERAND) && - ((WalkState->Results->Results.ObjDesc [0])->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) && - ((WalkState->Results->Results.ObjDesc [0])->Reference.Class != ACPI_REFCLASS_INDEX)) - { - Status = AcpiExResolveToValue (&WalkState->Results->Results.ObjDesc [0], WalkState); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - - WalkState->ReturnDesc = WalkState->Results->Results.ObjDesc [0]; - } - else - { - /* No return operand */ - - if (WalkState->NumOperands) - { - AcpiUtRemoveReference (WalkState->Operands [0]); - } - - WalkState->Operands [0] = NULL; - WalkState->NumOperands = 0; - WalkState->ReturnDesc = NULL; - } - - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Completed RETURN_OP State=%p, RetVal=%p\n", - WalkState, WalkState->ReturnDesc)); - - /* End the control method execution right now */ - - Status = AE_CTRL_TERMINATE; - break; - - - case AML_NOOP_OP: - - /* Just do nothing! */ - break; - - - case AML_BREAK_POINT_OP: - - /* - * Set the single-step flag. This will cause the debugger (if present) - * to break to the console within the AML debugger at the start of the - * next AML instruction. - */ - ACPI_DEBUGGER_EXEC ( - AcpiGbl_CmSingleStep = TRUE); - ACPI_DEBUGGER_EXEC ( - AcpiOsPrintf ("**break** Executed AML BreakPoint opcode\n")); - - /* Call to the OSL in case OS wants a piece of the action */ - - Status = AcpiOsSignal (ACPI_SIGNAL_BREAKPOINT, - "Executed AML Breakpoint opcode"); - break; - - - case AML_BREAK_OP: - case AML_CONTINUE_OP: /* ACPI 2.0 */ - - - /* Pop and delete control states until we find a while */ - - while (WalkState->ControlState && - (WalkState->ControlState->Control.Opcode != AML_WHILE_OP)) - { - ControlState = AcpiUtPopGenericState (&WalkState->ControlState); - AcpiUtDeleteGenericState (ControlState); - } - - /* No while found? */ - - if (!WalkState->ControlState) - { - return (AE_AML_NO_WHILE); - } - - /* Was: WalkState->AmlLastWhile = WalkState->ControlState->Control.AmlPredicateStart; */ - - WalkState->AmlLastWhile = WalkState->ControlState->Control.PackageEnd; - - /* Return status depending on opcode */ - - if (Op->Common.AmlOpcode == AML_BREAK_OP) - { - Status = AE_CTRL_BREAK; - } - else - { - Status = AE_CTRL_CONTINUE; - } - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Unknown control opcode=%X Op=%p", - Op->Common.AmlOpcode, Op)); - - Status = AE_AML_BAD_OPCODE; - break; - } - - return (Status); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsutils.c b/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsutils.c deleted file mode 100644 index 6c211ace8..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dsutils.c +++ /dev/null @@ -1,1009 +0,0 @@ -/******************************************************************************* - * - * Module Name: dsutils - Dispatcher utilities - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __DSUTILS_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "amlcode.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "acdebug.h" - -#define _COMPONENT ACPI_DISPATCHER - ACPI_MODULE_NAME ("dsutils") - - -/******************************************************************************* - * - * FUNCTION: AcpiDsClearImplicitReturn - * - * PARAMETERS: WalkState - Current State - * - * RETURN: None. - * - * DESCRIPTION: Clear and remove a reference on an implicit return value. Used - * to delete "stale" return values (if enabled, the return value - * from every operator is saved at least momentarily, in case the - * parent method exits.) - * - ******************************************************************************/ - -void -AcpiDsClearImplicitReturn ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_FUNCTION_NAME (DsClearImplicitReturn); - - - /* - * Slack must be enabled for this feature - */ - if (!AcpiGbl_EnableInterpreterSlack) - { - return; - } - - if (WalkState->ImplicitReturnObj) - { - /* - * Delete any "stale" implicit return. However, in - * complex statements, the implicit return value can be - * bubbled up several levels. - */ - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Removing reference on stale implicit return obj %p\n", - WalkState->ImplicitReturnObj)); - - AcpiUtRemoveReference (WalkState->ImplicitReturnObj); - WalkState->ImplicitReturnObj = NULL; - } -} - - -#ifndef ACPI_NO_METHOD_EXECUTION -/******************************************************************************* - * - * FUNCTION: AcpiDsDoImplicitReturn - * - * PARAMETERS: ReturnDesc - The return value - * WalkState - Current State - * AddReference - True if a reference should be added to the - * return object - * - * RETURN: TRUE if implicit return enabled, FALSE otherwise - * - * DESCRIPTION: Implements the optional "implicit return". We save the result - * of every ASL operator and control method invocation in case the - * parent method exit. Before storing a new return value, we - * delete the previous return value. - * - ******************************************************************************/ - -BOOLEAN -AcpiDsDoImplicitReturn ( - ACPI_OPERAND_OBJECT *ReturnDesc, - ACPI_WALK_STATE *WalkState, - BOOLEAN AddReference) -{ - ACPI_FUNCTION_NAME (DsDoImplicitReturn); - - - /* - * Slack must be enabled for this feature, and we must - * have a valid return object - */ - if ((!AcpiGbl_EnableInterpreterSlack) || - (!ReturnDesc)) - { - return (FALSE); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Result %p will be implicitly returned; Prev=%p\n", - ReturnDesc, - WalkState->ImplicitReturnObj)); - - /* - * Delete any "stale" implicit return value first. However, in - * complex statements, the implicit return value can be - * bubbled up several levels, so we don't clear the value if it - * is the same as the ReturnDesc. - */ - if (WalkState->ImplicitReturnObj) - { - if (WalkState->ImplicitReturnObj == ReturnDesc) - { - return (TRUE); - } - AcpiDsClearImplicitReturn (WalkState); - } - - /* Save the implicit return value, add a reference if requested */ - - WalkState->ImplicitReturnObj = ReturnDesc; - if (AddReference) - { - AcpiUtAddReference (ReturnDesc); - } - - return (TRUE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsIsResultUsed - * - * PARAMETERS: Op - Current Op - * WalkState - Current State - * - * RETURN: TRUE if result is used, FALSE otherwise - * - * DESCRIPTION: Check if a result object will be used by the parent - * - ******************************************************************************/ - -BOOLEAN -AcpiDsIsResultUsed ( - ACPI_PARSE_OBJECT *Op, - ACPI_WALK_STATE *WalkState) -{ - const ACPI_OPCODE_INFO *ParentInfo; - - ACPI_FUNCTION_TRACE_PTR (DsIsResultUsed, Op); - - - /* Must have both an Op and a Result Object */ - - if (!Op) - { - ACPI_ERROR ((AE_INFO, "Null Op")); - return_UINT8 (TRUE); - } - - /* - * We know that this operator is not a - * Return() operator (would not come here.) The following code is the - * optional support for a so-called "implicit return". Some AML code - * assumes that the last value of the method is "implicitly" returned - * to the caller. Just save the last result as the return value. - * NOTE: this is optional because the ASL language does not actually - * support this behavior. - */ - (void) AcpiDsDoImplicitReturn (WalkState->ResultObj, WalkState, TRUE); - - /* - * Now determine if the parent will use the result - * - * If there is no parent, or the parent is a ScopeOp, we are executing - * at the method level. An executing method typically has no parent, - * since each method is parsed separately. A method invoked externally - * via ExecuteControlMethod has a ScopeOp as the parent. - */ - if ((!Op->Common.Parent) || - (Op->Common.Parent->Common.AmlOpcode == AML_SCOPE_OP)) - { - /* No parent, the return value cannot possibly be used */ - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "At Method level, result of [%s] not used\n", - AcpiPsGetOpcodeName (Op->Common.AmlOpcode))); - return_UINT8 (FALSE); - } - - /* Get info on the parent. The RootOp is AML_SCOPE */ - - ParentInfo = AcpiPsGetOpcodeInfo (Op->Common.Parent->Common.AmlOpcode); - if (ParentInfo->Class == AML_CLASS_UNKNOWN) - { - ACPI_ERROR ((AE_INFO, - "Unknown parent opcode Op=%p", Op)); - return_UINT8 (FALSE); - } - - /* - * Decide what to do with the result based on the parent. If - * the parent opcode will not use the result, delete the object. - * Otherwise leave it as is, it will be deleted when it is used - * as an operand later. - */ - switch (ParentInfo->Class) - { - case AML_CLASS_CONTROL: - - switch (Op->Common.Parent->Common.AmlOpcode) - { - case AML_RETURN_OP: - - /* Never delete the return value associated with a return opcode */ - - goto ResultUsed; - - case AML_IF_OP: - case AML_WHILE_OP: - - /* - * If we are executing the predicate AND this is the predicate op, - * we will use the return value - */ - if ((WalkState->ControlState->Common.State == ACPI_CONTROL_PREDICATE_EXECUTING) && - (WalkState->ControlState->Control.PredicateOp == Op)) - { - goto ResultUsed; - } - break; - - default: - /* Ignore other control opcodes */ - break; - } - - /* The general control opcode returns no result */ - - goto ResultNotUsed; - - - case AML_CLASS_CREATE: - - /* - * These opcodes allow TermArg(s) as operands and therefore - * the operands can be method calls. The result is used. - */ - goto ResultUsed; - - - case AML_CLASS_NAMED_OBJECT: - - if ((Op->Common.Parent->Common.AmlOpcode == AML_REGION_OP) || - (Op->Common.Parent->Common.AmlOpcode == AML_DATA_REGION_OP) || - (Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) || - (Op->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP) || - (Op->Common.Parent->Common.AmlOpcode == AML_BUFFER_OP) || - (Op->Common.Parent->Common.AmlOpcode == AML_INT_EVAL_SUBTREE_OP) || - (Op->Common.Parent->Common.AmlOpcode == AML_BANK_FIELD_OP)) - { - /* - * These opcodes allow TermArg(s) as operands and therefore - * the operands can be method calls. The result is used. - */ - goto ResultUsed; - } - - goto ResultNotUsed; - - - default: - - /* - * In all other cases. the parent will actually use the return - * object, so keep it. - */ - goto ResultUsed; - } - - -ResultUsed: - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Result of [%s] used by Parent [%s] Op=%p\n", - AcpiPsGetOpcodeName (Op->Common.AmlOpcode), - AcpiPsGetOpcodeName (Op->Common.Parent->Common.AmlOpcode), Op)); - - return_UINT8 (TRUE); - - -ResultNotUsed: - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Result of [%s] not used by Parent [%s] Op=%p\n", - AcpiPsGetOpcodeName (Op->Common.AmlOpcode), - AcpiPsGetOpcodeName (Op->Common.Parent->Common.AmlOpcode), Op)); - - return_UINT8 (FALSE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsDeleteResultIfNotUsed - * - * PARAMETERS: Op - Current parse Op - * ResultObj - Result of the operation - * WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Used after interpretation of an opcode. If there is an internal - * result descriptor, check if the parent opcode will actually use - * this result. If not, delete the result now so that it will - * not become orphaned. - * - ******************************************************************************/ - -void -AcpiDsDeleteResultIfNotUsed ( - ACPI_PARSE_OBJECT *Op, - ACPI_OPERAND_OBJECT *ResultObj, - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_PTR (DsDeleteResultIfNotUsed, ResultObj); - - - if (!Op) - { - ACPI_ERROR ((AE_INFO, "Null Op")); - return_VOID; - } - - if (!ResultObj) - { - return_VOID; - } - - if (!AcpiDsIsResultUsed (Op, WalkState)) - { - /* Must pop the result stack (ObjDesc should be equal to ResultObj) */ - - Status = AcpiDsResultPop (&ObjDesc, WalkState); - if (ACPI_SUCCESS (Status)) - { - AcpiUtRemoveReference (ResultObj); - } - } - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsResolveOperands - * - * PARAMETERS: WalkState - Current walk state with operands on stack - * - * RETURN: Status - * - * DESCRIPTION: Resolve all operands to their values. Used to prepare - * arguments to a control method invocation (a call from one - * method to another.) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsResolveOperands ( - ACPI_WALK_STATE *WalkState) -{ - UINT32 i; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE_PTR (DsResolveOperands, WalkState); - - - /* - * Attempt to resolve each of the valid operands - * Method arguments are passed by reference, not by value. This means - * that the actual objects are passed, not copies of the objects. - */ - for (i = 0; i < WalkState->NumOperands; i++) - { - Status = AcpiExResolveToValue (&WalkState->Operands[i], WalkState); - if (ACPI_FAILURE (Status)) - { - break; - } - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsClearOperands - * - * PARAMETERS: WalkState - Current walk state with operands on stack - * - * RETURN: None - * - * DESCRIPTION: Clear all operands on the current walk state operand stack. - * - ******************************************************************************/ - -void -AcpiDsClearOperands ( - ACPI_WALK_STATE *WalkState) -{ - UINT32 i; - - - ACPI_FUNCTION_TRACE_PTR (DsClearOperands, WalkState); - - - /* Remove a reference on each operand on the stack */ - - for (i = 0; i < WalkState->NumOperands; i++) - { - /* - * Remove a reference to all operands, including both - * "Arguments" and "Targets". - */ - AcpiUtRemoveReference (WalkState->Operands[i]); - WalkState->Operands[i] = NULL; - } - - WalkState->NumOperands = 0; - return_VOID; -} -#endif - - -/******************************************************************************* - * - * FUNCTION: AcpiDsCreateOperand - * - * PARAMETERS: WalkState - Current walk state - * Arg - Parse object for the argument - * ArgIndex - Which argument (zero based) - * - * RETURN: Status - * - * DESCRIPTION: Translate a parse tree object that is an argument to an AML - * opcode to the equivalent interpreter object. This may include - * looking up a name or entering a new name into the internal - * namespace. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsCreateOperand ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Arg, - UINT32 ArgIndex) -{ - ACPI_STATUS Status = AE_OK; - char *NameString; - UINT32 NameLength; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_PARSE_OBJECT *ParentOp; - UINT16 Opcode; - ACPI_INTERPRETER_MODE InterpreterMode; - const ACPI_OPCODE_INFO *OpInfo; - - - ACPI_FUNCTION_TRACE_PTR (DsCreateOperand, Arg); - - - /* A valid name must be looked up in the namespace */ - - if ((Arg->Common.AmlOpcode == AML_INT_NAMEPATH_OP) && - (Arg->Common.Value.String) && - !(Arg->Common.Flags & ACPI_PARSEOP_IN_STACK)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Getting a name: Arg=%p\n", Arg)); - - /* Get the entire name string from the AML stream */ - - Status = AcpiExGetNameString (ACPI_TYPE_ANY, Arg->Common.Value.Buffer, - &NameString, &NameLength); - - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* All prefixes have been handled, and the name is in NameString */ - - /* - * Special handling for BufferField declarations. This is a deferred - * opcode that unfortunately defines the field name as the last - * parameter instead of the first. We get here when we are performing - * the deferred execution, so the actual name of the field is already - * in the namespace. We don't want to attempt to look it up again - * because we may be executing in a different scope than where the - * actual opcode exists. - */ - if ((WalkState->DeferredNode) && - (WalkState->DeferredNode->Type == ACPI_TYPE_BUFFER_FIELD) && - (ArgIndex == (UINT32) ((WalkState->Opcode == AML_CREATE_FIELD_OP) ? 3 : 2))) - { - ObjDesc = ACPI_CAST_PTR ( - ACPI_OPERAND_OBJECT, WalkState->DeferredNode); - Status = AE_OK; - } - else /* All other opcodes */ - { - /* - * Differentiate between a namespace "create" operation - * versus a "lookup" operation (IMODE_LOAD_PASS2 vs. - * IMODE_EXECUTE) in order to support the creation of - * namespace objects during the execution of control methods. - */ - ParentOp = Arg->Common.Parent; - OpInfo = AcpiPsGetOpcodeInfo (ParentOp->Common.AmlOpcode); - if ((OpInfo->Flags & AML_NSNODE) && - (ParentOp->Common.AmlOpcode != AML_INT_METHODCALL_OP) && - (ParentOp->Common.AmlOpcode != AML_REGION_OP) && - (ParentOp->Common.AmlOpcode != AML_INT_NAMEPATH_OP)) - { - /* Enter name into namespace if not found */ - - InterpreterMode = ACPI_IMODE_LOAD_PASS2; - } - else - { - /* Return a failure if name not found */ - - InterpreterMode = ACPI_IMODE_EXECUTE; - } - - Status = AcpiNsLookup (WalkState->ScopeInfo, NameString, - ACPI_TYPE_ANY, InterpreterMode, - ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, - WalkState, - ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE, &ObjDesc)); - /* - * The only case where we pass through (ignore) a NOT_FOUND - * error is for the CondRefOf opcode. - */ - if (Status == AE_NOT_FOUND) - { - if (ParentOp->Common.AmlOpcode == AML_COND_REF_OF_OP) - { - /* - * For the Conditional Reference op, it's OK if - * the name is not found; We just need a way to - * indicate this to the interpreter, set the - * object to the root - */ - ObjDesc = ACPI_CAST_PTR ( - ACPI_OPERAND_OBJECT, AcpiGbl_RootNode); - Status = AE_OK; - } - else - { - /* - * We just plain didn't find it -- which is a - * very serious error at this point - */ - Status = AE_AML_NAME_NOT_FOUND; - } - } - - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR_NAMESPACE (NameString, Status); - } - } - - /* Free the namestring created above */ - - ACPI_FREE (NameString); - - /* Check status from the lookup */ - - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Put the resulting object onto the current object stack */ - - Status = AcpiDsObjStackPush (ObjDesc, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - ACPI_DEBUGGER_EXEC (AcpiDbDisplayArgumentObject (ObjDesc, WalkState)); - } - else - { - /* Check for null name case */ - - if ((Arg->Common.AmlOpcode == AML_INT_NAMEPATH_OP) && - !(Arg->Common.Flags & ACPI_PARSEOP_IN_STACK)) - { - /* - * If the name is null, this means that this is an - * optional result parameter that was not specified - * in the original ASL. Create a Zero Constant for a - * placeholder. (Store to a constant is a Noop.) - */ - Opcode = AML_ZERO_OP; /* Has no arguments! */ - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Null namepath: Arg=%p\n", Arg)); - } - else - { - Opcode = Arg->Common.AmlOpcode; - } - - /* Get the object type of the argument */ - - OpInfo = AcpiPsGetOpcodeInfo (Opcode); - if (OpInfo->ObjectType == ACPI_TYPE_INVALID) - { - return_ACPI_STATUS (AE_NOT_IMPLEMENTED); - } - - if ((OpInfo->Flags & AML_HAS_RETVAL) || (Arg->Common.Flags & ACPI_PARSEOP_IN_STACK)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Argument previously created, already stacked\n")); - - ACPI_DEBUGGER_EXEC (AcpiDbDisplayArgumentObject ( - WalkState->Operands [WalkState->NumOperands - 1], WalkState)); - - /* - * Use value that was already previously returned - * by the evaluation of this argument - */ - Status = AcpiDsResultPop (&ObjDesc, WalkState); - if (ACPI_FAILURE (Status)) - { - /* - * Only error is underflow, and this indicates - * a missing or null operand! - */ - ACPI_EXCEPTION ((AE_INFO, Status, - "Missing or null operand")); - return_ACPI_STATUS (Status); - } - } - else - { - /* Create an ACPI_INTERNAL_OBJECT for the argument */ - - ObjDesc = AcpiUtCreateInternalObject (OpInfo->ObjectType); - if (!ObjDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Initialize the new object */ - - Status = AcpiDsInitObjectFromOp ( - WalkState, Arg, Opcode, &ObjDesc); - if (ACPI_FAILURE (Status)) - { - AcpiUtDeleteObjectDesc (ObjDesc); - return_ACPI_STATUS (Status); - } - } - - /* Put the operand object on the object stack */ - - Status = AcpiDsObjStackPush (ObjDesc, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ACPI_DEBUGGER_EXEC (AcpiDbDisplayArgumentObject (ObjDesc, WalkState)); - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsCreateOperands - * - * PARAMETERS: WalkState - Current state - * FirstArg - First argument of a parser argument tree - * - * RETURN: Status - * - * DESCRIPTION: Convert an operator's arguments from a parse tree format to - * namespace objects and place those argument object on the object - * stack in preparation for evaluation by the interpreter. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsCreateOperands ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *FirstArg) -{ - ACPI_STATUS Status = AE_OK; - ACPI_PARSE_OBJECT *Arg; - ACPI_PARSE_OBJECT *Arguments[ACPI_OBJ_NUM_OPERANDS]; - UINT32 ArgCount = 0; - UINT32 Index = WalkState->NumOperands; - UINT32 i; - - - ACPI_FUNCTION_TRACE_PTR (DsCreateOperands, FirstArg); - - - /* Get all arguments in the list */ - - Arg = FirstArg; - while (Arg) - { - if (Index >= ACPI_OBJ_NUM_OPERANDS) - { - return_ACPI_STATUS (AE_BAD_DATA); - } - - Arguments[Index] = Arg; - WalkState->Operands [Index] = NULL; - - /* Move on to next argument, if any */ - - Arg = Arg->Common.Next; - ArgCount++; - Index++; - } - - Index--; - - /* It is the appropriate order to get objects from the Result stack */ - - for (i = 0; i < ArgCount; i++) - { - Arg = Arguments[Index]; - - /* Force the filling of the operand stack in inverse order */ - - WalkState->OperandIndex = (UINT8) Index; - - Status = AcpiDsCreateOperand (WalkState, Arg, Index); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - Index--; - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Arg #%d (%p) done, Arg1=%p\n", - Index, Arg, FirstArg)); - } - - return_ACPI_STATUS (Status); - - -Cleanup: - /* - * We must undo everything done above; meaning that we must - * pop everything off of the operand stack and delete those - * objects - */ - AcpiDsObjStackPopAndDelete (ArgCount, WalkState); - - ACPI_EXCEPTION ((AE_INFO, Status, "While creating Arg %d", Index)); - return_ACPI_STATUS (Status); -} - - -/***************************************************************************** - * - * FUNCTION: AcpiDsEvaluateNamePath - * - * PARAMETERS: WalkState - Current state of the parse tree walk, - * the opcode of current operation should be - * AML_INT_NAMEPATH_OP - * - * RETURN: Status - * - * DESCRIPTION: Translate the -NamePath- parse tree object to the equivalent - * interpreter object, convert it to value, if needed, duplicate - * it, if needed, and push it onto the current result stack. - * - ****************************************************************************/ - -ACPI_STATUS -AcpiDsEvaluateNamePath ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status = AE_OK; - ACPI_PARSE_OBJECT *Op = WalkState->Op; - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - ACPI_OPERAND_OBJECT *NewObjDesc; - UINT8 Type; - - - ACPI_FUNCTION_TRACE_PTR (DsEvaluateNamePath, WalkState); - - - if (!Op->Common.Parent) - { - /* This happens after certain exception processing */ - - goto Exit; - } - - if ((Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) || - (Op->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP) || - (Op->Common.Parent->Common.AmlOpcode == AML_REF_OF_OP)) - { - /* TBD: Should we specify this feature as a bit of OpInfo->Flags of these opcodes? */ - - goto Exit; - } - - Status = AcpiDsCreateOperand (WalkState, Op, 0); - if (ACPI_FAILURE (Status)) - { - goto Exit; - } - - if (Op->Common.Flags & ACPI_PARSEOP_TARGET) - { - NewObjDesc = *Operand; - goto PushResult; - } - - Type = (*Operand)->Common.Type; - - Status = AcpiExResolveToValue (Operand, WalkState); - if (ACPI_FAILURE (Status)) - { - goto Exit; - } - - if (Type == ACPI_TYPE_INTEGER) - { - /* It was incremented by AcpiExResolveToValue */ - - AcpiUtRemoveReference (*Operand); - - Status = AcpiUtCopyIobjectToIobject (*Operand, &NewObjDesc, WalkState); - if (ACPI_FAILURE (Status)) - { - goto Exit; - } - } - else - { - /* - * The object either was anew created or is - * a Namespace node - don't decrement it. - */ - NewObjDesc = *Operand; - } - - /* Cleanup for name-path operand */ - - Status = AcpiDsObjStackPop (1, WalkState); - if (ACPI_FAILURE (Status)) - { - WalkState->ResultObj = NewObjDesc; - goto Exit; - } - -PushResult: - - WalkState->ResultObj = NewObjDesc; - - Status = AcpiDsResultPush (WalkState->ResultObj, WalkState); - if (ACPI_SUCCESS (Status)) - { - /* Force to take it from stack */ - - Op->Common.Flags |= ACPI_PARSEOP_IN_STACK; - } - -Exit: - - return_ACPI_STATUS (Status); -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswexec.c b/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswexec.c deleted file mode 100644 index 9485c62bb..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswexec.c +++ /dev/null @@ -1,853 +0,0 @@ -/****************************************************************************** - * - * Module Name: dswexec - Dispatcher method execution callbacks; - * dispatch to interpreter. - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __DSWEXEC_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "amlcode.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "acdebug.h" - - -#define _COMPONENT ACPI_DISPATCHER - ACPI_MODULE_NAME ("dswexec") - -/* - * Dispatch table for opcode classes - */ -static ACPI_EXECUTE_OP AcpiGbl_OpTypeDispatch [] = -{ - AcpiExOpcode_0A_0T_1R, - AcpiExOpcode_1A_0T_0R, - AcpiExOpcode_1A_0T_1R, - AcpiExOpcode_1A_1T_0R, - AcpiExOpcode_1A_1T_1R, - AcpiExOpcode_2A_0T_0R, - AcpiExOpcode_2A_0T_1R, - AcpiExOpcode_2A_1T_1R, - AcpiExOpcode_2A_2T_1R, - AcpiExOpcode_3A_0T_0R, - AcpiExOpcode_3A_1T_1R, - AcpiExOpcode_6A_0T_1R -}; - - -/***************************************************************************** - * - * FUNCTION: AcpiDsGetPredicateValue - * - * PARAMETERS: WalkState - Current state of the parse tree walk - * ResultObj - if non-zero, pop result from result stack - * - * RETURN: Status - * - * DESCRIPTION: Get the result of a predicate evaluation - * - ****************************************************************************/ - -ACPI_STATUS -AcpiDsGetPredicateValue ( - ACPI_WALK_STATE *WalkState, - ACPI_OPERAND_OBJECT *ResultObj) -{ - ACPI_STATUS Status = AE_OK; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT *LocalObjDesc = NULL; - - - ACPI_FUNCTION_TRACE_PTR (DsGetPredicateValue, WalkState); - - - WalkState->ControlState->Common.State = 0; - - if (ResultObj) - { - Status = AcpiDsResultPop (&ObjDesc, WalkState); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not get result from predicate evaluation")); - - return_ACPI_STATUS (Status); - } - } - else - { - Status = AcpiDsCreateOperand (WalkState, WalkState->Op, 0); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Status = AcpiExResolveToValue (&WalkState->Operands [0], WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ObjDesc = WalkState->Operands [0]; - } - - if (!ObjDesc) - { - ACPI_ERROR ((AE_INFO, - "No predicate ObjDesc=%p State=%p", - ObjDesc, WalkState)); - - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } - - /* - * Result of predicate evaluation must be an Integer - * object. Implicitly convert the argument if necessary. - */ - Status = AcpiExConvertToInteger (ObjDesc, &LocalObjDesc, 16); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - if (LocalObjDesc->Common.Type != ACPI_TYPE_INTEGER) - { - ACPI_ERROR ((AE_INFO, - "Bad predicate (not an integer) ObjDesc=%p State=%p Type=%X", - ObjDesc, WalkState, ObjDesc->Common.Type)); - - Status = AE_AML_OPERAND_TYPE; - goto Cleanup; - } - - /* Truncate the predicate to 32-bits if necessary */ - - AcpiExTruncateFor32bitTable (LocalObjDesc); - - /* - * Save the result of the predicate evaluation on - * the control stack - */ - if (LocalObjDesc->Integer.Value) - { - WalkState->ControlState->Common.Value = TRUE; - } - else - { - /* - * Predicate is FALSE, we will just toss the - * rest of the package - */ - WalkState->ControlState->Common.Value = FALSE; - Status = AE_CTRL_FALSE; - } - - /* Predicate can be used for an implicit return value */ - - (void) AcpiDsDoImplicitReturn (LocalObjDesc, WalkState, TRUE); - - -Cleanup: - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Completed a predicate eval=%X Op=%p\n", - WalkState->ControlState->Common.Value, WalkState->Op)); - - /* Break to debugger to display result */ - - ACPI_DEBUGGER_EXEC (AcpiDbDisplayResultObject (LocalObjDesc, WalkState)); - - /* - * Delete the predicate result object (we know that - * we don't need it anymore) - */ - if (LocalObjDesc != ObjDesc) - { - AcpiUtRemoveReference (LocalObjDesc); - } - AcpiUtRemoveReference (ObjDesc); - - WalkState->ControlState->Common.State = ACPI_CONTROL_NORMAL; - return_ACPI_STATUS (Status); -} - - -/***************************************************************************** - * - * FUNCTION: AcpiDsExecBeginOp - * - * PARAMETERS: WalkState - Current state of the parse tree walk - * OutOp - Where to return op if a new one is created - * - * RETURN: Status - * - * DESCRIPTION: Descending callback used during the execution of control - * methods. This is where most operators and operands are - * dispatched to the interpreter. - * - ****************************************************************************/ - -ACPI_STATUS -AcpiDsExecBeginOp ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT **OutOp) -{ - ACPI_PARSE_OBJECT *Op; - ACPI_STATUS Status = AE_OK; - UINT32 OpcodeClass; - - - ACPI_FUNCTION_TRACE_PTR (DsExecBeginOp, WalkState); - - - Op = WalkState->Op; - if (!Op) - { - Status = AcpiDsLoad2BeginOp (WalkState, OutOp); - if (ACPI_FAILURE (Status)) - { - goto ErrorExit; - } - - Op = *OutOp; - WalkState->Op = Op; - WalkState->Opcode = Op->Common.AmlOpcode; - WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); - - if (AcpiNsOpensScope (WalkState->OpInfo->ObjectType)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "(%s) Popping scope for Op %p\n", - AcpiUtGetTypeName (WalkState->OpInfo->ObjectType), Op)); - - Status = AcpiDsScopeStackPop (WalkState); - if (ACPI_FAILURE (Status)) - { - goto ErrorExit; - } - } - } - - if (Op == WalkState->Origin) - { - if (OutOp) - { - *OutOp = Op; - } - - return_ACPI_STATUS (AE_OK); - } - - /* - * If the previous opcode was a conditional, this opcode - * must be the beginning of the associated predicate. - * Save this knowledge in the current scope descriptor - */ - if ((WalkState->ControlState) && - (WalkState->ControlState->Common.State == - ACPI_CONTROL_CONDITIONAL_EXECUTING)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Exec predicate Op=%p State=%p\n", - Op, WalkState)); - - WalkState->ControlState->Common.State = ACPI_CONTROL_PREDICATE_EXECUTING; - - /* Save start of predicate */ - - WalkState->ControlState->Control.PredicateOp = Op; - } - - - OpcodeClass = WalkState->OpInfo->Class; - - /* We want to send namepaths to the load code */ - - if (Op->Common.AmlOpcode == AML_INT_NAMEPATH_OP) - { - OpcodeClass = AML_CLASS_NAMED_OBJECT; - } - - /* - * Handle the opcode based upon the opcode type - */ - switch (OpcodeClass) - { - case AML_CLASS_CONTROL: - - Status = AcpiDsExecBeginControlOp (WalkState, Op); - break; - - - case AML_CLASS_NAMED_OBJECT: - - if (WalkState->WalkType & ACPI_WALK_METHOD) - { - /* - * Found a named object declaration during method execution; - * we must enter this object into the namespace. The created - * object is temporary and will be deleted upon completion of - * the execution of this method. - */ - Status = AcpiDsLoad2BeginOp (WalkState, NULL); - } - - break; - - - case AML_CLASS_EXECUTE: - case AML_CLASS_CREATE: - - break; - - - default: - break; - } - - /* Nothing to do here during method execution */ - - return_ACPI_STATUS (Status); - - -ErrorExit: - Status = AcpiDsMethodError (Status, WalkState); - return_ACPI_STATUS (Status); -} - - -/***************************************************************************** - * - * FUNCTION: AcpiDsExecEndOp - * - * PARAMETERS: WalkState - Current state of the parse tree walk - * - * RETURN: Status - * - * DESCRIPTION: Ascending callback used during the execution of control - * methods. The only thing we really need to do here is to - * notice the beginning of IF, ELSE, and WHILE blocks. - * - ****************************************************************************/ - -ACPI_STATUS -AcpiDsExecEndOp ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_PARSE_OBJECT *Op; - ACPI_STATUS Status = AE_OK; - UINT32 OpType; - UINT32 OpClass; - ACPI_PARSE_OBJECT *NextOp; - ACPI_PARSE_OBJECT *FirstArg; - - - ACPI_FUNCTION_TRACE_PTR (DsExecEndOp, WalkState); - - - Op = WalkState->Op; - OpType = WalkState->OpInfo->Type; - OpClass = WalkState->OpInfo->Class; - - if (OpClass == AML_CLASS_UNKNOWN) - { - ACPI_ERROR ((AE_INFO, "Unknown opcode %X", Op->Common.AmlOpcode)); - return_ACPI_STATUS (AE_NOT_IMPLEMENTED); - } - - FirstArg = Op->Common.Value.Arg; - - /* Init the walk state */ - - WalkState->NumOperands = 0; - WalkState->OperandIndex = 0; - WalkState->ReturnDesc = NULL; - WalkState->ResultObj = NULL; - - /* Call debugger for single step support (DEBUG build only) */ - - ACPI_DEBUGGER_EXEC (Status = AcpiDbSingleStep (WalkState, Op, OpClass)); - ACPI_DEBUGGER_EXEC (if (ACPI_FAILURE (Status)) {return_ACPI_STATUS (Status);}); - - /* Decode the Opcode Class */ - - switch (OpClass) - { - case AML_CLASS_ARGUMENT: /* Constants, literals, etc. */ - - if (WalkState->Opcode == AML_INT_NAMEPATH_OP) - { - Status = AcpiDsEvaluateNamePath (WalkState); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - } - break; - - - case AML_CLASS_EXECUTE: /* Most operators with arguments */ - - /* Build resolved operand stack */ - - Status = AcpiDsCreateOperands (WalkState, FirstArg); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - /* - * All opcodes require operand resolution, with the only exceptions - * being the ObjectType and SizeOf operators. - */ - if (!(WalkState->OpInfo->Flags & AML_NO_OPERAND_RESOLVE)) - { - /* Resolve all operands */ - - Status = AcpiExResolveOperands (WalkState->Opcode, - &(WalkState->Operands [WalkState->NumOperands -1]), - WalkState); - } - - if (ACPI_SUCCESS (Status)) - { - /* - * Dispatch the request to the appropriate interpreter handler - * routine. There is one routine per opcode "type" based upon the - * number of opcode arguments and return type. - */ - Status = AcpiGbl_OpTypeDispatch[OpType] (WalkState); - } - else - { - /* - * Treat constructs of the form "Store(LocalX,LocalX)" as noops when the - * Local is uninitialized. - */ - if ((Status == AE_AML_UNINITIALIZED_LOCAL) && - (WalkState->Opcode == AML_STORE_OP) && - (WalkState->Operands[0]->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) && - (WalkState->Operands[1]->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) && - (WalkState->Operands[0]->Reference.Class == - WalkState->Operands[1]->Reference.Class) && - (WalkState->Operands[0]->Reference.Value == - WalkState->Operands[1]->Reference.Value)) - { - Status = AE_OK; - } - else - { - ACPI_EXCEPTION ((AE_INFO, Status, - "While resolving operands for [%s]", - AcpiPsGetOpcodeName (WalkState->Opcode))); - } - } - - /* Always delete the argument objects and clear the operand stack */ - - AcpiDsClearOperands (WalkState); - - /* - * If a result object was returned from above, push it on the - * current result stack - */ - if (ACPI_SUCCESS (Status) && - WalkState->ResultObj) - { - Status = AcpiDsResultPush (WalkState->ResultObj, WalkState); - } - break; - - - default: - - switch (OpType) - { - case AML_TYPE_CONTROL: /* Type 1 opcode, IF/ELSE/WHILE/NOOP */ - - /* 1 Operand, 0 ExternalResult, 0 InternalResult */ - - Status = AcpiDsExecEndControlOp (WalkState, Op); - - break; - - - case AML_TYPE_METHOD_CALL: - - /* - * If the method is referenced from within a package - * declaration, it is not a invocation of the method, just - * a reference to it. - */ - if ((Op->Asl.Parent) && - ((Op->Asl.Parent->Asl.AmlOpcode == AML_PACKAGE_OP) || - (Op->Asl.Parent->Asl.AmlOpcode == AML_VAR_PACKAGE_OP))) - { - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Method Reference in a Package, Op=%p\n", Op)); - - Op->Common.Node = (ACPI_NAMESPACE_NODE *) Op->Asl.Value.Arg->Asl.Node; - AcpiUtAddReference (Op->Asl.Value.Arg->Asl.Node->Object); - return_ACPI_STATUS (AE_OK); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Method invocation, Op=%p\n", Op)); - - /* - * (AML_METHODCALL) Op->Asl.Value.Arg->Asl.Node contains - * the method Node pointer - */ - /* NextOp points to the op that holds the method name */ - - NextOp = FirstArg; - - /* NextOp points to first argument op */ - - NextOp = NextOp->Common.Next; - - /* - * Get the method's arguments and put them on the operand stack - */ - Status = AcpiDsCreateOperands (WalkState, NextOp); - if (ACPI_FAILURE (Status)) - { - break; - } - - /* - * Since the operands will be passed to another control method, - * we must resolve all local references here (Local variables, - * arguments to *this* method, etc.) - */ - Status = AcpiDsResolveOperands (WalkState); - if (ACPI_FAILURE (Status)) - { - /* On error, clear all resolved operands */ - - AcpiDsClearOperands (WalkState); - break; - } - - /* - * Tell the walk loop to preempt this running method and - * execute the new method - */ - Status = AE_CTRL_TRANSFER; - - /* - * Return now; we don't want to disturb anything, - * especially the operand count! - */ - return_ACPI_STATUS (Status); - - - case AML_TYPE_CREATE_FIELD: - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Executing CreateField Buffer/Index Op=%p\n", Op)); - - Status = AcpiDsLoad2EndOp (WalkState); - if (ACPI_FAILURE (Status)) - { - break; - } - - Status = AcpiDsEvalBufferFieldOperands (WalkState, Op); - break; - - - case AML_TYPE_CREATE_OBJECT: - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Executing CreateObject (Buffer/Package) Op=%p\n", Op)); - - switch (Op->Common.Parent->Common.AmlOpcode) - { - case AML_NAME_OP: - - /* - * Put the Node on the object stack (Contains the ACPI Name - * of this object) - */ - WalkState->Operands[0] = (void *) Op->Common.Parent->Common.Node; - WalkState->NumOperands = 1; - - Status = AcpiDsCreateNode (WalkState, - Op->Common.Parent->Common.Node, - Op->Common.Parent); - if (ACPI_FAILURE (Status)) - { - break; - } - - /* Fall through */ - /*lint -fallthrough */ - - case AML_INT_EVAL_SUBTREE_OP: - - Status = AcpiDsEvalDataObjectOperands (WalkState, Op, - AcpiNsGetAttachedObject (Op->Common.Parent->Common.Node)); - break; - - default: - - Status = AcpiDsEvalDataObjectOperands (WalkState, Op, NULL); - break; - } - - /* - * If a result object was returned from above, push it on the - * current result stack - */ - if (WalkState->ResultObj) - { - Status = AcpiDsResultPush (WalkState->ResultObj, WalkState); - } - break; - - - case AML_TYPE_NAMED_FIELD: - case AML_TYPE_NAMED_COMPLEX: - case AML_TYPE_NAMED_SIMPLE: - case AML_TYPE_NAMED_NO_OBJ: - - Status = AcpiDsLoad2EndOp (WalkState); - if (ACPI_FAILURE (Status)) - { - break; - } - - if (Op->Common.AmlOpcode == AML_REGION_OP) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Executing OpRegion Address/Length Op=%p\n", Op)); - - Status = AcpiDsEvalRegionOperands (WalkState, Op); - if (ACPI_FAILURE (Status)) - { - break; - } - } - else if (Op->Common.AmlOpcode == AML_DATA_REGION_OP) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Executing DataTableRegion Strings Op=%p\n", Op)); - - Status = AcpiDsEvalTableRegionOperands (WalkState, Op); - if (ACPI_FAILURE (Status)) - { - break; - } - } - else if (Op->Common.AmlOpcode == AML_BANK_FIELD_OP) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Executing BankField Op=%p\n", Op)); - - Status = AcpiDsEvalBankFieldOperands (WalkState, Op); - if (ACPI_FAILURE (Status)) - { - break; - } - } - break; - - - case AML_TYPE_UNDEFINED: - - ACPI_ERROR ((AE_INFO, - "Undefined opcode type Op=%p", Op)); - return_ACPI_STATUS (AE_NOT_IMPLEMENTED); - - - case AML_TYPE_BOGUS: - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Internal opcode=%X type Op=%p\n", - WalkState->Opcode, Op)); - break; - - - default: - - ACPI_ERROR ((AE_INFO, - "Unimplemented opcode, class=%X type=%X Opcode=%X Op=%p", - OpClass, OpType, Op->Common.AmlOpcode, Op)); - - Status = AE_NOT_IMPLEMENTED; - break; - } - } - - /* - * ACPI 2.0 support for 64-bit integers: Truncate numeric - * result value if we are executing from a 32-bit ACPI table - */ - AcpiExTruncateFor32bitTable (WalkState->ResultObj); - - /* - * Check if we just completed the evaluation of a - * conditional predicate - */ - if ((ACPI_SUCCESS (Status)) && - (WalkState->ControlState) && - (WalkState->ControlState->Common.State == - ACPI_CONTROL_PREDICATE_EXECUTING) && - (WalkState->ControlState->Control.PredicateOp == Op)) - { - Status = AcpiDsGetPredicateValue (WalkState, WalkState->ResultObj); - WalkState->ResultObj = NULL; - } - - -Cleanup: - - if (WalkState->ResultObj) - { - /* Break to debugger to display result */ - - ACPI_DEBUGGER_EXEC (AcpiDbDisplayResultObject (WalkState->ResultObj, - WalkState)); - - /* - * Delete the result op if and only if: - * Parent will not use the result -- such as any - * non-nested type2 op in a method (parent will be method) - */ - AcpiDsDeleteResultIfNotUsed (Op, WalkState->ResultObj, WalkState); - } - -#ifdef _UNDER_DEVELOPMENT - - if (WalkState->ParserState.Aml == WalkState->ParserState.AmlEnd) - { - AcpiDbMethodEnd (WalkState); - } -#endif - - /* Invoke exception handler on error */ - - if (ACPI_FAILURE (Status)) - { - Status = AcpiDsMethodError (Status, WalkState); - } - - /* Always clear the object stack */ - - WalkState->NumOperands = 0; - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswload.c b/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswload.c deleted file mode 100644 index 48c4ae6f1..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswload.c +++ /dev/null @@ -1,1316 +0,0 @@ -/****************************************************************************** - * - * Module Name: dswload - Dispatcher namespace load callbacks - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __DSWLOAD_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "amlcode.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "acevents.h" - -#ifdef ACPI_ASL_COMPILER -#include "acdisasm.h" -#endif - -#define _COMPONENT ACPI_DISPATCHER - ACPI_MODULE_NAME ("dswload") - - -/******************************************************************************* - * - * FUNCTION: AcpiDsInitCallbacks - * - * PARAMETERS: WalkState - Current state of the parse tree walk - * PassNumber - 1, 2, or 3 - * - * RETURN: Status - * - * DESCRIPTION: Init walk state callbacks - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsInitCallbacks ( - ACPI_WALK_STATE *WalkState, - UINT32 PassNumber) -{ - - switch (PassNumber) - { - case 1: - WalkState->ParseFlags = ACPI_PARSE_LOAD_PASS1 | - ACPI_PARSE_DELETE_TREE; - WalkState->DescendingCallback = AcpiDsLoad1BeginOp; - WalkState->AscendingCallback = AcpiDsLoad1EndOp; - break; - - case 2: - WalkState->ParseFlags = ACPI_PARSE_LOAD_PASS1 | - ACPI_PARSE_DELETE_TREE; - WalkState->DescendingCallback = AcpiDsLoad2BeginOp; - WalkState->AscendingCallback = AcpiDsLoad2EndOp; - break; - - case 3: -#ifndef ACPI_NO_METHOD_EXECUTION - WalkState->ParseFlags |= ACPI_PARSE_EXECUTE | - ACPI_PARSE_DELETE_TREE; - WalkState->DescendingCallback = AcpiDsExecBeginOp; - WalkState->AscendingCallback = AcpiDsExecEndOp; -#endif - break; - - default: - return (AE_BAD_PARAMETER); - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsLoad1BeginOp - * - * PARAMETERS: WalkState - Current state of the parse tree walk - * OutOp - Where to return op if a new one is created - * - * RETURN: Status - * - * DESCRIPTION: Descending callback used during the loading of ACPI tables. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsLoad1BeginOp ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT **OutOp) -{ - ACPI_PARSE_OBJECT *Op; - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - ACPI_OBJECT_TYPE ObjectType; - char *Path; - UINT32 Flags; - - - ACPI_FUNCTION_TRACE (DsLoad1BeginOp); - - - Op = WalkState->Op; - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", Op, WalkState)); - - /* We are only interested in opcodes that have an associated name */ - - if (Op) - { - if (!(WalkState->OpInfo->Flags & AML_NAMED)) - { - *OutOp = Op; - return_ACPI_STATUS (AE_OK); - } - - /* Check if this object has already been installed in the namespace */ - - if (Op->Common.Node) - { - *OutOp = Op; - return_ACPI_STATUS (AE_OK); - } - } - - Path = AcpiPsGetNextNamestring (&WalkState->ParserState); - - /* Map the raw opcode into an internal object type */ - - ObjectType = WalkState->OpInfo->ObjectType; - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "State=%p Op=%p [%s]\n", WalkState, Op, AcpiUtGetTypeName (ObjectType))); - - switch (WalkState->Opcode) - { - case AML_SCOPE_OP: - - /* - * The target name of the Scope() operator must exist at this point so - * that we can actually open the scope to enter new names underneath it. - * Allow search-to-root for single namesegs. - */ - Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType, - ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &(Node)); -#ifdef ACPI_ASL_COMPILER - if (Status == AE_NOT_FOUND) - { - /* - * Table disassembly: - * Target of Scope() not found. Generate an External for it, and - * insert the name into the namespace. - */ - AcpiDmAddToExternalList (Op, Path, ACPI_TYPE_DEVICE, 0); - Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType, - ACPI_IMODE_LOAD_PASS1, ACPI_NS_SEARCH_PARENT, - WalkState, &Node); - } -#endif - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR_NAMESPACE (Path, Status); - return_ACPI_STATUS (Status); - } - - /* - * Check to make sure that the target is - * one of the opcodes that actually opens a scope - */ - switch (Node->Type) - { - case ACPI_TYPE_ANY: - case ACPI_TYPE_LOCAL_SCOPE: /* Scope */ - case ACPI_TYPE_DEVICE: - case ACPI_TYPE_POWER: - case ACPI_TYPE_PROCESSOR: - case ACPI_TYPE_THERMAL: - - /* These are acceptable types */ - break; - - case ACPI_TYPE_INTEGER: - case ACPI_TYPE_STRING: - case ACPI_TYPE_BUFFER: - - /* - * These types we will allow, but we will change the type. - * This enables some existing code of the form: - * - * Name (DEB, 0) - * Scope (DEB) { ... } - * - * Note: silently change the type here. On the second pass, - * we will report a warning - */ - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Type override - [%4.4s] had invalid type (%s) " - "for Scope operator, changed to type ANY\n", - AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type))); - - Node->Type = ACPI_TYPE_ANY; - WalkState->ScopeInfo->Common.Value = ACPI_TYPE_ANY; - break; - - default: - - /* All other types are an error */ - - ACPI_ERROR ((AE_INFO, - "Invalid type (%s) for target of " - "Scope operator [%4.4s] (Cannot override)", - AcpiUtGetTypeName (Node->Type), AcpiUtGetNodeName (Node))); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - break; - - - default: - /* - * For all other named opcodes, we will enter the name into - * the namespace. - * - * Setup the search flags. - * Since we are entering a name into the namespace, we do not want to - * enable the search-to-root upsearch. - * - * There are only two conditions where it is acceptable that the name - * already exists: - * 1) the Scope() operator can reopen a scoping object that was - * previously defined (Scope, Method, Device, etc.) - * 2) Whenever we are parsing a deferred opcode (OpRegion, Buffer, - * BufferField, or Package), the name of the object is already - * in the namespace. - */ - if (WalkState->DeferredNode) - { - /* This name is already in the namespace, get the node */ - - Node = WalkState->DeferredNode; - Status = AE_OK; - break; - } - - /* - * If we are executing a method, do not create any namespace objects - * during the load phase, only during execution. - */ - if (WalkState->MethodNode) - { - Node = NULL; - Status = AE_OK; - break; - } - - Flags = ACPI_NS_NO_UPSEARCH; - if ((WalkState->Opcode != AML_SCOPE_OP) && - (!(WalkState->ParseFlags & ACPI_PARSE_DEFERRED_OP))) - { - Flags |= ACPI_NS_ERROR_IF_FOUND; - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[%s] Cannot already exist\n", - AcpiUtGetTypeName (ObjectType))); - } - else - { - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "[%s] Both Find or Create allowed\n", - AcpiUtGetTypeName (ObjectType))); - } - - /* - * Enter the named type into the internal namespace. We enter the name - * as we go downward in the parse tree. Any necessary subobjects that - * involve arguments to the opcode must be created as we go back up the - * parse tree later. - */ - Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType, - ACPI_IMODE_LOAD_PASS1, Flags, WalkState, &Node); - if (ACPI_FAILURE (Status)) - { - if (Status == AE_ALREADY_EXISTS) - { - /* The name already exists in this scope */ - - if (Node->Flags & ANOBJ_IS_EXTERNAL) - { - /* - * Allow one create on an object or segment that was - * previously declared External - */ - Node->Flags &= ~ANOBJ_IS_EXTERNAL; - Node->Type = (UINT8) ObjectType; - - /* Just retyped a node, probably will need to open a scope */ - - if (AcpiNsOpensScope (ObjectType)) - { - Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - Status = AE_OK; - } - } - - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR_NAMESPACE (Path, Status); - return_ACPI_STATUS (Status); - } - } - break; - } - - /* Common exit */ - - if (!Op) - { - /* Create a new op */ - - Op = AcpiPsAllocOp (WalkState->Opcode); - if (!Op) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - } - - /* Initialize the op */ - -#if (defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)) - Op->Named.Path = ACPI_CAST_PTR (UINT8, Path); -#endif - - if (Node) - { - /* - * Put the Node in the "op" object that the parser uses, so we - * can get it again quickly when this scope is closed - */ - Op->Common.Node = Node; - Op->Named.Name = Node->Name.Integer; - } - - AcpiPsAppendArg (AcpiPsGetParentScope (&WalkState->ParserState), Op); - *OutOp = Op; - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsLoad1EndOp - * - * PARAMETERS: WalkState - Current state of the parse tree walk - * - * RETURN: Status - * - * DESCRIPTION: Ascending callback used during the loading of the namespace, - * both control methods and everything else. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsLoad1EndOp ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_PARSE_OBJECT *Op; - ACPI_OBJECT_TYPE ObjectType; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (DsLoad1EndOp); - - - Op = WalkState->Op; - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", Op, WalkState)); - - /* We are only interested in opcodes that have an associated name */ - - if (!(WalkState->OpInfo->Flags & (AML_NAMED | AML_FIELD))) - { - return_ACPI_STATUS (AE_OK); - } - - /* Get the object type to determine if we should pop the scope */ - - ObjectType = WalkState->OpInfo->ObjectType; - -#ifndef ACPI_NO_METHOD_EXECUTION - if (WalkState->OpInfo->Flags & AML_FIELD) - { - /* - * If we are executing a method, do not create any namespace objects - * during the load phase, only during execution. - */ - if (!WalkState->MethodNode) - { - if (WalkState->Opcode == AML_FIELD_OP || - WalkState->Opcode == AML_BANK_FIELD_OP || - WalkState->Opcode == AML_INDEX_FIELD_OP) - { - Status = AcpiDsInitFieldObjects (Op, WalkState); - } - } - return_ACPI_STATUS (Status); - } - - /* - * If we are executing a method, do not create any namespace objects - * during the load phase, only during execution. - */ - if (!WalkState->MethodNode) - { - if (Op->Common.AmlOpcode == AML_REGION_OP) - { - Status = AcpiExCreateRegion (Op->Named.Data, Op->Named.Length, - (ACPI_ADR_SPACE_TYPE) ((Op->Common.Value.Arg)->Common.Value.Integer), - WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - else if (Op->Common.AmlOpcode == AML_DATA_REGION_OP) - { - Status = AcpiExCreateRegion (Op->Named.Data, Op->Named.Length, - REGION_DATA_TABLE, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - } -#endif - - if (Op->Common.AmlOpcode == AML_NAME_OP) - { - /* For Name opcode, get the object type from the argument */ - - if (Op->Common.Value.Arg) - { - ObjectType = (AcpiPsGetOpcodeInfo ( - (Op->Common.Value.Arg)->Common.AmlOpcode))->ObjectType; - - /* Set node type if we have a namespace node */ - - if (Op->Common.Node) - { - Op->Common.Node->Type = (UINT8) ObjectType; - } - } - } - - /* - * If we are executing a method, do not create any namespace objects - * during the load phase, only during execution. - */ - if (!WalkState->MethodNode) - { - if (Op->Common.AmlOpcode == AML_METHOD_OP) - { - /* - * MethodOp PkgLength NameString MethodFlags TermList - * - * Note: We must create the method node/object pair as soon as we - * see the method declaration. This allows later pass1 parsing - * of invocations of the method (need to know the number of - * arguments.) - */ - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "LOADING-Method: State=%p Op=%p NamedObj=%p\n", - WalkState, Op, Op->Named.Node)); - - if (!AcpiNsGetAttachedObject (Op->Named.Node)) - { - WalkState->Operands[0] = ACPI_CAST_PTR (void, Op->Named.Node); - WalkState->NumOperands = 1; - - Status = AcpiDsCreateOperands (WalkState, Op->Common.Value.Arg); - if (ACPI_SUCCESS (Status)) - { - Status = AcpiExCreateMethod (Op->Named.Data, - Op->Named.Length, WalkState); - } - - WalkState->Operands[0] = NULL; - WalkState->NumOperands = 0; - - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - } - } - - /* Pop the scope stack (only if loading a table) */ - - if (!WalkState->MethodNode && - AcpiNsOpensScope (ObjectType)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s): Popping scope for Op %p\n", - AcpiUtGetTypeName (ObjectType), Op)); - - Status = AcpiDsScopeStackPop (WalkState); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsLoad2BeginOp - * - * PARAMETERS: WalkState - Current state of the parse tree walk - * OutOp - Wher to return op if a new one is created - * - * RETURN: Status - * - * DESCRIPTION: Descending callback used during the loading of ACPI tables. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsLoad2BeginOp ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT **OutOp) -{ - ACPI_PARSE_OBJECT *Op; - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - ACPI_OBJECT_TYPE ObjectType; - char *BufferPtr; - UINT32 Flags; - - - ACPI_FUNCTION_TRACE (DsLoad2BeginOp); - - - Op = WalkState->Op; - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", Op, WalkState)); - - if (Op) - { - if ((WalkState->ControlState) && - (WalkState->ControlState->Common.State == - ACPI_CONTROL_CONDITIONAL_EXECUTING)) - { - /* We are executing a while loop outside of a method */ - - Status = AcpiDsExecBeginOp (WalkState, OutOp); - return_ACPI_STATUS (Status); - } - - /* We only care about Namespace opcodes here */ - - if ((!(WalkState->OpInfo->Flags & AML_NSOPCODE) && - (WalkState->Opcode != AML_INT_NAMEPATH_OP)) || - (!(WalkState->OpInfo->Flags & AML_NAMED))) - { - return_ACPI_STATUS (AE_OK); - } - - /* Get the name we are going to enter or lookup in the namespace */ - - if (WalkState->Opcode == AML_INT_NAMEPATH_OP) - { - /* For Namepath op, get the path string */ - - BufferPtr = Op->Common.Value.String; - if (!BufferPtr) - { - /* No name, just exit */ - - return_ACPI_STATUS (AE_OK); - } - } - else - { - /* Get name from the op */ - - BufferPtr = ACPI_CAST_PTR (char, &Op->Named.Name); - } - } - else - { - /* Get the namestring from the raw AML */ - - BufferPtr = AcpiPsGetNextNamestring (&WalkState->ParserState); - } - - /* Map the opcode into an internal object type */ - - ObjectType = WalkState->OpInfo->ObjectType; - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "State=%p Op=%p Type=%X\n", WalkState, Op, ObjectType)); - - switch (WalkState->Opcode) - { - case AML_FIELD_OP: - case AML_BANK_FIELD_OP: - case AML_INDEX_FIELD_OP: - - Node = NULL; - Status = AE_OK; - break; - - case AML_INT_NAMEPATH_OP: - /* - * The NamePath is an object reference to an existing object. - * Don't enter the name into the namespace, but look it up - * for use later. - */ - Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType, - ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, - WalkState, &(Node)); - break; - - case AML_SCOPE_OP: - - /* Special case for Scope(\) -> refers to the Root node */ - - if (Op && (Op->Named.Node == AcpiGbl_RootNode)) - { - Node = Op->Named.Node; - - Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - else - { - /* - * The Path is an object reference to an existing object. - * Don't enter the name into the namespace, but look it up - * for use later. - */ - Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType, - ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, - WalkState, &(Node)); - if (ACPI_FAILURE (Status)) - { -#ifdef ACPI_ASL_COMPILER - if (Status == AE_NOT_FOUND) - { - Status = AE_OK; - } - else - { - ACPI_ERROR_NAMESPACE (BufferPtr, Status); - } -#else - ACPI_ERROR_NAMESPACE (BufferPtr, Status); -#endif - return_ACPI_STATUS (Status); - } - } - - /* - * We must check to make sure that the target is - * one of the opcodes that actually opens a scope - */ - switch (Node->Type) - { - case ACPI_TYPE_ANY: - case ACPI_TYPE_LOCAL_SCOPE: /* Scope */ - case ACPI_TYPE_DEVICE: - case ACPI_TYPE_POWER: - case ACPI_TYPE_PROCESSOR: - case ACPI_TYPE_THERMAL: - - /* These are acceptable types */ - break; - - case ACPI_TYPE_INTEGER: - case ACPI_TYPE_STRING: - case ACPI_TYPE_BUFFER: - - /* - * These types we will allow, but we will change the type. - * This enables some existing code of the form: - * - * Name (DEB, 0) - * Scope (DEB) { ... } - */ - ACPI_WARNING ((AE_INFO, - "Type override - [%4.4s] had invalid type (%s) " - "for Scope operator, changed to type ANY\n", - AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type))); - - Node->Type = ACPI_TYPE_ANY; - WalkState->ScopeInfo->Common.Value = ACPI_TYPE_ANY; - break; - - default: - - /* All other types are an error */ - - ACPI_ERROR ((AE_INFO, - "Invalid type (%s) for target of " - "Scope operator [%4.4s] (Cannot override)", - AcpiUtGetTypeName (Node->Type), AcpiUtGetNodeName (Node))); - - return (AE_AML_OPERAND_TYPE); - } - break; - - default: - - /* All other opcodes */ - - if (Op && Op->Common.Node) - { - /* This op/node was previously entered into the namespace */ - - Node = Op->Common.Node; - - if (AcpiNsOpensScope (ObjectType)) - { - Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - return_ACPI_STATUS (AE_OK); - } - - /* - * Enter the named type into the internal namespace. We enter the name - * as we go downward in the parse tree. Any necessary subobjects that - * involve arguments to the opcode must be created as we go back up the - * parse tree later. - * - * Note: Name may already exist if we are executing a deferred opcode. - */ - if (WalkState->DeferredNode) - { - /* This name is already in the namespace, get the node */ - - Node = WalkState->DeferredNode; - Status = AE_OK; - break; - } - - Flags = ACPI_NS_NO_UPSEARCH; - if (WalkState->PassNumber == ACPI_IMODE_EXECUTE) - { - /* Execution mode, node cannot already exist, node is temporary */ - - Flags |= ACPI_NS_ERROR_IF_FOUND; - - if (!(WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL)) - { - Flags |= ACPI_NS_TEMPORARY; - } - } - - /* Add new entry or lookup existing entry */ - - Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType, - ACPI_IMODE_LOAD_PASS2, Flags, WalkState, &Node); - - if (ACPI_SUCCESS (Status) && (Flags & ACPI_NS_TEMPORARY)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "***New Node [%4.4s] %p is temporary\n", - AcpiUtGetNodeName (Node), Node)); - } - break; - } - - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR_NAMESPACE (BufferPtr, Status); - return_ACPI_STATUS (Status); - } - - if (!Op) - { - /* Create a new op */ - - Op = AcpiPsAllocOp (WalkState->Opcode); - if (!Op) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Initialize the new op */ - - if (Node) - { - Op->Named.Name = Node->Name.Integer; - } - *OutOp = Op; - } - - /* - * Put the Node in the "op" object that the parser uses, so we - * can get it again quickly when this scope is closed - */ - Op->Common.Node = Node; - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsLoad2EndOp - * - * PARAMETERS: WalkState - Current state of the parse tree walk - * - * RETURN: Status - * - * DESCRIPTION: Ascending callback used during the loading of the namespace, - * both control methods and everything else. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsLoad2EndOp ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_PARSE_OBJECT *Op; - ACPI_STATUS Status = AE_OK; - ACPI_OBJECT_TYPE ObjectType; - ACPI_NAMESPACE_NODE *Node; - ACPI_PARSE_OBJECT *Arg; - ACPI_NAMESPACE_NODE *NewNode; -#ifndef ACPI_NO_METHOD_EXECUTION - UINT32 i; - UINT8 RegionSpace; -#endif - - - ACPI_FUNCTION_TRACE (DsLoad2EndOp); - - Op = WalkState->Op; - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Opcode [%s] Op %p State %p\n", - WalkState->OpInfo->Name, Op, WalkState)); - - /* Check if opcode had an associated namespace object */ - - if (!(WalkState->OpInfo->Flags & AML_NSOBJECT)) - { - return_ACPI_STATUS (AE_OK); - } - - if (Op->Common.AmlOpcode == AML_SCOPE_OP) - { - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Ending scope Op=%p State=%p\n", Op, WalkState)); - } - - ObjectType = WalkState->OpInfo->ObjectType; - - /* - * Get the Node/name from the earlier lookup - * (It was saved in the *op structure) - */ - Node = Op->Common.Node; - - /* - * Put the Node on the object stack (Contains the ACPI Name of - * this object) - */ - WalkState->Operands[0] = (void *) Node; - WalkState->NumOperands = 1; - - /* Pop the scope stack */ - - if (AcpiNsOpensScope (ObjectType) && - (Op->Common.AmlOpcode != AML_INT_METHODCALL_OP)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s) Popping scope for Op %p\n", - AcpiUtGetTypeName (ObjectType), Op)); - - Status = AcpiDsScopeStackPop (WalkState); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - } - - /* - * Named operations are as follows: - * - * AML_ALIAS - * AML_BANKFIELD - * AML_CREATEBITFIELD - * AML_CREATEBYTEFIELD - * AML_CREATEDWORDFIELD - * AML_CREATEFIELD - * AML_CREATEQWORDFIELD - * AML_CREATEWORDFIELD - * AML_DATA_REGION - * AML_DEVICE - * AML_EVENT - * AML_FIELD - * AML_INDEXFIELD - * AML_METHOD - * AML_METHODCALL - * AML_MUTEX - * AML_NAME - * AML_NAMEDFIELD - * AML_OPREGION - * AML_POWERRES - * AML_PROCESSOR - * AML_SCOPE - * AML_THERMALZONE - */ - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Create-Load [%s] State=%p Op=%p NamedObj=%p\n", - AcpiPsGetOpcodeName (Op->Common.AmlOpcode), WalkState, Op, Node)); - - /* Decode the opcode */ - - Arg = Op->Common.Value.Arg; - - switch (WalkState->OpInfo->Type) - { -#ifndef ACPI_NO_METHOD_EXECUTION - - case AML_TYPE_CREATE_FIELD: - /* - * Create the field object, but the field buffer and index must - * be evaluated later during the execution phase - */ - Status = AcpiDsCreateBufferField (Op, WalkState); - break; - - - case AML_TYPE_NAMED_FIELD: - /* - * If we are executing a method, initialize the field - */ - if (WalkState->MethodNode) - { - Status = AcpiDsInitFieldObjects (Op, WalkState); - } - - switch (Op->Common.AmlOpcode) - { - case AML_INDEX_FIELD_OP: - - Status = AcpiDsCreateIndexField (Op, (ACPI_HANDLE) Arg->Common.Node, - WalkState); - break; - - case AML_BANK_FIELD_OP: - - Status = AcpiDsCreateBankField (Op, Arg->Common.Node, WalkState); - break; - - case AML_FIELD_OP: - - Status = AcpiDsCreateField (Op, Arg->Common.Node, WalkState); - break; - - default: - /* All NAMED_FIELD opcodes must be handled above */ - break; - } - break; - - - case AML_TYPE_NAMED_SIMPLE: - - Status = AcpiDsCreateOperands (WalkState, Arg); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - switch (Op->Common.AmlOpcode) - { - case AML_PROCESSOR_OP: - - Status = AcpiExCreateProcessor (WalkState); - break; - - case AML_POWER_RES_OP: - - Status = AcpiExCreatePowerResource (WalkState); - break; - - case AML_MUTEX_OP: - - Status = AcpiExCreateMutex (WalkState); - break; - - case AML_EVENT_OP: - - Status = AcpiExCreateEvent (WalkState); - break; - - - case AML_ALIAS_OP: - - Status = AcpiExCreateAlias (WalkState); - break; - - default: - /* Unknown opcode */ - - Status = AE_OK; - goto Cleanup; - } - - /* Delete operands */ - - for (i = 1; i < WalkState->NumOperands; i++) - { - AcpiUtRemoveReference (WalkState->Operands[i]); - WalkState->Operands[i] = NULL; - } - - break; -#endif /* ACPI_NO_METHOD_EXECUTION */ - - case AML_TYPE_NAMED_COMPLEX: - - switch (Op->Common.AmlOpcode) - { -#ifndef ACPI_NO_METHOD_EXECUTION - case AML_REGION_OP: - case AML_DATA_REGION_OP: - - if (Op->Common.AmlOpcode == AML_REGION_OP) - { - RegionSpace = (ACPI_ADR_SPACE_TYPE) - ((Op->Common.Value.Arg)->Common.Value.Integer); - } - else - { - RegionSpace = REGION_DATA_TABLE; - } - - /* - * The OpRegion is not fully parsed at this time. The only valid - * argument is the SpaceId. (We must save the address of the - * AML of the address and length operands) - * - * If we have a valid region, initialize it. The namespace is - * unlocked at this point. - * - * Need to unlock interpreter if it is locked (if we are running - * a control method), in order to allow _REG methods to be run - * during AcpiEvInitializeRegion. - */ - if (WalkState->MethodNode) - { - /* - * Executing a method: initialize the region and unlock - * the interpreter - */ - Status = AcpiExCreateRegion (Op->Named.Data, Op->Named.Length, - RegionSpace, WalkState); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - AcpiExExitInterpreter (); - } - - Status = AcpiEvInitializeRegion (AcpiNsGetAttachedObject (Node), - FALSE); - if (WalkState->MethodNode) - { - AcpiExEnterInterpreter (); - } - - if (ACPI_FAILURE (Status)) - { - /* - * If AE_NOT_EXIST is returned, it is not fatal - * because many regions get created before a handler - * is installed for said region. - */ - if (AE_NOT_EXIST == Status) - { - Status = AE_OK; - } - } - break; - - - case AML_NAME_OP: - - Status = AcpiDsCreateNode (WalkState, Node, Op); - break; - - - case AML_METHOD_OP: - /* - * MethodOp PkgLength NameString MethodFlags TermList - * - * Note: We must create the method node/object pair as soon as we - * see the method declaration. This allows later pass1 parsing - * of invocations of the method (need to know the number of - * arguments.) - */ - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "LOADING-Method: State=%p Op=%p NamedObj=%p\n", - WalkState, Op, Op->Named.Node)); - - if (!AcpiNsGetAttachedObject (Op->Named.Node)) - { - WalkState->Operands[0] = ACPI_CAST_PTR (void, Op->Named.Node); - WalkState->NumOperands = 1; - - Status = AcpiDsCreateOperands (WalkState, Op->Common.Value.Arg); - if (ACPI_SUCCESS (Status)) - { - Status = AcpiExCreateMethod (Op->Named.Data, - Op->Named.Length, WalkState); - } - WalkState->Operands[0] = NULL; - WalkState->NumOperands = 0; - - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - break; - -#endif /* ACPI_NO_METHOD_EXECUTION */ - - default: - /* All NAMED_COMPLEX opcodes must be handled above */ - break; - } - break; - - - case AML_CLASS_INTERNAL: - - /* case AML_INT_NAMEPATH_OP: */ - break; - - - case AML_CLASS_METHOD_CALL: - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "RESOLVING-MethodCall: State=%p Op=%p NamedObj=%p\n", - WalkState, Op, Node)); - - /* - * Lookup the method name and save the Node - */ - Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.String, - ACPI_TYPE_ANY, ACPI_IMODE_LOAD_PASS2, - ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, - WalkState, &(NewNode)); - if (ACPI_SUCCESS (Status)) - { - /* - * Make sure that what we found is indeed a method - * We didn't search for a method on purpose, to see if the name - * would resolve - */ - if (NewNode->Type != ACPI_TYPE_METHOD) - { - Status = AE_AML_OPERAND_TYPE; - } - - /* We could put the returned object (Node) on the object stack for - * later, but for now, we will put it in the "op" object that the - * parser uses, so we can get it again at the end of this scope - */ - Op->Common.Node = NewNode; - } - else - { - ACPI_ERROR_NAMESPACE (Arg->Common.Value.String, Status); - } - break; - - - default: - break; - } - -Cleanup: - - /* Remove the Node pushed at the very beginning */ - - WalkState->Operands[0] = NULL; - WalkState->NumOperands = 0; - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswscope.c b/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswscope.c deleted file mode 100644 index 023f9ef66..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswscope.c +++ /dev/null @@ -1,311 +0,0 @@ -/****************************************************************************** - * - * Module Name: dswscope - Scope stack manipulation - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __DSWSCOPE_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acdispat.h" - - -#define _COMPONENT ACPI_DISPATCHER - ACPI_MODULE_NAME ("dswscope") - - -/**************************************************************************** - * - * FUNCTION: AcpiDsScopeStackClear - * - * PARAMETERS: WalkState - Current state - * - * RETURN: None - * - * DESCRIPTION: Pop (and free) everything on the scope stack except the - * root scope object (which remains at the stack top.) - * - ***************************************************************************/ - -void -AcpiDsScopeStackClear ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_GENERIC_STATE *ScopeInfo; - - ACPI_FUNCTION_NAME (DsScopeStackClear); - - - while (WalkState->ScopeInfo) - { - /* Pop a scope off the stack */ - - ScopeInfo = WalkState->ScopeInfo; - WalkState->ScopeInfo = ScopeInfo->Scope.Next; - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Popped object type (%s)\n", - AcpiUtGetTypeName (ScopeInfo->Common.Value))); - AcpiUtDeleteGenericState (ScopeInfo); - } -} - - -/**************************************************************************** - * - * FUNCTION: AcpiDsScopeStackPush - * - * PARAMETERS: Node - Name to be made current - * Type - Type of frame being pushed - * WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Push the current scope on the scope stack, and make the - * passed Node current. - * - ***************************************************************************/ - -ACPI_STATUS -AcpiDsScopeStackPush ( - ACPI_NAMESPACE_NODE *Node, - ACPI_OBJECT_TYPE Type, - ACPI_WALK_STATE *WalkState) -{ - ACPI_GENERIC_STATE *ScopeInfo; - ACPI_GENERIC_STATE *OldScopeInfo; - - - ACPI_FUNCTION_TRACE (DsScopeStackPush); - - - if (!Node) - { - /* Invalid scope */ - - ACPI_ERROR ((AE_INFO, "Null scope parameter")); - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Make sure object type is valid */ - - if (!AcpiUtValidObjectType (Type)) - { - ACPI_WARNING ((AE_INFO, - "Invalid object type: 0x%X", Type)); - } - - /* Allocate a new scope object */ - - ScopeInfo = AcpiUtCreateGenericState (); - if (!ScopeInfo) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Init new scope object */ - - ScopeInfo->Common.DescriptorType = ACPI_DESC_TYPE_STATE_WSCOPE; - ScopeInfo->Scope.Node = Node; - ScopeInfo->Common.Value = (UINT16) Type; - - WalkState->ScopeDepth++; - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "[%.2d] Pushed scope ", (UINT32) WalkState->ScopeDepth)); - - OldScopeInfo = WalkState->ScopeInfo; - if (OldScopeInfo) - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, - "[%4.4s] (%s)", - AcpiUtGetNodeName (OldScopeInfo->Scope.Node), - AcpiUtGetTypeName (OldScopeInfo->Common.Value))); - } - else - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, - "[\\___] (%s)", "ROOT")); - } - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, - ", New scope -> [%4.4s] (%s)\n", - AcpiUtGetNodeName (ScopeInfo->Scope.Node), - AcpiUtGetTypeName (ScopeInfo->Common.Value))); - - /* Push new scope object onto stack */ - - AcpiUtPushGenericState (&WalkState->ScopeInfo, ScopeInfo); - return_ACPI_STATUS (AE_OK); -} - - -/**************************************************************************** - * - * FUNCTION: AcpiDsScopeStackPop - * - * PARAMETERS: WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Pop the scope stack once. - * - ***************************************************************************/ - -ACPI_STATUS -AcpiDsScopeStackPop ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_GENERIC_STATE *ScopeInfo; - ACPI_GENERIC_STATE *NewScopeInfo; - - - ACPI_FUNCTION_TRACE (DsScopeStackPop); - - - /* - * Pop scope info object off the stack. - */ - ScopeInfo = AcpiUtPopGenericState (&WalkState->ScopeInfo); - if (!ScopeInfo) - { - return_ACPI_STATUS (AE_STACK_UNDERFLOW); - } - - WalkState->ScopeDepth--; - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "[%.2d] Popped scope [%4.4s] (%s), New scope -> ", - (UINT32) WalkState->ScopeDepth, - AcpiUtGetNodeName (ScopeInfo->Scope.Node), - AcpiUtGetTypeName (ScopeInfo->Common.Value))); - - NewScopeInfo = WalkState->ScopeInfo; - if (NewScopeInfo) - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, - "[%4.4s] (%s)\n", - AcpiUtGetNodeName (NewScopeInfo->Scope.Node), - AcpiUtGetTypeName (NewScopeInfo->Common.Value))); - } - else - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, - "[\\___] (ROOT)\n")); - } - - AcpiUtDeleteGenericState (ScopeInfo); - return_ACPI_STATUS (AE_OK); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswstate.c b/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswstate.c deleted file mode 100644 index f0962bf53..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/dispatcher/dswstate.c +++ /dev/null @@ -1,918 +0,0 @@ -/****************************************************************************** - * - * Module Name: dswstate - Dispatcher parse tree walk management routines - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __DSWSTATE_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "acdispat.h" -#include "acnamesp.h" - -#define _COMPONENT ACPI_DISPATCHER - ACPI_MODULE_NAME ("dswstate") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiDsResultStackPush ( - ACPI_WALK_STATE *WalkState); - -static ACPI_STATUS -AcpiDsResultStackPop ( - ACPI_WALK_STATE *WalkState); - - -/******************************************************************************* - * - * FUNCTION: AcpiDsResultPop - * - * PARAMETERS: Object - Where to return the popped object - * WalkState - Current Walk state - * - * RETURN: Status - * - * DESCRIPTION: Pop an object off the top of this walk's result stack - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsResultPop ( - ACPI_OPERAND_OBJECT **Object, - ACPI_WALK_STATE *WalkState) -{ - UINT32 Index; - ACPI_GENERIC_STATE *State; - ACPI_STATUS Status; - - - ACPI_FUNCTION_NAME (DsResultPop); - - - State = WalkState->Results; - - /* Incorrect state of result stack */ - - if (State && !WalkState->ResultCount) - { - ACPI_ERROR ((AE_INFO, "No results on result stack")); - return (AE_AML_INTERNAL); - } - - if (!State && WalkState->ResultCount) - { - ACPI_ERROR ((AE_INFO, "No result state for result stack")); - return (AE_AML_INTERNAL); - } - - /* Empty result stack */ - - if (!State) - { - ACPI_ERROR ((AE_INFO, "Result stack is empty! State=%p", WalkState)); - return (AE_AML_NO_RETURN_VALUE); - } - - /* Return object of the top element and clean that top element result stack */ - - WalkState->ResultCount--; - Index = (UINT32) WalkState->ResultCount % ACPI_RESULTS_FRAME_OBJ_NUM; - - *Object = State->Results.ObjDesc [Index]; - if (!*Object) - { - ACPI_ERROR ((AE_INFO, "No result objects on result stack, State=%p", - WalkState)); - return (AE_AML_NO_RETURN_VALUE); - } - - State->Results.ObjDesc [Index] = NULL; - if (Index == 0) - { - Status = AcpiDsResultStackPop (WalkState); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Obj=%p [%s] Index=%X State=%p Num=%X\n", *Object, - AcpiUtGetObjectTypeName (*Object), - Index, WalkState, WalkState->ResultCount)); - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsResultPush - * - * PARAMETERS: Object - Where to return the popped object - * WalkState - Current Walk state - * - * RETURN: Status - * - * DESCRIPTION: Push an object onto the current result stack - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsResultPush ( - ACPI_OPERAND_OBJECT *Object, - ACPI_WALK_STATE *WalkState) -{ - ACPI_GENERIC_STATE *State; - ACPI_STATUS Status; - UINT32 Index; - - - ACPI_FUNCTION_NAME (DsResultPush); - - - if (WalkState->ResultCount > WalkState->ResultSize) - { - ACPI_ERROR ((AE_INFO, "Result stack is full")); - return (AE_AML_INTERNAL); - } - else if (WalkState->ResultCount == WalkState->ResultSize) - { - /* Extend the result stack */ - - Status = AcpiDsResultStackPush (WalkState); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR ((AE_INFO, "Failed to extend the result stack")); - return (Status); - } - } - - if (!(WalkState->ResultCount < WalkState->ResultSize)) - { - ACPI_ERROR ((AE_INFO, "No free elements in result stack")); - return (AE_AML_INTERNAL); - } - - State = WalkState->Results; - if (!State) - { - ACPI_ERROR ((AE_INFO, "No result stack frame during push")); - return (AE_AML_INTERNAL); - } - - if (!Object) - { - ACPI_ERROR ((AE_INFO, - "Null Object! Obj=%p State=%p Num=%X", - Object, WalkState, WalkState->ResultCount)); - return (AE_BAD_PARAMETER); - } - - /* Assign the address of object to the top free element of result stack */ - - Index = (UINT32) WalkState->ResultCount % ACPI_RESULTS_FRAME_OBJ_NUM; - State->Results.ObjDesc [Index] = Object; - WalkState->ResultCount++; - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p Num=%X Cur=%X\n", - Object, AcpiUtGetObjectTypeName ((ACPI_OPERAND_OBJECT *) Object), - WalkState, WalkState->ResultCount, WalkState->CurrentResult)); - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsResultStackPush - * - * PARAMETERS: WalkState - Current Walk state - * - * RETURN: Status - * - * DESCRIPTION: Push an object onto the WalkState result stack - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDsResultStackPush ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_GENERIC_STATE *State; - - - ACPI_FUNCTION_NAME (DsResultStackPush); - - - /* Check for stack overflow */ - - if (((UINT32) WalkState->ResultSize + ACPI_RESULTS_FRAME_OBJ_NUM) > - ACPI_RESULTS_OBJ_NUM_MAX) - { - ACPI_ERROR ((AE_INFO, "Result stack overflow: State=%p Num=%X", - WalkState, WalkState->ResultSize)); - return (AE_STACK_OVERFLOW); - } - - State = AcpiUtCreateGenericState (); - if (!State) - { - return (AE_NO_MEMORY); - } - - State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_RESULT; - AcpiUtPushGenericState (&WalkState->Results, State); - - /* Increase the length of the result stack by the length of frame */ - - WalkState->ResultSize += ACPI_RESULTS_FRAME_OBJ_NUM; - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Results=%p State=%p\n", - State, WalkState)); - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsResultStackPop - * - * PARAMETERS: WalkState - Current Walk state - * - * RETURN: Status - * - * DESCRIPTION: Pop an object off of the WalkState result stack - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiDsResultStackPop ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_GENERIC_STATE *State; - - - ACPI_FUNCTION_NAME (DsResultStackPop); - - - /* Check for stack underflow */ - - if (WalkState->Results == NULL) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Result stack underflow - State=%p\n", - WalkState)); - return (AE_AML_NO_OPERAND); - } - - if (WalkState->ResultSize < ACPI_RESULTS_FRAME_OBJ_NUM) - { - ACPI_ERROR ((AE_INFO, "Insufficient result stack size")); - return (AE_AML_INTERNAL); - } - - State = AcpiUtPopGenericState (&WalkState->Results); - AcpiUtDeleteGenericState (State); - - /* Decrease the length of result stack by the length of frame */ - - WalkState->ResultSize -= ACPI_RESULTS_FRAME_OBJ_NUM; - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Result=%p RemainingResults=%X State=%p\n", - State, WalkState->ResultCount, WalkState)); - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsObjStackPush - * - * PARAMETERS: Object - Object to push - * WalkState - Current Walk state - * - * RETURN: Status - * - * DESCRIPTION: Push an object onto this walk's object/operand stack - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsObjStackPush ( - void *Object, - ACPI_WALK_STATE *WalkState) -{ - ACPI_FUNCTION_NAME (DsObjStackPush); - - - /* Check for stack overflow */ - - if (WalkState->NumOperands >= ACPI_OBJ_NUM_OPERANDS) - { - ACPI_ERROR ((AE_INFO, - "Object stack overflow! Obj=%p State=%p #Ops=%X", - Object, WalkState, WalkState->NumOperands)); - return (AE_STACK_OVERFLOW); - } - - /* Put the object onto the stack */ - - WalkState->Operands [WalkState->OperandIndex] = Object; - WalkState->NumOperands++; - - /* For the usual order of filling the operand stack */ - - WalkState->OperandIndex++; - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p #Ops=%X\n", - Object, AcpiUtGetObjectTypeName ((ACPI_OPERAND_OBJECT *) Object), - WalkState, WalkState->NumOperands)); - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsObjStackPop - * - * PARAMETERS: PopCount - Number of objects/entries to pop - * WalkState - Current Walk state - * - * RETURN: Status - * - * DESCRIPTION: Pop this walk's object stack. Objects on the stack are NOT - * deleted by this routine. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsObjStackPop ( - UINT32 PopCount, - ACPI_WALK_STATE *WalkState) -{ - UINT32 i; - - - ACPI_FUNCTION_NAME (DsObjStackPop); - - - for (i = 0; i < PopCount; i++) - { - /* Check for stack underflow */ - - if (WalkState->NumOperands == 0) - { - ACPI_ERROR ((AE_INFO, - "Object stack underflow! Count=%X State=%p #Ops=%X", - PopCount, WalkState, WalkState->NumOperands)); - return (AE_STACK_UNDERFLOW); - } - - /* Just set the stack entry to null */ - - WalkState->NumOperands--; - WalkState->Operands [WalkState->NumOperands] = NULL; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Count=%X State=%p #Ops=%X\n", - PopCount, WalkState, WalkState->NumOperands)); - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsObjStackPopAndDelete - * - * PARAMETERS: PopCount - Number of objects/entries to pop - * WalkState - Current Walk state - * - * RETURN: Status - * - * DESCRIPTION: Pop this walk's object stack and delete each object that is - * popped off. - * - ******************************************************************************/ - -void -AcpiDsObjStackPopAndDelete ( - UINT32 PopCount, - ACPI_WALK_STATE *WalkState) -{ - INT32 i; - ACPI_OPERAND_OBJECT *ObjDesc; - - - ACPI_FUNCTION_NAME (DsObjStackPopAndDelete); - - - if (PopCount == 0) - { - return; - } - - for (i = (INT32) PopCount - 1; i >= 0; i--) - { - if (WalkState->NumOperands == 0) - { - return; - } - - /* Pop the stack and delete an object if present in this stack entry */ - - WalkState->NumOperands--; - ObjDesc = WalkState->Operands [i]; - if (ObjDesc) - { - AcpiUtRemoveReference (WalkState->Operands [i]); - WalkState->Operands [i] = NULL; - } - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Count=%X State=%p #Ops=%X\n", - PopCount, WalkState, WalkState->NumOperands)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsGetCurrentWalkState - * - * PARAMETERS: Thread - Get current active state for this Thread - * - * RETURN: Pointer to the current walk state - * - * DESCRIPTION: Get the walk state that is at the head of the list (the "current" - * walk state.) - * - ******************************************************************************/ - -ACPI_WALK_STATE * -AcpiDsGetCurrentWalkState ( - ACPI_THREAD_STATE *Thread) -{ - ACPI_FUNCTION_NAME (DsGetCurrentWalkState); - - - if (!Thread) - { - return (NULL); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Current WalkState %p\n", - Thread->WalkStateList)); - - return (Thread->WalkStateList); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsPushWalkState - * - * PARAMETERS: WalkState - State to push - * Thread - Thread state object - * - * RETURN: None - * - * DESCRIPTION: Place the Thread state at the head of the state list - * - ******************************************************************************/ - -void -AcpiDsPushWalkState ( - ACPI_WALK_STATE *WalkState, - ACPI_THREAD_STATE *Thread) -{ - ACPI_FUNCTION_TRACE (DsPushWalkState); - - - WalkState->Next = Thread->WalkStateList; - Thread->WalkStateList = WalkState; - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsPopWalkState - * - * PARAMETERS: Thread - Current thread state - * - * RETURN: A WalkState object popped from the thread's stack - * - * DESCRIPTION: Remove and return the walkstate object that is at the head of - * the walk stack for the given walk list. NULL indicates that - * the list is empty. - * - ******************************************************************************/ - -ACPI_WALK_STATE * -AcpiDsPopWalkState ( - ACPI_THREAD_STATE *Thread) -{ - ACPI_WALK_STATE *WalkState; - - - ACPI_FUNCTION_TRACE (DsPopWalkState); - - - WalkState = Thread->WalkStateList; - - if (WalkState) - { - /* Next walk state becomes the current walk state */ - - Thread->WalkStateList = WalkState->Next; - - /* - * Don't clear the NEXT field, this serves as an indicator - * that there is a parent WALK STATE - * Do Not: WalkState->Next = NULL; - */ - } - - return_PTR (WalkState); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsCreateWalkState - * - * PARAMETERS: OwnerId - ID for object creation - * Origin - Starting point for this walk - * MethodDesc - Method object - * Thread - Current thread state - * - * RETURN: Pointer to the new walk state. - * - * DESCRIPTION: Allocate and initialize a new walk state. The current walk - * state is set to this new state. - * - ******************************************************************************/ - -ACPI_WALK_STATE * -AcpiDsCreateWalkState ( - ACPI_OWNER_ID OwnerId, - ACPI_PARSE_OBJECT *Origin, - ACPI_OPERAND_OBJECT *MethodDesc, - ACPI_THREAD_STATE *Thread) -{ - ACPI_WALK_STATE *WalkState; - - - ACPI_FUNCTION_TRACE (DsCreateWalkState); - - - WalkState = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_WALK_STATE)); - if (!WalkState) - { - return_PTR (NULL); - } - - WalkState->DescriptorType = ACPI_DESC_TYPE_WALK; - WalkState->MethodDesc = MethodDesc; - WalkState->OwnerId = OwnerId; - WalkState->Origin = Origin; - WalkState->Thread = Thread; - - WalkState->ParserState.StartOp = Origin; - - /* Init the method args/local */ - -#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY)) - AcpiDsMethodDataInit (WalkState); -#endif - - /* Put the new state at the head of the walk list */ - - if (Thread) - { - AcpiDsPushWalkState (WalkState, Thread); - } - - return_PTR (WalkState); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsInitAmlWalk - * - * PARAMETERS: WalkState - New state to be initialized - * Op - Current parse op - * MethodNode - Control method NS node, if any - * AmlStart - Start of AML - * AmlLength - Length of AML - * Info - Method info block (params, etc.) - * PassNumber - 1, 2, or 3 - * - * RETURN: Status - * - * DESCRIPTION: Initialize a walk state for a pass 1 or 2 parse tree walk - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDsInitAmlWalk ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op, - ACPI_NAMESPACE_NODE *MethodNode, - UINT8 *AmlStart, - UINT32 AmlLength, - ACPI_EVALUATE_INFO *Info, - UINT8 PassNumber) -{ - ACPI_STATUS Status; - ACPI_PARSE_STATE *ParserState = &WalkState->ParserState; - ACPI_PARSE_OBJECT *ExtraOp; - - - ACPI_FUNCTION_TRACE (DsInitAmlWalk); - - - WalkState->ParserState.Aml = - WalkState->ParserState.AmlStart = AmlStart; - WalkState->ParserState.AmlEnd = - WalkState->ParserState.PkgEnd = AmlStart + AmlLength; - - /* The NextOp of the NextWalk will be the beginning of the method */ - - WalkState->NextOp = NULL; - WalkState->PassNumber = PassNumber; - - if (Info) - { - WalkState->Params = Info->Parameters; - WalkState->CallerReturnDesc = &Info->ReturnObject; - } - - Status = AcpiPsInitScope (&WalkState->ParserState, Op); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - if (MethodNode) - { - WalkState->ParserState.StartNode = MethodNode; - WalkState->WalkType = ACPI_WALK_METHOD; - WalkState->MethodNode = MethodNode; - WalkState->MethodDesc = AcpiNsGetAttachedObject (MethodNode); - - /* Push start scope on scope stack and make it current */ - - Status = AcpiDsScopeStackPush (MethodNode, ACPI_TYPE_METHOD, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Init the method arguments */ - - Status = AcpiDsMethodDataInitArgs (WalkState->Params, - ACPI_METHOD_NUM_ARGS, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - else - { - /* - * Setup the current scope. - * Find a Named Op that has a namespace node associated with it. - * search upwards from this Op. Current scope is the first - * Op with a namespace node. - */ - ExtraOp = ParserState->StartOp; - while (ExtraOp && !ExtraOp->Common.Node) - { - ExtraOp = ExtraOp->Common.Parent; - } - - if (!ExtraOp) - { - ParserState->StartNode = NULL; - } - else - { - ParserState->StartNode = ExtraOp->Common.Node; - } - - if (ParserState->StartNode) - { - /* Push start scope on scope stack and make it current */ - - Status = AcpiDsScopeStackPush (ParserState->StartNode, - ParserState->StartNode->Type, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - } - - Status = AcpiDsInitCallbacks (WalkState, PassNumber); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDsDeleteWalkState - * - * PARAMETERS: WalkState - State to delete - * - * RETURN: Status - * - * DESCRIPTION: Delete a walk state including all internal data structures - * - ******************************************************************************/ - -void -AcpiDsDeleteWalkState ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_GENERIC_STATE *State; - - - ACPI_FUNCTION_TRACE_PTR (DsDeleteWalkState, WalkState); - - - if (!WalkState) - { - return; - } - - if (WalkState->DescriptorType != ACPI_DESC_TYPE_WALK) - { - ACPI_ERROR ((AE_INFO, "%p is not a valid walk state", - WalkState)); - return; - } - - /* There should not be any open scopes */ - - if (WalkState->ParserState.Scope) - { - ACPI_ERROR ((AE_INFO, "%p walk still has a scope list", - WalkState)); - AcpiPsCleanupScope (&WalkState->ParserState); - } - - /* Always must free any linked control states */ - - while (WalkState->ControlState) - { - State = WalkState->ControlState; - WalkState->ControlState = State->Common.Next; - - AcpiUtDeleteGenericState (State); - } - - /* Always must free any linked parse states */ - - while (WalkState->ScopeInfo) - { - State = WalkState->ScopeInfo; - WalkState->ScopeInfo = State->Common.Next; - - AcpiUtDeleteGenericState (State); - } - - /* Always must free any stacked result states */ - - while (WalkState->Results) - { - State = WalkState->Results; - WalkState->Results = State->Common.Next; - - AcpiUtDeleteGenericState (State); - } - - ACPI_FREE (WalkState); - return_VOID; -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/events/evevent.c b/l4/pkg/acpica/lib-acpi/src/acpica/events/evevent.c deleted file mode 100644 index 16f40271f..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/events/evevent.c +++ /dev/null @@ -1,430 +0,0 @@ -/****************************************************************************** - * - * Module Name: evevent - Fixed Event handling and dispatch - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#include "acpi.h" -#include "accommon.h" -#include "acevents.h" - -#define _COMPONENT ACPI_EVENTS - ACPI_MODULE_NAME ("evevent") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiEvFixedEventInitialize ( - void); - -static UINT32 -AcpiEvFixedEventDispatch ( - UINT32 Event); - - -/******************************************************************************* - * - * FUNCTION: AcpiEvInitializeEvents - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Initialize global data structures for ACPI events (Fixed, GPE) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvInitializeEvents ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvInitializeEvents); - - - /* - * Initialize the Fixed and General Purpose Events. This is done prior to - * enabling SCIs to prevent interrupts from occurring before the handlers - * are installed. - */ - Status = AcpiEvFixedEventInitialize (); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Unable to initialize fixed events")); - return_ACPI_STATUS (Status); - } - - Status = AcpiEvGpeInitialize (); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Unable to initialize general purpose events")); - return_ACPI_STATUS (Status); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvInstallFadtGpes - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Completes initialization of the FADT-defined GPE blocks - * (0 and 1). This causes the _PRW methods to be run, so the HW - * must be fully initialized at this point, including global lock - * support. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvInstallFadtGpes ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvInstallFadtGpes); - - - /* Namespace must be locked */ - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* FADT GPE Block 0 */ - - (void) AcpiEvInitializeGpeBlock ( - AcpiGbl_FadtGpeDevice, AcpiGbl_GpeFadtBlocks[0]); - - /* FADT GPE Block 1 */ - - (void) AcpiEvInitializeGpeBlock ( - AcpiGbl_FadtGpeDevice, AcpiGbl_GpeFadtBlocks[1]); - - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvInstallXruptHandlers - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Install interrupt handlers for the SCI and Global Lock - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvInstallXruptHandlers ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvInstallXruptHandlers); - - - /* Install the SCI handler */ - - Status = AcpiEvInstallSciHandler (); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Unable to install System Control Interrupt handler")); - return_ACPI_STATUS (Status); - } - - /* Install the handler for the Global Lock */ - - Status = AcpiEvInitGlobalLockHandler (); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Unable to initialize Global Lock handler")); - return_ACPI_STATUS (Status); - } - - AcpiGbl_EventsInitialized = TRUE; - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvFixedEventInitialize - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Install the fixed event handlers and disable all fixed events. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiEvFixedEventInitialize ( - void) -{ - UINT32 i; - ACPI_STATUS Status; - - - /* - * Initialize the structure that keeps track of fixed event handlers and - * enable the fixed events. - */ - for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) - { - AcpiGbl_FixedEventHandlers[i].Handler = NULL; - AcpiGbl_FixedEventHandlers[i].Context = NULL; - - /* Disable the fixed event */ - - if (AcpiGbl_FixedEventInfo[i].EnableRegisterId != 0xFF) - { - Status = AcpiWriteBitRegister ( - AcpiGbl_FixedEventInfo[i].EnableRegisterId, - ACPI_DISABLE_EVENT); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvFixedEventDetect - * - * PARAMETERS: None - * - * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED - * - * DESCRIPTION: Checks the PM status register for active fixed events - * - ******************************************************************************/ - -UINT32 -AcpiEvFixedEventDetect ( - void) -{ - UINT32 IntStatus = ACPI_INTERRUPT_NOT_HANDLED; - UINT32 FixedStatus; - UINT32 FixedEnable; - UINT32 i; - - - ACPI_FUNCTION_NAME (EvFixedEventDetect); - - - /* - * Read the fixed feature status and enable registers, as all the cases - * depend on their values. Ignore errors here. - */ - (void) AcpiHwRegisterRead (ACPI_REGISTER_PM1_STATUS, &FixedStatus); - (void) AcpiHwRegisterRead (ACPI_REGISTER_PM1_ENABLE, &FixedEnable); - - ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS, - "Fixed Event Block: Enable %08X Status %08X\n", - FixedEnable, FixedStatus)); - - /* - * Check for all possible Fixed Events and dispatch those that are active - */ - for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) - { - /* Both the status and enable bits must be on for this event */ - - if ((FixedStatus & AcpiGbl_FixedEventInfo[i].StatusBitMask) && - (FixedEnable & AcpiGbl_FixedEventInfo[i].EnableBitMask)) - { - /* Found an active (signalled) event */ - - AcpiFixedEventCount[i]++; - IntStatus |= AcpiEvFixedEventDispatch (i); - } - } - - return (IntStatus); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvFixedEventDispatch - * - * PARAMETERS: Event - Event type - * - * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED - * - * DESCRIPTION: Clears the status bit for the requested event, calls the - * handler that previously registered for the event. - * - ******************************************************************************/ - -static UINT32 -AcpiEvFixedEventDispatch ( - UINT32 Event) -{ - - ACPI_FUNCTION_ENTRY (); - - - /* Clear the status bit */ - - (void) AcpiWriteBitRegister ( - AcpiGbl_FixedEventInfo[Event].StatusRegisterId, - ACPI_CLEAR_STATUS); - - /* - * Make sure we've got a handler. If not, report an error. The event is - * disabled to prevent further interrupts. - */ - if (NULL == AcpiGbl_FixedEventHandlers[Event].Handler) - { - (void) AcpiWriteBitRegister ( - AcpiGbl_FixedEventInfo[Event].EnableRegisterId, - ACPI_DISABLE_EVENT); - - ACPI_ERROR ((AE_INFO, - "No installed handler for fixed event [%08X]", - Event)); - - return (ACPI_INTERRUPT_NOT_HANDLED); - } - - /* Invoke the Fixed Event handler */ - - return ((AcpiGbl_FixedEventHandlers[Event].Handler)( - AcpiGbl_FixedEventHandlers[Event].Context)); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/events/evgpe.c b/l4/pkg/acpica/lib-acpi/src/acpica/events/evgpe.c deleted file mode 100644 index 17738b384..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/events/evgpe.c +++ /dev/null @@ -1,897 +0,0 @@ -/****************************************************************************** - * - * Module Name: evgpe - General Purpose Event handling and dispatch - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#include "acpi.h" -#include "accommon.h" -#include "acevents.h" -#include "acnamesp.h" - -#define _COMPONENT ACPI_EVENTS - ACPI_MODULE_NAME ("evgpe") - -/* Local prototypes */ - -static void ACPI_SYSTEM_XFACE -AcpiEvAsynchExecuteGpeMethod ( - void *Context); - -static void ACPI_SYSTEM_XFACE -AcpiEvAsynchEnableGpe ( - void *Context); - - -/******************************************************************************* - * - * FUNCTION: AcpiEvSetGpeType - * - * PARAMETERS: GpeEventInfo - GPE to set - * Type - New type - * - * RETURN: Status - * - * DESCRIPTION: Sets the new type for the GPE (wake, run, or wake/run) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvSetGpeType ( - ACPI_GPE_EVENT_INFO *GpeEventInfo, - UINT8 Type) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvSetGpeType); - - - /* Validate type and update register enable masks */ - - switch (Type) - { - case ACPI_GPE_TYPE_WAKE: - case ACPI_GPE_TYPE_RUNTIME: - case ACPI_GPE_TYPE_WAKE_RUN: - break; - - default: - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Disable the GPE if currently enabled */ - - Status = AcpiEvDisableGpe (GpeEventInfo); - - /* Clear the type bits and insert the new Type */ - - GpeEventInfo->Flags &= ~ACPI_GPE_TYPE_MASK; - GpeEventInfo->Flags |= Type; - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvUpdateGpeEnableMasks - * - * PARAMETERS: GpeEventInfo - GPE to update - * Type - What to do: ACPI_GPE_DISABLE or - * ACPI_GPE_ENABLE - * - * RETURN: Status - * - * DESCRIPTION: Updates GPE register enable masks based on the GPE type - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvUpdateGpeEnableMasks ( - ACPI_GPE_EVENT_INFO *GpeEventInfo, - UINT8 Type) -{ - ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; - UINT8 RegisterBit; - - - ACPI_FUNCTION_TRACE (EvUpdateGpeEnableMasks); - - - GpeRegisterInfo = GpeEventInfo->RegisterInfo; - if (!GpeRegisterInfo) - { - return_ACPI_STATUS (AE_NOT_EXIST); - } - - RegisterBit = (UINT8) - (1 << (GpeEventInfo->GpeNumber - GpeRegisterInfo->BaseGpeNumber)); - - /* 1) Disable case. Simply clear all enable bits */ - - if (Type == ACPI_GPE_DISABLE) - { - ACPI_CLEAR_BIT (GpeRegisterInfo->EnableForWake, RegisterBit); - ACPI_CLEAR_BIT (GpeRegisterInfo->EnableForRun, RegisterBit); - return_ACPI_STATUS (AE_OK); - } - - /* 2) Enable case. Set/Clear the appropriate enable bits */ - - switch (GpeEventInfo->Flags & ACPI_GPE_TYPE_MASK) - { - case ACPI_GPE_TYPE_WAKE: - ACPI_SET_BIT (GpeRegisterInfo->EnableForWake, RegisterBit); - ACPI_CLEAR_BIT (GpeRegisterInfo->EnableForRun, RegisterBit); - break; - - case ACPI_GPE_TYPE_RUNTIME: - ACPI_CLEAR_BIT (GpeRegisterInfo->EnableForWake, RegisterBit); - ACPI_SET_BIT (GpeRegisterInfo->EnableForRun, RegisterBit); - break; - - case ACPI_GPE_TYPE_WAKE_RUN: - ACPI_SET_BIT (GpeRegisterInfo->EnableForWake, RegisterBit); - ACPI_SET_BIT (GpeRegisterInfo->EnableForRun, RegisterBit); - break; - - default: - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvEnableGpe - * - * PARAMETERS: GpeEventInfo - GPE to enable - * WriteToHardware - Enable now, or just mark data structs - * (WAKE GPEs should be deferred) - * - * RETURN: Status - * - * DESCRIPTION: Enable a GPE based on the GPE type - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvEnableGpe ( - ACPI_GPE_EVENT_INFO *GpeEventInfo, - BOOLEAN WriteToHardware) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvEnableGpe); - - - /* Make sure HW enable masks are updated */ - - Status = AcpiEvUpdateGpeEnableMasks (GpeEventInfo, ACPI_GPE_ENABLE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Mark wake-enabled or HW enable, or both */ - - switch (GpeEventInfo->Flags & ACPI_GPE_TYPE_MASK) - { - case ACPI_GPE_TYPE_WAKE: - - ACPI_SET_BIT (GpeEventInfo->Flags, ACPI_GPE_WAKE_ENABLED); - break; - - case ACPI_GPE_TYPE_WAKE_RUN: - - ACPI_SET_BIT (GpeEventInfo->Flags, ACPI_GPE_WAKE_ENABLED); - - /*lint -fallthrough */ - - case ACPI_GPE_TYPE_RUNTIME: - - ACPI_SET_BIT (GpeEventInfo->Flags, ACPI_GPE_RUN_ENABLED); - - if (WriteToHardware) - { - /* Clear the GPE (of stale events), then enable it */ - - Status = AcpiHwClearGpe (GpeEventInfo); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Enable the requested runtime GPE */ - - Status = AcpiHwWriteGpeEnableReg (GpeEventInfo); - } - break; - - default: - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvDisableGpe - * - * PARAMETERS: GpeEventInfo - GPE to disable - * - * RETURN: Status - * - * DESCRIPTION: Disable a GPE based on the GPE type - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvDisableGpe ( - ACPI_GPE_EVENT_INFO *GpeEventInfo) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvDisableGpe); - - - /* - * Note: Always disable the GPE, even if we think that that it is already - * disabled. It is possible that the AML or some other code has enabled - * the GPE behind our back. - */ - - /* Make sure HW enable masks are updated */ - - Status = AcpiEvUpdateGpeEnableMasks (GpeEventInfo, ACPI_GPE_DISABLE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Clear the appropriate enabled flags for this GPE */ - - switch (GpeEventInfo->Flags & ACPI_GPE_TYPE_MASK) - { - case ACPI_GPE_TYPE_WAKE: - - ACPI_CLEAR_BIT (GpeEventInfo->Flags, ACPI_GPE_WAKE_ENABLED); - break; - - case ACPI_GPE_TYPE_WAKE_RUN: - - ACPI_CLEAR_BIT (GpeEventInfo->Flags, ACPI_GPE_WAKE_ENABLED); - - /*lint -fallthrough */ - - case ACPI_GPE_TYPE_RUNTIME: - - /* Disable the requested runtime GPE */ - - ACPI_CLEAR_BIT (GpeEventInfo->Flags, ACPI_GPE_RUN_ENABLED); - break; - - default: - break; - } - - /* - * Always H/W disable this GPE, even if we don't know the GPE type. - * Simply clear the enable bit for this particular GPE, but do not - * write out the current GPE enable mask since this may inadvertently - * enable GPEs too early. An example is a rogue GPE that has arrived - * during ACPICA initialization - possibly because AML or other code - * has enabled the GPE. - */ - Status = AcpiHwLowDisableGpe (GpeEventInfo); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvGetGpeEventInfo - * - * PARAMETERS: GpeDevice - Device node. NULL for GPE0/GPE1 - * GpeNumber - Raw GPE number - * - * RETURN: A GPE EventInfo struct. NULL if not a valid GPE - * - * DESCRIPTION: Returns the EventInfo struct associated with this GPE. - * Validates the GpeBlock and the GpeNumber - * - * Should be called only when the GPE lists are semaphore locked - * and not subject to change. - * - ******************************************************************************/ - -ACPI_GPE_EVENT_INFO * -AcpiEvGetGpeEventInfo ( - ACPI_HANDLE GpeDevice, - UINT32 GpeNumber) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_GPE_BLOCK_INFO *GpeBlock; - UINT32 i; - - - ACPI_FUNCTION_ENTRY (); - - - /* A NULL GpeBlock means use the FADT-defined GPE block(s) */ - - if (!GpeDevice) - { - /* Examine GPE Block 0 and 1 (These blocks are permanent) */ - - for (i = 0; i < ACPI_MAX_GPE_BLOCKS; i++) - { - GpeBlock = AcpiGbl_GpeFadtBlocks[i]; - if (GpeBlock) - { - if ((GpeNumber >= GpeBlock->BlockBaseNumber) && - (GpeNumber < GpeBlock->BlockBaseNumber + - (GpeBlock->RegisterCount * 8))) - { - return (&GpeBlock->EventInfo[GpeNumber - - GpeBlock->BlockBaseNumber]); - } - } - } - - /* The GpeNumber was not in the range of either FADT GPE block */ - - return (NULL); - } - - /* A Non-NULL GpeDevice means this is a GPE Block Device */ - - ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) GpeDevice); - if (!ObjDesc || - !ObjDesc->Device.GpeBlock) - { - return (NULL); - } - - GpeBlock = ObjDesc->Device.GpeBlock; - - if ((GpeNumber >= GpeBlock->BlockBaseNumber) && - (GpeNumber < GpeBlock->BlockBaseNumber + (GpeBlock->RegisterCount * 8))) - { - return (&GpeBlock->EventInfo[GpeNumber - GpeBlock->BlockBaseNumber]); - } - - return (NULL); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvGpeDetect - * - * PARAMETERS: GpeXruptList - Interrupt block for this interrupt. - * Can have multiple GPE blocks attached. - * - * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED - * - * DESCRIPTION: Detect if any GP events have occurred. This function is - * executed at interrupt level. - * - ******************************************************************************/ - -UINT32 -AcpiEvGpeDetect ( - ACPI_GPE_XRUPT_INFO *GpeXruptList) -{ - ACPI_STATUS Status; - ACPI_GPE_BLOCK_INFO *GpeBlock; - ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; - UINT32 IntStatus = ACPI_INTERRUPT_NOT_HANDLED; - UINT8 EnabledStatusByte; - UINT32 StatusReg; - UINT32 EnableReg; - ACPI_CPU_FLAGS Flags; - UINT32 i; - UINT32 j; - - - ACPI_FUNCTION_NAME (EvGpeDetect); - - /* Check for the case where there are no GPEs */ - - if (!GpeXruptList) - { - return (IntStatus); - } - - /* - * We need to obtain the GPE lock for both the data structs and registers - * Note: Not necessary to obtain the hardware lock, since the GPE - * registers are owned by the GpeLock. - */ - Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); - - /* Examine all GPE blocks attached to this interrupt level */ - - GpeBlock = GpeXruptList->GpeBlockListHead; - while (GpeBlock) - { - /* - * Read all of the 8-bit GPE status and enable registers in this GPE - * block, saving all of them. Find all currently active GP events. - */ - for (i = 0; i < GpeBlock->RegisterCount; i++) - { - /* Get the next status/enable pair */ - - GpeRegisterInfo = &GpeBlock->RegisterInfo[i]; - - /* Read the Status Register */ - - Status = AcpiHwRead (&StatusReg, &GpeRegisterInfo->StatusAddress); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - - /* Read the Enable Register */ - - Status = AcpiHwRead (&EnableReg, &GpeRegisterInfo->EnableAddress); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS, - "Read GPE Register at GPE%X: Status=%02X, Enable=%02X\n", - GpeRegisterInfo->BaseGpeNumber, StatusReg, EnableReg)); - - /* Check if there is anything active at all in this register */ - - EnabledStatusByte = (UINT8) (StatusReg & EnableReg); - if (!EnabledStatusByte) - { - /* No active GPEs in this register, move on */ - - continue; - } - - /* Now look at the individual GPEs in this byte register */ - - for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) - { - /* Examine one GPE bit */ - - if (EnabledStatusByte & (1 << j)) - { - /* - * Found an active GPE. Dispatch the event to a handler - * or method. - */ - IntStatus |= AcpiEvGpeDispatch ( - &GpeBlock->EventInfo[((ACPI_SIZE) i * - ACPI_GPE_REGISTER_WIDTH) + j], - j + GpeRegisterInfo->BaseGpeNumber); - } - } - } - - GpeBlock = GpeBlock->Next; - } - -UnlockAndExit: - - AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); - return (IntStatus); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvAsynchExecuteGpeMethod - * - * PARAMETERS: Context (GpeEventInfo) - Info for this GPE - * - * RETURN: None - * - * DESCRIPTION: Perform the actual execution of a GPE control method. This - * function is called from an invocation of AcpiOsExecute and - * therefore does NOT execute at interrupt level - so that - * the control method itself is not executed in the context of - * an interrupt handler. - * - ******************************************************************************/ - -static void ACPI_SYSTEM_XFACE -AcpiEvAsynchExecuteGpeMethod ( - void *Context) -{ - ACPI_GPE_EVENT_INFO *GpeEventInfo = Context; - ACPI_STATUS Status; - ACPI_GPE_EVENT_INFO *LocalGpeEventInfo; - ACPI_EVALUATE_INFO *Info; - - - ACPI_FUNCTION_TRACE (EvAsynchExecuteGpeMethod); - - - /* Allocate a local GPE block */ - - LocalGpeEventInfo = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_GPE_EVENT_INFO)); - if (!LocalGpeEventInfo) - { - ACPI_EXCEPTION ((AE_INFO, AE_NO_MEMORY, - "while handling a GPE")); - return_VOID; - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_VOID; - } - - /* Must revalidate the GpeNumber/GpeBlock */ - - if (!AcpiEvValidGpeEvent (GpeEventInfo)) - { - Status = AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - return_VOID; - } - - /* Set the GPE flags for return to enabled state */ - - (void) AcpiEvEnableGpe (GpeEventInfo, FALSE); - - /* - * Take a snapshot of the GPE info for this level - we copy the info to - * prevent a race condition with RemoveHandler/RemoveBlock. - */ - ACPI_MEMCPY (LocalGpeEventInfo, GpeEventInfo, - sizeof (ACPI_GPE_EVENT_INFO)); - - Status = AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_VOID; - } - - /* - * Must check for control method type dispatch one more time to avoid a - * race with EvGpeInstallHandler - */ - if ((LocalGpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) == - ACPI_GPE_DISPATCH_METHOD) - { - /* Allocate the evaluation information block */ - - Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); - if (!Info) - { - Status = AE_NO_MEMORY; - } - else - { - /* - * Invoke the GPE Method (_Lxx, _Exx) i.e., evaluate the _Lxx/_Exx - * control method that corresponds to this GPE - */ - Info->PrefixNode = LocalGpeEventInfo->Dispatch.MethodNode; - Info->Flags = ACPI_IGNORE_RETURN_VALUE; - - Status = AcpiNsEvaluate (Info); - ACPI_FREE (Info); - } - - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "while evaluating GPE method [%4.4s]", - AcpiUtGetNodeName (LocalGpeEventInfo->Dispatch.MethodNode))); - } - } - - /* Defer enabling of GPE until all notify handlers are done */ - - Status = AcpiOsExecute (OSL_NOTIFY_HANDLER, - AcpiEvAsynchEnableGpe, LocalGpeEventInfo); - if (ACPI_FAILURE (Status)) - { - ACPI_FREE (LocalGpeEventInfo); - } - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvAsynchEnableGpe - * - * PARAMETERS: Context (GpeEventInfo) - Info for this GPE - * - * RETURN: None - * - * DESCRIPTION: Asynchronous clear/enable for GPE. This allows the GPE to - * complete (i.e., finish execution of Notify) - * - ******************************************************************************/ - -static void ACPI_SYSTEM_XFACE -AcpiEvAsynchEnableGpe ( - void *Context) -{ - ACPI_GPE_EVENT_INFO *GpeEventInfo = Context; - ACPI_STATUS Status; - - - if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == - ACPI_GPE_LEVEL_TRIGGERED) - { - /* - * GPE is level-triggered, we clear the GPE status bit after handling - * the event. - */ - Status = AcpiHwClearGpe (GpeEventInfo); - if (ACPI_FAILURE (Status)) - { - goto Exit; - } - } - - /* Enable this GPE */ - - (void) AcpiHwWriteGpeEnableReg (GpeEventInfo); - -Exit: - ACPI_FREE (GpeEventInfo); - return; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvGpeDispatch - * - * PARAMETERS: GpeEventInfo - Info for this GPE - * GpeNumber - Number relative to the parent GPE block - * - * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED - * - * DESCRIPTION: Dispatch a General Purpose Event to either a function (e.g. EC) - * or method (e.g. _Lxx/_Exx) handler. - * - * This function executes at interrupt level. - * - ******************************************************************************/ - -UINT32 -AcpiEvGpeDispatch ( - ACPI_GPE_EVENT_INFO *GpeEventInfo, - UINT32 GpeNumber) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvGpeDispatch); - - - AcpiGpeCount++; - - /* - * If edge-triggered, clear the GPE status bit now. Note that - * level-triggered events are cleared after the GPE is serviced. - */ - if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == - ACPI_GPE_EDGE_TRIGGERED) - { - Status = AcpiHwClearGpe (GpeEventInfo); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Unable to clear GPE[%2X]", GpeNumber)); - return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED); - } - } - - /* - * Dispatch the GPE to either an installed handler, or the control method - * associated with this GPE (_Lxx or _Exx). If a handler exists, we invoke - * it and do not attempt to run the method. If there is neither a handler - * nor a method, we disable this GPE to prevent further such pointless - * events from firing. - */ - switch (GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) - { - case ACPI_GPE_DISPATCH_HANDLER: - - /* - * Invoke the installed handler (at interrupt level) - * Ignore return status for now. - * TBD: leave GPE disabled on error? - */ - (void) GpeEventInfo->Dispatch.Handler->Address ( - GpeEventInfo->Dispatch.Handler->Context); - - /* It is now safe to clear level-triggered events. */ - - if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == - ACPI_GPE_LEVEL_TRIGGERED) - { - Status = AcpiHwClearGpe (GpeEventInfo); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Unable to clear GPE[%2X]", GpeNumber)); - return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED); - } - } - break; - - case ACPI_GPE_DISPATCH_METHOD: - - /* - * Disable the GPE, so it doesn't keep firing before the method has a - * chance to run (it runs asynchronously with interrupts enabled). - */ - Status = AcpiEvDisableGpe (GpeEventInfo); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Unable to disable GPE[%2X]", GpeNumber)); - return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED); - } - - /* - * Execute the method associated with the GPE - * NOTE: Level-triggered GPEs are cleared after the method completes. - */ - Status = AcpiOsExecute (OSL_GPE_HANDLER, - AcpiEvAsynchExecuteGpeMethod, GpeEventInfo); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Unable to queue handler for GPE[%2X] - event disabled", - GpeNumber)); - } - break; - - default: - - /* No handler or method to run! */ - - ACPI_ERROR ((AE_INFO, - "No handler or method for GPE[%2X], disabling event", - GpeNumber)); - - /* - * Disable the GPE. The GPE will remain disabled until the ACPICA - * Core Subsystem is restarted, or a handler is installed. - */ - Status = AcpiEvDisableGpe (GpeEventInfo); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Unable to disable GPE[%2X]", GpeNumber)); - return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED); - } - break; - } - - return_UINT32 (ACPI_INTERRUPT_HANDLED); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/events/evgpeblk.c b/l4/pkg/acpica/lib-acpi/src/acpica/events/evgpeblk.c deleted file mode 100644 index c86f80aa7..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/events/evgpeblk.c +++ /dev/null @@ -1,1402 +0,0 @@ -/****************************************************************************** - * - * Module Name: evgpeblk - GPE block creation and initialization. - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#include "acpi.h" -#include "accommon.h" -#include "acevents.h" -#include "acnamesp.h" - -#define _COMPONENT ACPI_EVENTS - ACPI_MODULE_NAME ("evgpeblk") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiEvSaveMethodInfo ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *ObjDesc, - void **ReturnValue); - -static ACPI_STATUS -AcpiEvMatchPrwAndGpe ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Info, - void **ReturnValue); - -static ACPI_GPE_XRUPT_INFO * -AcpiEvGetGpeXruptBlock ( - UINT32 InterruptNumber); - -static ACPI_STATUS -AcpiEvDeleteGpeXrupt ( - ACPI_GPE_XRUPT_INFO *GpeXrupt); - -static ACPI_STATUS -AcpiEvInstallGpeBlock ( - ACPI_GPE_BLOCK_INFO *GpeBlock, - UINT32 InterruptNumber); - -static ACPI_STATUS -AcpiEvCreateGpeInfoBlocks ( - ACPI_GPE_BLOCK_INFO *GpeBlock); - - -/******************************************************************************* - * - * FUNCTION: AcpiEvValidGpeEvent - * - * PARAMETERS: GpeEventInfo - Info for this GPE - * - * RETURN: TRUE if the GpeEvent is valid - * - * DESCRIPTION: Validate a GPE event. DO NOT CALL FROM INTERRUPT LEVEL. - * Should be called only when the GPE lists are semaphore locked - * and not subject to change. - * - ******************************************************************************/ - -BOOLEAN -AcpiEvValidGpeEvent ( - ACPI_GPE_EVENT_INFO *GpeEventInfo) -{ - ACPI_GPE_XRUPT_INFO *GpeXruptBlock; - ACPI_GPE_BLOCK_INFO *GpeBlock; - - - ACPI_FUNCTION_ENTRY (); - - - /* No need for spin lock since we are not changing any list elements */ - - /* Walk the GPE interrupt levels */ - - GpeXruptBlock = AcpiGbl_GpeXruptListHead; - while (GpeXruptBlock) - { - GpeBlock = GpeXruptBlock->GpeBlockListHead; - - /* Walk the GPE blocks on this interrupt level */ - - while (GpeBlock) - { - if ((&GpeBlock->EventInfo[0] <= GpeEventInfo) && - (&GpeBlock->EventInfo[((ACPI_SIZE) - GpeBlock->RegisterCount) * 8] > GpeEventInfo)) - { - return (TRUE); - } - - GpeBlock = GpeBlock->Next; - } - - GpeXruptBlock = GpeXruptBlock->Next; - } - - return (FALSE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvWalkGpeList - * - * PARAMETERS: GpeWalkCallback - Routine called for each GPE block - * Context - Value passed to callback - * - * RETURN: Status - * - * DESCRIPTION: Walk the GPE lists. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvWalkGpeList ( - ACPI_GPE_CALLBACK GpeWalkCallback, - void *Context) -{ - ACPI_GPE_BLOCK_INFO *GpeBlock; - ACPI_GPE_XRUPT_INFO *GpeXruptInfo; - ACPI_STATUS Status = AE_OK; - ACPI_CPU_FLAGS Flags; - - - ACPI_FUNCTION_TRACE (EvWalkGpeList); - - - Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); - - /* Walk the interrupt level descriptor list */ - - GpeXruptInfo = AcpiGbl_GpeXruptListHead; - while (GpeXruptInfo) - { - /* Walk all Gpe Blocks attached to this interrupt level */ - - GpeBlock = GpeXruptInfo->GpeBlockListHead; - while (GpeBlock) - { - /* One callback per GPE block */ - - Status = GpeWalkCallback (GpeXruptInfo, GpeBlock, Context); - if (ACPI_FAILURE (Status)) - { - if (Status == AE_CTRL_END) /* Callback abort */ - { - Status = AE_OK; - } - goto UnlockAndExit; - } - - GpeBlock = GpeBlock->Next; - } - - GpeXruptInfo = GpeXruptInfo->Next; - } - -UnlockAndExit: - AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvDeleteGpeHandlers - * - * PARAMETERS: GpeXruptInfo - GPE Interrupt info - * GpeBlock - Gpe Block info - * - * RETURN: Status - * - * DESCRIPTION: Delete all Handler objects found in the GPE data structs. - * Used only prior to termination. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvDeleteGpeHandlers ( - ACPI_GPE_XRUPT_INFO *GpeXruptInfo, - ACPI_GPE_BLOCK_INFO *GpeBlock, - void *Context) -{ - ACPI_GPE_EVENT_INFO *GpeEventInfo; - UINT32 i; - UINT32 j; - - - ACPI_FUNCTION_TRACE (EvDeleteGpeHandlers); - - - /* Examine each GPE Register within the block */ - - for (i = 0; i < GpeBlock->RegisterCount; i++) - { - /* Now look at the individual GPEs in this byte register */ - - for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) - { - GpeEventInfo = &GpeBlock->EventInfo[((ACPI_SIZE) i * - ACPI_GPE_REGISTER_WIDTH) + j]; - - if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) == - ACPI_GPE_DISPATCH_HANDLER) - { - ACPI_FREE (GpeEventInfo->Dispatch.Handler); - GpeEventInfo->Dispatch.Handler = NULL; - GpeEventInfo->Flags &= ~ACPI_GPE_DISPATCH_MASK; - } - } - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvSaveMethodInfo - * - * PARAMETERS: Callback from WalkNamespace - * - * RETURN: Status - * - * DESCRIPTION: Called from AcpiWalkNamespace. Expects each object to be a - * control method under the _GPE portion of the namespace. - * Extract the name and GPE type from the object, saving this - * information for quick lookup during GPE dispatch - * - * The name of each GPE control method is of the form: - * "_Lxx" or "_Exx" - * Where: - * L - means that the GPE is level triggered - * E - means that the GPE is edge triggered - * xx - is the GPE number [in HEX] - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiEvSaveMethodInfo ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *ObjDesc, - void **ReturnValue) -{ - ACPI_GPE_BLOCK_INFO *GpeBlock = (void *) ObjDesc; - ACPI_GPE_EVENT_INFO *GpeEventInfo; - UINT32 GpeNumber; - char Name[ACPI_NAME_SIZE + 1]; - UINT8 Type; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvSaveMethodInfo); - - - /* - * _Lxx and _Exx GPE method support - * - * 1) Extract the name from the object and convert to a string - */ - ACPI_MOVE_32_TO_32 ( - Name, &((ACPI_NAMESPACE_NODE *) ObjHandle)->Name.Integer); - Name[ACPI_NAME_SIZE] = 0; - - /* - * 2) Edge/Level determination is based on the 2nd character - * of the method name - * - * NOTE: Default GPE type is RUNTIME. May be changed later to WAKE - * if a _PRW object is found that points to this GPE. - */ - switch (Name[1]) - { - case 'L': - Type = ACPI_GPE_LEVEL_TRIGGERED; - break; - - case 'E': - Type = ACPI_GPE_EDGE_TRIGGERED; - break; - - default: - /* Unknown method type, just ignore it! */ - - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, - "Ignoring unknown GPE method type: %s " - "(name not of form _Lxx or _Exx)", - Name)); - return_ACPI_STATUS (AE_OK); - } - - /* Convert the last two characters of the name to the GPE Number */ - - GpeNumber = ACPI_STRTOUL (&Name[2], NULL, 16); - if (GpeNumber == ACPI_UINT32_MAX) - { - /* Conversion failed; invalid method, just ignore it */ - - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, - "Could not extract GPE number from name: %s " - "(name is not of form _Lxx or _Exx)", - Name)); - return_ACPI_STATUS (AE_OK); - } - - /* Ensure that we have a valid GPE number for this GPE block */ - - if ((GpeNumber < GpeBlock->BlockBaseNumber) || - (GpeNumber >= (GpeBlock->BlockBaseNumber + - (GpeBlock->RegisterCount * 8)))) - { - /* - * Not valid for this GPE block, just ignore it. However, it may be - * valid for a different GPE block, since GPE0 and GPE1 methods both - * appear under \_GPE. - */ - return_ACPI_STATUS (AE_OK); - } - - /* - * Now we can add this information to the GpeEventInfo block for use - * during dispatch of this GPE. Default type is RUNTIME, although this may - * change when the _PRW methods are executed later. - */ - GpeEventInfo = &GpeBlock->EventInfo[GpeNumber - GpeBlock->BlockBaseNumber]; - - GpeEventInfo->Flags = (UINT8) - (Type | ACPI_GPE_DISPATCH_METHOD | ACPI_GPE_TYPE_RUNTIME); - - GpeEventInfo->Dispatch.MethodNode = (ACPI_NAMESPACE_NODE *) ObjHandle; - - /* Update enable mask, but don't enable the HW GPE as of yet */ - - Status = AcpiEvEnableGpe (GpeEventInfo, FALSE); - - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, - "Registered GPE method %s as GPE number 0x%.2X\n", - Name, GpeNumber)); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvMatchPrwAndGpe - * - * PARAMETERS: Callback from WalkNamespace - * - * RETURN: Status. NOTE: We ignore errors so that the _PRW walk is - * not aborted on a single _PRW failure. - * - * DESCRIPTION: Called from AcpiWalkNamespace. Expects each object to be a - * Device. Run the _PRW method. If present, extract the GPE - * number and mark the GPE as a WAKE GPE. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiEvMatchPrwAndGpe ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Info, - void **ReturnValue) -{ - ACPI_GPE_WALK_INFO *GpeInfo = (void *) Info; - ACPI_NAMESPACE_NODE *GpeDevice; - ACPI_GPE_BLOCK_INFO *GpeBlock; - ACPI_NAMESPACE_NODE *TargetGpeDevice; - ACPI_GPE_EVENT_INFO *GpeEventInfo; - ACPI_OPERAND_OBJECT *PkgDesc; - ACPI_OPERAND_OBJECT *ObjDesc; - UINT32 GpeNumber; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvMatchPrwAndGpe); - - - /* Check for a _PRW method under this device */ - - Status = AcpiUtEvaluateObject (ObjHandle, METHOD_NAME__PRW, - ACPI_BTYPE_PACKAGE, &PkgDesc); - if (ACPI_FAILURE (Status)) - { - /* Ignore all errors from _PRW, we don't want to abort the subsystem */ - - return_ACPI_STATUS (AE_OK); - } - - /* The returned _PRW package must have at least two elements */ - - if (PkgDesc->Package.Count < 2) - { - goto Cleanup; - } - - /* Extract pointers from the input context */ - - GpeDevice = GpeInfo->GpeDevice; - GpeBlock = GpeInfo->GpeBlock; - - /* - * The _PRW object must return a package, we are only interested in the - * first element - */ - ObjDesc = PkgDesc->Package.Elements[0]; - - if (ObjDesc->Common.Type == ACPI_TYPE_INTEGER) - { - /* Use FADT-defined GPE device (from definition of _PRW) */ - - TargetGpeDevice = AcpiGbl_FadtGpeDevice; - - /* Integer is the GPE number in the FADT described GPE blocks */ - - GpeNumber = (UINT32) ObjDesc->Integer.Value; - } - else if (ObjDesc->Common.Type == ACPI_TYPE_PACKAGE) - { - /* Package contains a GPE reference and GPE number within a GPE block */ - - if ((ObjDesc->Package.Count < 2) || - ((ObjDesc->Package.Elements[0])->Common.Type != - ACPI_TYPE_LOCAL_REFERENCE) || - ((ObjDesc->Package.Elements[1])->Common.Type != - ACPI_TYPE_INTEGER)) - { - goto Cleanup; - } - - /* Get GPE block reference and decode */ - - TargetGpeDevice = ObjDesc->Package.Elements[0]->Reference.Node; - GpeNumber = (UINT32) ObjDesc->Package.Elements[1]->Integer.Value; - } - else - { - /* Unknown type, just ignore it */ - - goto Cleanup; - } - - /* - * Is this GPE within this block? - * - * TRUE if and only if these conditions are true: - * 1) The GPE devices match. - * 2) The GPE index(number) is within the range of the Gpe Block - * associated with the GPE device. - */ - if ((GpeDevice == TargetGpeDevice) && - (GpeNumber >= GpeBlock->BlockBaseNumber) && - (GpeNumber < GpeBlock->BlockBaseNumber + - (GpeBlock->RegisterCount * 8))) - { - GpeEventInfo = &GpeBlock->EventInfo[GpeNumber - - GpeBlock->BlockBaseNumber]; - - /* Mark GPE for WAKE-ONLY but WAKE_DISABLED */ - - GpeEventInfo->Flags &= ~(ACPI_GPE_WAKE_ENABLED | ACPI_GPE_RUN_ENABLED); - - Status = AcpiEvSetGpeType (GpeEventInfo, ACPI_GPE_TYPE_WAKE); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - Status = AcpiEvUpdateGpeEnableMasks (GpeEventInfo, ACPI_GPE_DISABLE); - } - -Cleanup: - AcpiUtRemoveReference (PkgDesc); - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvGetGpeXruptBlock - * - * PARAMETERS: InterruptNumber - Interrupt for a GPE block - * - * RETURN: A GPE interrupt block - * - * DESCRIPTION: Get or Create a GPE interrupt block. There is one interrupt - * block per unique interrupt level used for GPEs. Should be - * called only when the GPE lists are semaphore locked and not - * subject to change. - * - ******************************************************************************/ - -static ACPI_GPE_XRUPT_INFO * -AcpiEvGetGpeXruptBlock ( - UINT32 InterruptNumber) -{ - ACPI_GPE_XRUPT_INFO *NextGpeXrupt; - ACPI_GPE_XRUPT_INFO *GpeXrupt; - ACPI_STATUS Status; - ACPI_CPU_FLAGS Flags; - - - ACPI_FUNCTION_TRACE (EvGetGpeXruptBlock); - - - /* No need for lock since we are not changing any list elements here */ - - NextGpeXrupt = AcpiGbl_GpeXruptListHead; - while (NextGpeXrupt) - { - if (NextGpeXrupt->InterruptNumber == InterruptNumber) - { - return_PTR (NextGpeXrupt); - } - - NextGpeXrupt = NextGpeXrupt->Next; - } - - /* Not found, must allocate a new xrupt descriptor */ - - GpeXrupt = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_GPE_XRUPT_INFO)); - if (!GpeXrupt) - { - return_PTR (NULL); - } - - GpeXrupt->InterruptNumber = InterruptNumber; - - /* Install new interrupt descriptor with spin lock */ - - Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); - if (AcpiGbl_GpeXruptListHead) - { - NextGpeXrupt = AcpiGbl_GpeXruptListHead; - while (NextGpeXrupt->Next) - { - NextGpeXrupt = NextGpeXrupt->Next; - } - - NextGpeXrupt->Next = GpeXrupt; - GpeXrupt->Previous = NextGpeXrupt; - } - else - { - AcpiGbl_GpeXruptListHead = GpeXrupt; - } - AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); - - /* Install new interrupt handler if not SCI_INT */ - - if (InterruptNumber != AcpiGbl_FADT.SciInterrupt) - { - Status = AcpiOsInstallInterruptHandler (InterruptNumber, - AcpiEvGpeXruptHandler, GpeXrupt); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR ((AE_INFO, - "Could not install GPE interrupt handler at level 0x%X", - InterruptNumber)); - return_PTR (NULL); - } - } - - return_PTR (GpeXrupt); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvDeleteGpeXrupt - * - * PARAMETERS: GpeXrupt - A GPE interrupt info block - * - * RETURN: Status - * - * DESCRIPTION: Remove and free a GpeXrupt block. Remove an associated - * interrupt handler if not the SCI interrupt. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiEvDeleteGpeXrupt ( - ACPI_GPE_XRUPT_INFO *GpeXrupt) -{ - ACPI_STATUS Status; - ACPI_CPU_FLAGS Flags; - - - ACPI_FUNCTION_TRACE (EvDeleteGpeXrupt); - - - /* We never want to remove the SCI interrupt handler */ - - if (GpeXrupt->InterruptNumber == AcpiGbl_FADT.SciInterrupt) - { - GpeXrupt->GpeBlockListHead = NULL; - return_ACPI_STATUS (AE_OK); - } - - /* Disable this interrupt */ - - Status = AcpiOsRemoveInterruptHandler ( - GpeXrupt->InterruptNumber, AcpiEvGpeXruptHandler); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Unlink the interrupt block with lock */ - - Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); - if (GpeXrupt->Previous) - { - GpeXrupt->Previous->Next = GpeXrupt->Next; - } - else - { - /* No previous, update list head */ - - AcpiGbl_GpeXruptListHead = GpeXrupt->Next; - } - - if (GpeXrupt->Next) - { - GpeXrupt->Next->Previous = GpeXrupt->Previous; - } - AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); - - /* Free the block */ - - ACPI_FREE (GpeXrupt); - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvInstallGpeBlock - * - * PARAMETERS: GpeBlock - New GPE block - * InterruptNumber - Xrupt to be associated with this - * GPE block - * - * RETURN: Status - * - * DESCRIPTION: Install new GPE block with mutex support - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiEvInstallGpeBlock ( - ACPI_GPE_BLOCK_INFO *GpeBlock, - UINT32 InterruptNumber) -{ - ACPI_GPE_BLOCK_INFO *NextGpeBlock; - ACPI_GPE_XRUPT_INFO *GpeXruptBlock; - ACPI_STATUS Status; - ACPI_CPU_FLAGS Flags; - - - ACPI_FUNCTION_TRACE (EvInstallGpeBlock); - - - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - GpeXruptBlock = AcpiEvGetGpeXruptBlock (InterruptNumber); - if (!GpeXruptBlock) - { - Status = AE_NO_MEMORY; - goto UnlockAndExit; - } - - /* Install the new block at the end of the list with lock */ - - Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); - if (GpeXruptBlock->GpeBlockListHead) - { - NextGpeBlock = GpeXruptBlock->GpeBlockListHead; - while (NextGpeBlock->Next) - { - NextGpeBlock = NextGpeBlock->Next; - } - - NextGpeBlock->Next = GpeBlock; - GpeBlock->Previous = NextGpeBlock; - } - else - { - GpeXruptBlock->GpeBlockListHead = GpeBlock; - } - - GpeBlock->XruptBlock = GpeXruptBlock; - AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); - - -UnlockAndExit: - Status = AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvDeleteGpeBlock - * - * PARAMETERS: GpeBlock - Existing GPE block - * - * RETURN: Status - * - * DESCRIPTION: Remove a GPE block - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvDeleteGpeBlock ( - ACPI_GPE_BLOCK_INFO *GpeBlock) -{ - ACPI_STATUS Status; - ACPI_CPU_FLAGS Flags; - - - ACPI_FUNCTION_TRACE (EvInstallGpeBlock); - - - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Disable all GPEs in this block */ - - Status = AcpiHwDisableGpeBlock (GpeBlock->XruptBlock, GpeBlock, NULL); - - if (!GpeBlock->Previous && !GpeBlock->Next) - { - /* This is the last GpeBlock on this interrupt */ - - Status = AcpiEvDeleteGpeXrupt (GpeBlock->XruptBlock); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - } - else - { - /* Remove the block on this interrupt with lock */ - - Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); - if (GpeBlock->Previous) - { - GpeBlock->Previous->Next = GpeBlock->Next; - } - else - { - GpeBlock->XruptBlock->GpeBlockListHead = GpeBlock->Next; - } - - if (GpeBlock->Next) - { - GpeBlock->Next->Previous = GpeBlock->Previous; - } - AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); - } - - AcpiCurrentGpeCount -= GpeBlock->RegisterCount * ACPI_GPE_REGISTER_WIDTH; - - /* Free the GpeBlock */ - - ACPI_FREE (GpeBlock->RegisterInfo); - ACPI_FREE (GpeBlock->EventInfo); - ACPI_FREE (GpeBlock); - -UnlockAndExit: - Status = AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvCreateGpeInfoBlocks - * - * PARAMETERS: GpeBlock - New GPE block - * - * RETURN: Status - * - * DESCRIPTION: Create the RegisterInfo and EventInfo blocks for this GPE block - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiEvCreateGpeInfoBlocks ( - ACPI_GPE_BLOCK_INFO *GpeBlock) -{ - ACPI_GPE_REGISTER_INFO *GpeRegisterInfo = NULL; - ACPI_GPE_EVENT_INFO *GpeEventInfo = NULL; - ACPI_GPE_EVENT_INFO *ThisEvent; - ACPI_GPE_REGISTER_INFO *ThisRegister; - UINT32 i; - UINT32 j; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvCreateGpeInfoBlocks); - - - /* Allocate the GPE register information block */ - - GpeRegisterInfo = ACPI_ALLOCATE_ZEROED ( - (ACPI_SIZE) GpeBlock->RegisterCount * - sizeof (ACPI_GPE_REGISTER_INFO)); - if (!GpeRegisterInfo) - { - ACPI_ERROR ((AE_INFO, - "Could not allocate the GpeRegisterInfo table")); - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* - * Allocate the GPE EventInfo block. There are eight distinct GPEs - * per register. Initialization to zeros is sufficient. - */ - GpeEventInfo = ACPI_ALLOCATE_ZEROED ( - ((ACPI_SIZE) GpeBlock->RegisterCount * - ACPI_GPE_REGISTER_WIDTH) * - sizeof (ACPI_GPE_EVENT_INFO)); - if (!GpeEventInfo) - { - ACPI_ERROR ((AE_INFO, - "Could not allocate the GpeEventInfo table")); - Status = AE_NO_MEMORY; - goto ErrorExit; - } - - /* Save the new Info arrays in the GPE block */ - - GpeBlock->RegisterInfo = GpeRegisterInfo; - GpeBlock->EventInfo = GpeEventInfo; - - /* - * Initialize the GPE Register and Event structures. A goal of these - * tables is to hide the fact that there are two separate GPE register - * sets in a given GPE hardware block, the status registers occupy the - * first half, and the enable registers occupy the second half. - */ - ThisRegister = GpeRegisterInfo; - ThisEvent = GpeEventInfo; - - for (i = 0; i < GpeBlock->RegisterCount; i++) - { - /* Init the RegisterInfo for this GPE register (8 GPEs) */ - - ThisRegister->BaseGpeNumber = (UINT8) (GpeBlock->BlockBaseNumber + - (i * ACPI_GPE_REGISTER_WIDTH)); - - ThisRegister->StatusAddress.Address = - GpeBlock->BlockAddress.Address + i; - - ThisRegister->EnableAddress.Address = - GpeBlock->BlockAddress.Address + i + GpeBlock->RegisterCount; - - ThisRegister->StatusAddress.SpaceId = GpeBlock->BlockAddress.SpaceId; - ThisRegister->EnableAddress.SpaceId = GpeBlock->BlockAddress.SpaceId; - ThisRegister->StatusAddress.BitWidth = ACPI_GPE_REGISTER_WIDTH; - ThisRegister->EnableAddress.BitWidth = ACPI_GPE_REGISTER_WIDTH; - ThisRegister->StatusAddress.BitOffset = 0; - ThisRegister->EnableAddress.BitOffset = 0; - - /* Init the EventInfo for each GPE within this register */ - - for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) - { - ThisEvent->GpeNumber = (UINT8) (ThisRegister->BaseGpeNumber + j); - ThisEvent->RegisterInfo = ThisRegister; - ThisEvent++; - } - - /* Disable all GPEs within this register */ - - Status = AcpiHwWrite (0x00, &ThisRegister->EnableAddress); - if (ACPI_FAILURE (Status)) - { - goto ErrorExit; - } - - /* Clear any pending GPE events within this register */ - - Status = AcpiHwWrite (0xFF, &ThisRegister->StatusAddress); - if (ACPI_FAILURE (Status)) - { - goto ErrorExit; - } - - ThisRegister++; - } - - return_ACPI_STATUS (AE_OK); - - -ErrorExit: - if (GpeRegisterInfo) - { - ACPI_FREE (GpeRegisterInfo); - } - if (GpeEventInfo) - { - ACPI_FREE (GpeEventInfo); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvCreateGpeBlock - * - * PARAMETERS: GpeDevice - Handle to the parent GPE block - * GpeBlockAddress - Address and SpaceID - * RegisterCount - Number of GPE register pairs in the block - * GpeBlockBaseNumber - Starting GPE number for the block - * InterruptNumber - H/W interrupt for the block - * ReturnGpeBlock - Where the new block descriptor is returned - * - * RETURN: Status - * - * DESCRIPTION: Create and Install a block of GPE registers. All GPEs within - * the block are disabled at exit. - * Note: Assumes namespace is locked. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvCreateGpeBlock ( - ACPI_NAMESPACE_NODE *GpeDevice, - ACPI_GENERIC_ADDRESS *GpeBlockAddress, - UINT32 RegisterCount, - UINT8 GpeBlockBaseNumber, - UINT32 InterruptNumber, - ACPI_GPE_BLOCK_INFO **ReturnGpeBlock) -{ - ACPI_STATUS Status; - ACPI_GPE_BLOCK_INFO *GpeBlock; - - - ACPI_FUNCTION_TRACE (EvCreateGpeBlock); - - - if (!RegisterCount) - { - return_ACPI_STATUS (AE_OK); - } - - /* Allocate a new GPE block */ - - GpeBlock = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_GPE_BLOCK_INFO)); - if (!GpeBlock) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Initialize the new GPE block */ - - GpeBlock->Node = GpeDevice; - GpeBlock->RegisterCount = RegisterCount; - GpeBlock->BlockBaseNumber = GpeBlockBaseNumber; - - ACPI_MEMCPY (&GpeBlock->BlockAddress, GpeBlockAddress, - sizeof (ACPI_GENERIC_ADDRESS)); - - /* - * Create the RegisterInfo and EventInfo sub-structures - * Note: disables and clears all GPEs in the block - */ - Status = AcpiEvCreateGpeInfoBlocks (GpeBlock); - if (ACPI_FAILURE (Status)) - { - ACPI_FREE (GpeBlock); - return_ACPI_STATUS (Status); - } - - /* Install the new block in the global lists */ - - Status = AcpiEvInstallGpeBlock (GpeBlock, InterruptNumber); - if (ACPI_FAILURE (Status)) - { - ACPI_FREE (GpeBlock); - return_ACPI_STATUS (Status); - } - - /* Find all GPE methods (_Lxx, _Exx) for this block */ - - Status = AcpiNsWalkNamespace (ACPI_TYPE_METHOD, GpeDevice, - ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, - AcpiEvSaveMethodInfo, NULL, GpeBlock, NULL); - - /* Return the new block */ - - if (ReturnGpeBlock) - { - (*ReturnGpeBlock) = GpeBlock; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_INIT, - "GPE %02X to %02X [%4.4s] %u regs on int 0x%X\n", - (UINT32) GpeBlock->BlockBaseNumber, - (UINT32) (GpeBlock->BlockBaseNumber + - ((GpeBlock->RegisterCount * ACPI_GPE_REGISTER_WIDTH) -1)), - GpeDevice->Name.Ascii, - GpeBlock->RegisterCount, - InterruptNumber)); - - /* Update global count of currently available GPEs */ - - AcpiCurrentGpeCount += RegisterCount * ACPI_GPE_REGISTER_WIDTH; - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvInitializeGpeBlock - * - * PARAMETERS: GpeDevice - Handle to the parent GPE block - * GpeBlock - Gpe Block info - * - * RETURN: Status - * - * DESCRIPTION: Initialize and enable a GPE block. First find and run any - * _PRT methods associated with the block, then enable the - * appropriate GPEs. - * Note: Assumes namespace is locked. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvInitializeGpeBlock ( - ACPI_NAMESPACE_NODE *GpeDevice, - ACPI_GPE_BLOCK_INFO *GpeBlock) -{ - ACPI_STATUS Status; - ACPI_GPE_EVENT_INFO *GpeEventInfo; - ACPI_GPE_WALK_INFO GpeInfo; - UINT32 WakeGpeCount; - UINT32 GpeEnabledCount; - UINT32 i; - UINT32 j; - - - ACPI_FUNCTION_TRACE (EvInitializeGpeBlock); - - - /* Ignore a null GPE block (e.g., if no GPE block 1 exists) */ - - if (!GpeBlock) - { - return_ACPI_STATUS (AE_OK); - } - - /* - * Runtime option: Should wake GPEs be enabled at runtime? The default - * is no, they should only be enabled just as the machine goes to sleep. - */ - if (AcpiGbl_LeaveWakeGpesDisabled) - { - /* - * Differentiate runtime vs wake GPEs, via the _PRW control methods. - * Each GPE that has one or more _PRWs that reference it is by - * definition a wake GPE and will not be enabled while the machine - * is running. - */ - GpeInfo.GpeBlock = GpeBlock; - GpeInfo.GpeDevice = GpeDevice; - - Status = AcpiNsWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK, - AcpiEvMatchPrwAndGpe, NULL, &GpeInfo, NULL); - } - - /* - * Enable all GPEs in this block that have these attributes: - * 1) are "runtime" or "run/wake" GPEs, and - * 2) have a corresponding _Lxx or _Exx method - * - * Any other GPEs within this block must be enabled via the - * AcpiEnableGpe() external interface. - */ - WakeGpeCount = 0; - GpeEnabledCount = 0; - - for (i = 0; i < GpeBlock->RegisterCount; i++) - { - for (j = 0; j < 8; j++) - { - /* Get the info block for this particular GPE */ - - GpeEventInfo = &GpeBlock->EventInfo[((ACPI_SIZE) i * - ACPI_GPE_REGISTER_WIDTH) + j]; - - if (((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) == - ACPI_GPE_DISPATCH_METHOD) && - (GpeEventInfo->Flags & ACPI_GPE_TYPE_RUNTIME)) - { - GpeEnabledCount++; - } - - if (GpeEventInfo->Flags & ACPI_GPE_TYPE_WAKE) - { - WakeGpeCount++; - } - } - } - - ACPI_DEBUG_PRINT ((ACPI_DB_INIT, - "Found %u Wake, Enabled %u Runtime GPEs in this block\n", - WakeGpeCount, GpeEnabledCount)); - - /* Enable all valid runtime GPEs found above */ - - Status = AcpiHwEnableRuntimeGpeBlock (NULL, GpeBlock, NULL); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR ((AE_INFO, "Could not enable GPEs in GpeBlock %p", - GpeBlock)); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvGpeInitialize - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Initialize the GPE data structures - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvGpeInitialize ( - void) -{ - UINT32 RegisterCount0 = 0; - UINT32 RegisterCount1 = 0; - UINT32 GpeNumberMax = 0; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvGpeInitialize); - - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Initialize the GPE Block(s) defined in the FADT - * - * Why the GPE register block lengths are divided by 2: From the ACPI - * Spec, section "General-Purpose Event Registers", we have: - * - * "Each register block contains two registers of equal length - * GPEx_STS and GPEx_EN (where x is 0 or 1). The length of the - * GPE0_STS and GPE0_EN registers is equal to half the GPE0_LEN - * The length of the GPE1_STS and GPE1_EN registers is equal to - * half the GPE1_LEN. If a generic register block is not supported - * then its respective block pointer and block length values in the - * FADT table contain zeros. The GPE0_LEN and GPE1_LEN do not need - * to be the same size." - */ - - /* - * Determine the maximum GPE number for this machine. - * - * Note: both GPE0 and GPE1 are optional, and either can exist without - * the other. - * - * If EITHER the register length OR the block address are zero, then that - * particular block is not supported. - */ - if (AcpiGbl_FADT.Gpe0BlockLength && - AcpiGbl_FADT.XGpe0Block.Address) - { - /* GPE block 0 exists (has both length and address > 0) */ - - RegisterCount0 = (UINT16) (AcpiGbl_FADT.Gpe0BlockLength / 2); - - GpeNumberMax = (RegisterCount0 * ACPI_GPE_REGISTER_WIDTH) - 1; - - /* Install GPE Block 0 */ - - Status = AcpiEvCreateGpeBlock (AcpiGbl_FadtGpeDevice, - &AcpiGbl_FADT.XGpe0Block, RegisterCount0, 0, - AcpiGbl_FADT.SciInterrupt, &AcpiGbl_GpeFadtBlocks[0]); - - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not create GPE Block 0")); - } - } - - if (AcpiGbl_FADT.Gpe1BlockLength && - AcpiGbl_FADT.XGpe1Block.Address) - { - /* GPE block 1 exists (has both length and address > 0) */ - - RegisterCount1 = (UINT16) (AcpiGbl_FADT.Gpe1BlockLength / 2); - - /* Check for GPE0/GPE1 overlap (if both banks exist) */ - - if ((RegisterCount0) && - (GpeNumberMax >= AcpiGbl_FADT.Gpe1Base)) - { - ACPI_ERROR ((AE_INFO, - "GPE0 block (GPE 0 to %d) overlaps the GPE1 block " - "(GPE %d to %d) - Ignoring GPE1", - GpeNumberMax, AcpiGbl_FADT.Gpe1Base, - AcpiGbl_FADT.Gpe1Base + - ((RegisterCount1 * ACPI_GPE_REGISTER_WIDTH) - 1))); - - /* Ignore GPE1 block by setting the register count to zero */ - - RegisterCount1 = 0; - } - else - { - /* Install GPE Block 1 */ - - Status = AcpiEvCreateGpeBlock (AcpiGbl_FadtGpeDevice, - &AcpiGbl_FADT.XGpe1Block, RegisterCount1, - AcpiGbl_FADT.Gpe1Base, - AcpiGbl_FADT.SciInterrupt, &AcpiGbl_GpeFadtBlocks[1]); - - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not create GPE Block 1")); - } - - /* - * GPE0 and GPE1 do not have to be contiguous in the GPE number - * space. However, GPE0 always starts at GPE number zero. - */ - GpeNumberMax = AcpiGbl_FADT.Gpe1Base + - ((RegisterCount1 * ACPI_GPE_REGISTER_WIDTH) - 1); - } - } - - /* Exit if there are no GPE registers */ - - if ((RegisterCount0 + RegisterCount1) == 0) - { - /* GPEs are not required by ACPI, this is OK */ - - ACPI_DEBUG_PRINT ((ACPI_DB_INIT, - "There are no GPE blocks defined in the FADT\n")); - Status = AE_OK; - goto Cleanup; - } - - /* Check for Max GPE number out-of-range */ - - if (GpeNumberMax > ACPI_GPE_MAX) - { - ACPI_ERROR ((AE_INFO, - "Maximum GPE number from FADT is too large: 0x%X", - GpeNumberMax)); - Status = AE_BAD_VALUE; - goto Cleanup; - } - -Cleanup: - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return_ACPI_STATUS (AE_OK); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/events/evmisc.c b/l4/pkg/acpica/lib-acpi/src/acpica/events/evmisc.c deleted file mode 100644 index 1e7f9e1cb..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/events/evmisc.c +++ /dev/null @@ -1,740 +0,0 @@ -/****************************************************************************** - * - * Module Name: evmisc - Miscellaneous event manager support functions - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#include "acpi.h" -#include "accommon.h" -#include "acevents.h" -#include "acnamesp.h" -#include "acinterp.h" - -#define _COMPONENT ACPI_EVENTS - ACPI_MODULE_NAME ("evmisc") - - -/* Local prototypes */ - -static void ACPI_SYSTEM_XFACE -AcpiEvNotifyDispatch ( - void *Context); - -static UINT32 -AcpiEvGlobalLockHandler ( - void *Context); - -static ACPI_STATUS -AcpiEvRemoveGlobalLockHandler ( - void); - - -/******************************************************************************* - * - * FUNCTION: AcpiEvIsNotifyObject - * - * PARAMETERS: Node - Node to check - * - * RETURN: TRUE if notifies allowed on this object - * - * DESCRIPTION: Check type of node for a object that supports notifies. - * - * TBD: This could be replaced by a flag bit in the node. - * - ******************************************************************************/ - -BOOLEAN -AcpiEvIsNotifyObject ( - ACPI_NAMESPACE_NODE *Node) -{ - switch (Node->Type) - { - case ACPI_TYPE_DEVICE: - case ACPI_TYPE_PROCESSOR: - case ACPI_TYPE_THERMAL: - /* - * These are the ONLY objects that can receive ACPI notifications - */ - return (TRUE); - - default: - return (FALSE); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvQueueNotifyRequest - * - * PARAMETERS: Node - NS node for the notified object - * NotifyValue - Value from the Notify() request - * - * RETURN: Status - * - * DESCRIPTION: Dispatch a device notification event to a previously - * installed handler. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvQueueNotifyRequest ( - ACPI_NAMESPACE_NODE *Node, - UINT32 NotifyValue) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT *HandlerObj = NULL; - ACPI_GENERIC_STATE *NotifyInfo; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_NAME (EvQueueNotifyRequest); - - - /* - * For value 3 (Ejection Request), some device method may need to be run. - * For value 2 (Device Wake) if _PRW exists, the _PS0 method may need - * to be run. - * For value 0x80 (Status Change) on the power button or sleep button, - * initiate soft-off or sleep operation? - */ - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Dispatching Notify on [%4.4s] Node %p Value 0x%2.2X (%s)\n", - AcpiUtGetNodeName (Node), Node, NotifyValue, - AcpiUtGetNotifyName (NotifyValue))); - - /* Get the notify object attached to the NS Node */ - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (ObjDesc) - { - /* We have the notify object, Get the right handler */ - - switch (Node->Type) - { - /* Notify allowed only on these types */ - - case ACPI_TYPE_DEVICE: - case ACPI_TYPE_THERMAL: - case ACPI_TYPE_PROCESSOR: - - if (NotifyValue <= ACPI_MAX_SYS_NOTIFY) - { - HandlerObj = ObjDesc->CommonNotify.SystemNotify; - } - else - { - HandlerObj = ObjDesc->CommonNotify.DeviceNotify; - } - break; - - default: - - /* All other types are not supported */ - - return (AE_TYPE); - } - } - - /* - * If there is any handler to run, schedule the dispatcher. - * Check for: - * 1) Global system notify handler - * 2) Global device notify handler - * 3) Per-device notify handler - */ - if ((AcpiGbl_SystemNotify.Handler && - (NotifyValue <= ACPI_MAX_SYS_NOTIFY)) || - (AcpiGbl_DeviceNotify.Handler && - (NotifyValue > ACPI_MAX_SYS_NOTIFY)) || - HandlerObj) - { - NotifyInfo = AcpiUtCreateGenericState (); - if (!NotifyInfo) - { - return (AE_NO_MEMORY); - } - - if (!HandlerObj) - { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Executing system notify handler for Notify (%4.4s, %X) " - "node %p\n", - AcpiUtGetNodeName (Node), NotifyValue, Node)); - } - - NotifyInfo->Common.DescriptorType = ACPI_DESC_TYPE_STATE_NOTIFY; - NotifyInfo->Notify.Node = Node; - NotifyInfo->Notify.Value = (UINT16) NotifyValue; - NotifyInfo->Notify.HandlerObj = HandlerObj; - - Status = AcpiOsExecute ( - OSL_NOTIFY_HANDLER, AcpiEvNotifyDispatch, NotifyInfo); - if (ACPI_FAILURE (Status)) - { - AcpiUtDeleteGenericState (NotifyInfo); - } - } - else - { - /* There is no notify handler (per-device or system) for this device */ - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "No notify handler for Notify (%4.4s, %X) node %p\n", - AcpiUtGetNodeName (Node), NotifyValue, Node)); - } - - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvNotifyDispatch - * - * PARAMETERS: Context - To be passed to the notify handler - * - * RETURN: None. - * - * DESCRIPTION: Dispatch a device notification event to a previously - * installed handler. - * - ******************************************************************************/ - -static void ACPI_SYSTEM_XFACE -AcpiEvNotifyDispatch ( - void *Context) -{ - ACPI_GENERIC_STATE *NotifyInfo = (ACPI_GENERIC_STATE *) Context; - ACPI_NOTIFY_HANDLER GlobalHandler = NULL; - void *GlobalContext = NULL; - ACPI_OPERAND_OBJECT *HandlerObj; - - - ACPI_FUNCTION_ENTRY (); - - - /* - * We will invoke a global notify handler if installed. This is done - * _before_ we invoke the per-device handler attached to the device. - */ - if (NotifyInfo->Notify.Value <= ACPI_MAX_SYS_NOTIFY) - { - /* Global system notification handler */ - - if (AcpiGbl_SystemNotify.Handler) - { - GlobalHandler = AcpiGbl_SystemNotify.Handler; - GlobalContext = AcpiGbl_SystemNotify.Context; - } - } - else - { - /* Global driver notification handler */ - - if (AcpiGbl_DeviceNotify.Handler) - { - GlobalHandler = AcpiGbl_DeviceNotify.Handler; - GlobalContext = AcpiGbl_DeviceNotify.Context; - } - } - - /* Invoke the system handler first, if present */ - - if (GlobalHandler) - { - GlobalHandler (NotifyInfo->Notify.Node, NotifyInfo->Notify.Value, - GlobalContext); - } - - /* Now invoke the per-device handler, if present */ - - HandlerObj = NotifyInfo->Notify.HandlerObj; - if (HandlerObj) - { - HandlerObj->Notify.Handler (NotifyInfo->Notify.Node, - NotifyInfo->Notify.Value, - HandlerObj->Notify.Context); - } - - /* All done with the info object */ - - AcpiUtDeleteGenericState (NotifyInfo); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvGlobalLockHandler - * - * PARAMETERS: Context - From thread interface, not used - * - * RETURN: ACPI_INTERRUPT_HANDLED - * - * DESCRIPTION: Invoked directly from the SCI handler when a global lock - * release interrupt occurs. Attempt to acquire the global lock, - * if successful, signal the thread waiting for the lock. - * - * NOTE: Assumes that the semaphore can be signaled from interrupt level. If - * this is not possible for some reason, a separate thread will have to be - * scheduled to do this. - * - ******************************************************************************/ - -static UINT32 -AcpiEvGlobalLockHandler ( - void *Context) -{ - BOOLEAN Acquired = FALSE; - ACPI_STATUS Status; - - - /* - * Attempt to get the lock. - * - * If we don't get it now, it will be marked pending and we will - * take another interrupt when it becomes free. - */ - ACPI_ACQUIRE_GLOBAL_LOCK (AcpiGbl_FACS, Acquired); - if (Acquired) - { - /* Got the lock, now wake the thread waiting for it */ - - AcpiGbl_GlobalLockAcquired = TRUE; - - /* Send a unit to the semaphore */ - - Status = AcpiOsSignalSemaphore (AcpiGbl_GlobalLockSemaphore, 1); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR ((AE_INFO, "Could not signal Global Lock semaphore")); - } - } - - return (ACPI_INTERRUPT_HANDLED); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvInitGlobalLockHandler - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Install a handler for the global lock release event - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvInitGlobalLockHandler ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvInitGlobalLockHandler); - - - /* Attempt installation of the global lock handler */ - - Status = AcpiInstallFixedEventHandler (ACPI_EVENT_GLOBAL, - AcpiEvGlobalLockHandler, NULL); - - /* - * If the global lock does not exist on this platform, the attempt to - * enable GBL_STATUS will fail (the GBL_ENABLE bit will not stick). - * Map to AE_OK, but mark global lock as not present. Any attempt to - * actually use the global lock will be flagged with an error. - */ - if (Status == AE_NO_HARDWARE_RESPONSE) - { - ACPI_ERROR ((AE_INFO, - "No response from Global Lock hardware, disabling lock")); - - AcpiGbl_GlobalLockPresent = FALSE; - return_ACPI_STATUS (AE_OK); - } - - AcpiGbl_GlobalLockPresent = TRUE; - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvRemoveGlobalLockHandler - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Remove the handler for the Global Lock - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiEvRemoveGlobalLockHandler ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvRemoveGlobalLockHandler); - - AcpiGbl_GlobalLockPresent = FALSE; - Status = AcpiRemoveFixedEventHandler (ACPI_EVENT_GLOBAL, - AcpiEvGlobalLockHandler); - - return_ACPI_STATUS (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiEvAcquireGlobalLock - * - * PARAMETERS: Timeout - Max time to wait for the lock, in millisec. - * - * RETURN: Status - * - * DESCRIPTION: Attempt to gain ownership of the Global Lock. - * - * MUTEX: Interpreter must be locked - * - * Note: The original implementation allowed multiple threads to "acquire" the - * Global Lock, and the OS would hold the lock until the last thread had - * released it. However, this could potentially starve the BIOS out of the - * lock, especially in the case where there is a tight handshake between the - * Embedded Controller driver and the BIOS. Therefore, this implementation - * allows only one thread to acquire the HW Global Lock at a time, and makes - * the global lock appear as a standard mutex on the OS side. - * - *****************************************************************************/ - -ACPI_STATUS -AcpiEvAcquireGlobalLock ( - UINT16 Timeout) -{ - ACPI_STATUS Status = AE_OK; - BOOLEAN Acquired = FALSE; - - - ACPI_FUNCTION_TRACE (EvAcquireGlobalLock); - - - /* - * Only one thread can acquire the GL at a time, the GlobalLockMutex - * enforces this. This interface releases the interpreter if we must wait. - */ - Status = AcpiExSystemWaitMutex (AcpiGbl_GlobalLockMutex->Mutex.OsMutex, - Timeout); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Update the global lock handle and check for wraparound. The handle is - * only used for the external global lock interfaces, but it is updated - * here to properly handle the case where a single thread may acquire the - * lock via both the AML and the AcpiAcquireGlobalLock interfaces. The - * handle is therefore updated on the first acquire from a given thread - * regardless of where the acquisition request originated. - */ - AcpiGbl_GlobalLockHandle++; - if (AcpiGbl_GlobalLockHandle == 0) - { - AcpiGbl_GlobalLockHandle = 1; - } - - /* - * Make sure that a global lock actually exists. If not, just treat the - * lock as a standard mutex. - */ - if (!AcpiGbl_GlobalLockPresent) - { - AcpiGbl_GlobalLockAcquired = TRUE; - return_ACPI_STATUS (AE_OK); - } - - /* Attempt to acquire the actual hardware lock */ - - ACPI_ACQUIRE_GLOBAL_LOCK (AcpiGbl_FACS, Acquired); - if (Acquired) - { - /* We got the lock */ - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Acquired hardware Global Lock\n")); - - AcpiGbl_GlobalLockAcquired = TRUE; - return_ACPI_STATUS (AE_OK); - } - - /* - * Did not get the lock. The pending bit was set above, and we must now - * wait until we get the global lock released interrupt. - */ - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Waiting for hardware Global Lock\n")); - - /* - * Wait for handshake with the global lock interrupt handler. - * This interface releases the interpreter if we must wait. - */ - Status = AcpiExSystemWaitSemaphore (AcpiGbl_GlobalLockSemaphore, - ACPI_WAIT_FOREVER); - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvReleaseGlobalLock - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Releases ownership of the Global Lock. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvReleaseGlobalLock ( - void) -{ - BOOLEAN Pending = FALSE; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (EvReleaseGlobalLock); - - - /* Lock must be already acquired */ - - if (!AcpiGbl_GlobalLockAcquired) - { - ACPI_WARNING ((AE_INFO, - "Cannot release the ACPI Global Lock, it has not been acquired")); - return_ACPI_STATUS (AE_NOT_ACQUIRED); - } - - if (AcpiGbl_GlobalLockPresent) - { - /* Allow any thread to release the lock */ - - ACPI_RELEASE_GLOBAL_LOCK (AcpiGbl_FACS, Pending); - - /* - * If the pending bit was set, we must write GBL_RLS to the control - * register - */ - if (Pending) - { - Status = AcpiWriteBitRegister ( - ACPI_BITREG_GLOBAL_LOCK_RELEASE, ACPI_ENABLE_EVENT); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Released hardware Global Lock\n")); - } - - AcpiGbl_GlobalLockAcquired = FALSE; - - /* Release the local GL mutex */ - - AcpiOsReleaseMutex (AcpiGbl_GlobalLockMutex->Mutex.OsMutex); - return_ACPI_STATUS (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiEvTerminate - * - * PARAMETERS: none - * - * RETURN: none - * - * DESCRIPTION: Disable events and free memory allocated for table storage. - * - ******************************************************************************/ - -void -AcpiEvTerminate ( - void) -{ - UINT32 i; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvTerminate); - - - if (AcpiGbl_EventsInitialized) - { - /* - * Disable all event-related functionality. In all cases, on error, - * print a message but obviously we don't abort. - */ - - /* Disable all fixed events */ - - for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) - { - Status = AcpiDisableEvent (i, 0); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR ((AE_INFO, - "Could not disable fixed event %d", (UINT32) i)); - } - } - - /* Disable all GPEs in all GPE blocks */ - - Status = AcpiEvWalkGpeList (AcpiHwDisableGpeBlock, NULL); - - /* Remove SCI handler */ - - Status = AcpiEvRemoveSciHandler (); - if (ACPI_FAILURE(Status)) - { - ACPI_ERROR ((AE_INFO, - "Could not remove SCI handler")); - } - - Status = AcpiEvRemoveGlobalLockHandler (); - if (ACPI_FAILURE(Status)) - { - ACPI_ERROR ((AE_INFO, - "Could not remove Global Lock handler")); - } - } - - /* Deallocate all handler objects installed within GPE info structs */ - - Status = AcpiEvWalkGpeList (AcpiEvDeleteGpeHandlers, NULL); - - /* Return to original mode if necessary */ - - if (AcpiGbl_OriginalMode == ACPI_SYS_MODE_LEGACY) - { - Status = AcpiDisable (); - if (ACPI_FAILURE (Status)) - { - ACPI_WARNING ((AE_INFO, "AcpiDisable failed")); - } - } - return_VOID; -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/events/evregion.c b/l4/pkg/acpica/lib-acpi/src/acpica/events/evregion.c deleted file mode 100644 index 2bdfb872f..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/events/evregion.c +++ /dev/null @@ -1,1284 +0,0 @@ -/****************************************************************************** - * - * Module Name: evregion - ACPI AddressSpace (OpRegion) handler dispatch - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __EVREGION_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acevents.h" -#include "acnamesp.h" -#include "acinterp.h" - -#define _COMPONENT ACPI_EVENTS - ACPI_MODULE_NAME ("evregion") - - -/* Local prototypes */ - -static BOOLEAN -AcpiEvHasDefaultHandler ( - ACPI_NAMESPACE_NODE *Node, - ACPI_ADR_SPACE_TYPE SpaceId); - -static ACPI_STATUS -AcpiEvRegRun ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue); - -static ACPI_STATUS -AcpiEvInstallHandler ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue); - -/* These are the address spaces that will get default handlers */ - -#define ACPI_NUM_DEFAULT_SPACES 4 - -static UINT8 AcpiGbl_DefaultAddressSpaces[ACPI_NUM_DEFAULT_SPACES] = -{ - ACPI_ADR_SPACE_SYSTEM_MEMORY, - ACPI_ADR_SPACE_SYSTEM_IO, - ACPI_ADR_SPACE_PCI_CONFIG, - ACPI_ADR_SPACE_DATA_TABLE -}; - - -/******************************************************************************* - * - * FUNCTION: AcpiEvInstallRegionHandlers - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Installs the core subsystem default address space handlers. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvInstallRegionHandlers ( - void) -{ - ACPI_STATUS Status; - UINT32 i; - - - ACPI_FUNCTION_TRACE (EvInstallRegionHandlers); - - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * All address spaces (PCI Config, EC, SMBus) are scope dependent and - * registration must occur for a specific device. - * - * In the case of the system memory and IO address spaces there is - * currently no device associated with the address space. For these we - * use the root. - * - * We install the default PCI config space handler at the root so that - * this space is immediately available even though the we have not - * enumerated all the PCI Root Buses yet. This is to conform to the ACPI - * specification which states that the PCI config space must be always - * available -- even though we are nowhere near ready to find the PCI root - * buses at this point. - * - * NOTE: We ignore AE_ALREADY_EXISTS because this means that a handler - * has already been installed (via AcpiInstallAddressSpaceHandler). - * Similar for AE_SAME_HANDLER. - */ - for (i = 0; i < ACPI_NUM_DEFAULT_SPACES; i++) - { - Status = AcpiEvInstallSpaceHandler (AcpiGbl_RootNode, - AcpiGbl_DefaultAddressSpaces[i], - ACPI_DEFAULT_HANDLER, NULL, NULL); - switch (Status) - { - case AE_OK: - case AE_SAME_HANDLER: - case AE_ALREADY_EXISTS: - - /* These exceptions are all OK */ - - Status = AE_OK; - break; - - default: - - goto UnlockAndExit; - } - } - -UnlockAndExit: - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvHasDefaultHandler - * - * PARAMETERS: Node - Namespace node for the device - * SpaceId - The address space ID - * - * RETURN: TRUE if default handler is installed, FALSE otherwise - * - * DESCRIPTION: Check if the default handler is installed for the requested - * space ID. - * - ******************************************************************************/ - -static BOOLEAN -AcpiEvHasDefaultHandler ( - ACPI_NAMESPACE_NODE *Node, - ACPI_ADR_SPACE_TYPE SpaceId) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT *HandlerObj; - - - /* Must have an existing internal object */ - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (ObjDesc) - { - HandlerObj = ObjDesc->Device.Handler; - - /* Walk the linked list of handlers for this object */ - - while (HandlerObj) - { - if (HandlerObj->AddressSpace.SpaceId == SpaceId) - { - if (HandlerObj->AddressSpace.HandlerFlags & - ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) - { - return (TRUE); - } - } - - HandlerObj = HandlerObj->AddressSpace.Next; - } - } - - return (FALSE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvInitializeOpRegions - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Execute _REG methods for all Operation Regions that have - * an installed default region handler. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvInitializeOpRegions ( - void) -{ - ACPI_STATUS Status; - UINT32 i; - - - ACPI_FUNCTION_TRACE (EvInitializeOpRegions); - - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Run the _REG methods for OpRegions in each default address space */ - - for (i = 0; i < ACPI_NUM_DEFAULT_SPACES; i++) - { - /* - * Make sure the installed handler is the DEFAULT handler. If not the - * default, the _REG methods will have already been run (when the - * handler was installed) - */ - if (AcpiEvHasDefaultHandler (AcpiGbl_RootNode, - AcpiGbl_DefaultAddressSpaces[i])) - { - Status = AcpiEvExecuteRegMethods (AcpiGbl_RootNode, - AcpiGbl_DefaultAddressSpaces[i]); - } - } - - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvExecuteRegMethod - * - * PARAMETERS: RegionObj - Region object - * Function - Passed to _REG: On (1) or Off (0) - * - * RETURN: Status - * - * DESCRIPTION: Execute _REG method for a region - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvExecuteRegMethod ( - ACPI_OPERAND_OBJECT *RegionObj, - UINT32 Function) -{ - ACPI_EVALUATE_INFO *Info; - ACPI_OPERAND_OBJECT *Args[3]; - ACPI_OPERAND_OBJECT *RegionObj2; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvExecuteRegMethod); - - - RegionObj2 = AcpiNsGetSecondaryObject (RegionObj); - if (!RegionObj2) - { - return_ACPI_STATUS (AE_NOT_EXIST); - } - - if (RegionObj2->Extra.Method_REG == NULL) - { - return_ACPI_STATUS (AE_OK); - } - - /* Allocate and initialize the evaluation information block */ - - Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); - if (!Info) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - Info->PrefixNode = RegionObj2->Extra.Method_REG; - Info->Pathname = NULL; - Info->Parameters = Args; - Info->Flags = ACPI_IGNORE_RETURN_VALUE; - - /* - * The _REG method has two arguments: - * - * Arg0 - Integer: - * Operation region space ID Same value as RegionObj->Region.SpaceId - * - * Arg1 - Integer: - * connection status 1 for connecting the handler, 0 for disconnecting - * the handler (Passed as a parameter) - */ - Args[0] = AcpiUtCreateIntegerObject ((UINT64) RegionObj->Region.SpaceId); - if (!Args[0]) - { - Status = AE_NO_MEMORY; - goto Cleanup1; - } - - Args[1] = AcpiUtCreateIntegerObject ((UINT64) Function); - if (!Args[1]) - { - Status = AE_NO_MEMORY; - goto Cleanup2; - } - - Args[2] = NULL; /* Terminate list */ - - /* Execute the method, no return value */ - - ACPI_DEBUG_EXEC ( - AcpiUtDisplayInitPathname (ACPI_TYPE_METHOD, Info->PrefixNode, NULL)); - - Status = AcpiNsEvaluate (Info); - AcpiUtRemoveReference (Args[1]); - -Cleanup2: - AcpiUtRemoveReference (Args[0]); - -Cleanup1: - ACPI_FREE (Info); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvAddressSpaceDispatch - * - * PARAMETERS: RegionObj - Internal region object - * Function - Read or Write operation - * RegionOffset - Where in the region to read or write - * BitWidth - Field width in bits (8, 16, 32, or 64) - * Value - Pointer to in or out value, must be - * full 64-bit ACPI_INTEGER - * - * RETURN: Status - * - * DESCRIPTION: Dispatch an address space or operation region access to - * a previously installed handler. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvAddressSpaceDispatch ( - ACPI_OPERAND_OBJECT *RegionObj, - UINT32 Function, - UINT32 RegionOffset, - UINT32 BitWidth, - ACPI_INTEGER *Value) -{ - ACPI_STATUS Status; - ACPI_ADR_SPACE_HANDLER Handler; - ACPI_ADR_SPACE_SETUP RegionSetup; - ACPI_OPERAND_OBJECT *HandlerDesc; - ACPI_OPERAND_OBJECT *RegionObj2; - void *RegionContext = NULL; - - - ACPI_FUNCTION_TRACE (EvAddressSpaceDispatch); - - - RegionObj2 = AcpiNsGetSecondaryObject (RegionObj); - if (!RegionObj2) - { - return_ACPI_STATUS (AE_NOT_EXIST); - } - - /* Ensure that there is a handler associated with this region */ - - HandlerDesc = RegionObj->Region.Handler; - if (!HandlerDesc) - { - ACPI_ERROR ((AE_INFO, - "No handler for Region [%4.4s] (%p) [%s]", - AcpiUtGetNodeName (RegionObj->Region.Node), - RegionObj, AcpiUtGetRegionName (RegionObj->Region.SpaceId))); - - return_ACPI_STATUS (AE_NOT_EXIST); - } - - /* - * It may be the case that the region has never been initialized. - * Some types of regions require special init code - */ - if (!(RegionObj->Region.Flags & AOPOBJ_SETUP_COMPLETE)) - { - /* This region has not been initialized yet, do it */ - - RegionSetup = HandlerDesc->AddressSpace.Setup; - if (!RegionSetup) - { - /* No initialization routine, exit with error */ - - ACPI_ERROR ((AE_INFO, - "No init routine for region(%p) [%s]", - RegionObj, AcpiUtGetRegionName (RegionObj->Region.SpaceId))); - return_ACPI_STATUS (AE_NOT_EXIST); - } - - /* - * We must exit the interpreter because the region setup will - * potentially execute control methods (for example, the _REG method - * for this region) - */ - AcpiExExitInterpreter (); - - Status = RegionSetup (RegionObj, ACPI_REGION_ACTIVATE, - HandlerDesc->AddressSpace.Context, &RegionContext); - - /* Re-enter the interpreter */ - - AcpiExEnterInterpreter (); - - /* Check for failure of the Region Setup */ - - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "During region initialization: [%s]", - AcpiUtGetRegionName (RegionObj->Region.SpaceId))); - return_ACPI_STATUS (Status); - } - - /* Region initialization may have been completed by RegionSetup */ - - if (!(RegionObj->Region.Flags & AOPOBJ_SETUP_COMPLETE)) - { - RegionObj->Region.Flags |= AOPOBJ_SETUP_COMPLETE; - - if (RegionObj2->Extra.RegionContext) - { - /* The handler for this region was already installed */ - - ACPI_FREE (RegionContext); - } - else - { - /* - * Save the returned context for use in all accesses to - * this particular region - */ - RegionObj2->Extra.RegionContext = RegionContext; - } - } - } - - /* We have everything we need, we can invoke the address space handler */ - - Handler = HandlerDesc->AddressSpace.Handler; - - ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, - "Handler %p (@%p) Address %8.8X%8.8X [%s]\n", - &RegionObj->Region.Handler->AddressSpace, Handler, - ACPI_FORMAT_NATIVE_UINT (RegionObj->Region.Address + RegionOffset), - AcpiUtGetRegionName (RegionObj->Region.SpaceId))); - - if (!(HandlerDesc->AddressSpace.HandlerFlags & - ACPI_ADDR_HANDLER_DEFAULT_INSTALLED)) - { - /* - * For handlers other than the default (supplied) handlers, we must - * exit the interpreter because the handler *might* block -- we don't - * know what it will do, so we can't hold the lock on the intepreter. - */ - AcpiExExitInterpreter(); - } - - /* Call the handler */ - - Status = Handler (Function, - (RegionObj->Region.Address + RegionOffset), BitWidth, Value, - HandlerDesc->AddressSpace.Context, RegionObj2->Extra.RegionContext); - - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, "Returned by Handler for [%s]", - AcpiUtGetRegionName (RegionObj->Region.SpaceId))); - } - - if (!(HandlerDesc->AddressSpace.HandlerFlags & - ACPI_ADDR_HANDLER_DEFAULT_INSTALLED)) - { - /* - * We just returned from a non-default handler, we must re-enter the - * interpreter - */ - AcpiExEnterInterpreter (); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvDetachRegion - * - * PARAMETERS: RegionObj - Region Object - * AcpiNsIsLocked - Namespace Region Already Locked? - * - * RETURN: None - * - * DESCRIPTION: Break the association between the handler and the region - * this is a two way association. - * - ******************************************************************************/ - -void -AcpiEvDetachRegion( - ACPI_OPERAND_OBJECT *RegionObj, - BOOLEAN AcpiNsIsLocked) -{ - ACPI_OPERAND_OBJECT *HandlerObj; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT **LastObjPtr; - ACPI_ADR_SPACE_SETUP RegionSetup; - void **RegionContext; - ACPI_OPERAND_OBJECT *RegionObj2; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvDetachRegion); - - - RegionObj2 = AcpiNsGetSecondaryObject (RegionObj); - if (!RegionObj2) - { - return_VOID; - } - RegionContext = &RegionObj2->Extra.RegionContext; - - /* Get the address handler from the region object */ - - HandlerObj = RegionObj->Region.Handler; - if (!HandlerObj) - { - /* This region has no handler, all done */ - - return_VOID; - } - - /* Find this region in the handler's list */ - - ObjDesc = HandlerObj->AddressSpace.RegionList; - LastObjPtr = &HandlerObj->AddressSpace.RegionList; - - while (ObjDesc) - { - /* Is this the correct Region? */ - - if (ObjDesc == RegionObj) - { - ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, - "Removing Region %p from address handler %p\n", - RegionObj, HandlerObj)); - - /* This is it, remove it from the handler's list */ - - *LastObjPtr = ObjDesc->Region.Next; - ObjDesc->Region.Next = NULL; /* Must clear field */ - - if (AcpiNsIsLocked) - { - Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_VOID; - } - } - - /* Now stop region accesses by executing the _REG method */ - - Status = AcpiEvExecuteRegMethod (RegionObj, 0); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, "from region _REG, [%s]", - AcpiUtGetRegionName (RegionObj->Region.SpaceId))); - } - - if (AcpiNsIsLocked) - { - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_VOID; - } - } - - /* - * If the region has been activated, call the setup handler with - * the deactivate notification - */ - if (RegionObj->Region.Flags & AOPOBJ_SETUP_COMPLETE) - { - RegionSetup = HandlerObj->AddressSpace.Setup; - Status = RegionSetup (RegionObj, ACPI_REGION_DEACTIVATE, - HandlerObj->AddressSpace.Context, RegionContext); - - /* Init routine may fail, Just ignore errors */ - - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "from region handler - deactivate, [%s]", - AcpiUtGetRegionName (RegionObj->Region.SpaceId))); - } - - RegionObj->Region.Flags &= ~(AOPOBJ_SETUP_COMPLETE); - } - - /* - * Remove handler reference in the region - * - * NOTE: this doesn't mean that the region goes away, the region - * is just inaccessible as indicated to the _REG method - * - * If the region is on the handler's list, this must be the - * region's handler - */ - RegionObj->Region.Handler = NULL; - AcpiUtRemoveReference (HandlerObj); - - return_VOID; - } - - /* Walk the linked list of handlers */ - - LastObjPtr = &ObjDesc->Region.Next; - ObjDesc = ObjDesc->Region.Next; - } - - /* If we get here, the region was not in the handler's region list */ - - ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, - "Cannot remove region %p from address handler %p\n", - RegionObj, HandlerObj)); - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvAttachRegion - * - * PARAMETERS: HandlerObj - Handler Object - * RegionObj - Region Object - * AcpiNsIsLocked - Namespace Region Already Locked? - * - * RETURN: None - * - * DESCRIPTION: Create the association between the handler and the region - * this is a two way association. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvAttachRegion ( - ACPI_OPERAND_OBJECT *HandlerObj, - ACPI_OPERAND_OBJECT *RegionObj, - BOOLEAN AcpiNsIsLocked) -{ - - ACPI_FUNCTION_TRACE (EvAttachRegion); - - - ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, - "Adding Region [%4.4s] %p to address handler %p [%s]\n", - AcpiUtGetNodeName (RegionObj->Region.Node), - RegionObj, HandlerObj, - AcpiUtGetRegionName (RegionObj->Region.SpaceId))); - - /* Link this region to the front of the handler's list */ - - RegionObj->Region.Next = HandlerObj->AddressSpace.RegionList; - HandlerObj->AddressSpace.RegionList = RegionObj; - - /* Install the region's handler */ - - if (RegionObj->Region.Handler) - { - return_ACPI_STATUS (AE_ALREADY_EXISTS); - } - - RegionObj->Region.Handler = HandlerObj; - AcpiUtAddReference (HandlerObj); - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvInstallHandler - * - * PARAMETERS: WalkNamespace callback - * - * DESCRIPTION: This routine installs an address handler into objects that are - * of type Region or Device. - * - * If the Object is a Device, and the device has a handler of - * the same type then the search is terminated in that branch. - * - * This is because the existing handler is closer in proximity - * to any more regions than the one we are trying to install. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiEvInstallHandler ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue) -{ - ACPI_OPERAND_OBJECT *HandlerObj; - ACPI_OPERAND_OBJECT *NextHandlerObj; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - - - ACPI_FUNCTION_NAME (EvInstallHandler); - - - HandlerObj = (ACPI_OPERAND_OBJECT *) Context; - - /* Parameter validation */ - - if (!HandlerObj) - { - return (AE_OK); - } - - /* Convert and validate the device handle */ - - Node = AcpiNsValidateHandle (ObjHandle); - if (!Node) - { - return (AE_BAD_PARAMETER); - } - - /* - * We only care about regions and objects that are allowed to have - * address space handlers - */ - if ((Node->Type != ACPI_TYPE_DEVICE) && - (Node->Type != ACPI_TYPE_REGION) && - (Node != AcpiGbl_RootNode)) - { - return (AE_OK); - } - - /* Check for an existing internal object */ - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (!ObjDesc) - { - /* No object, just exit */ - - return (AE_OK); - } - - /* Devices are handled different than regions */ - - if (ObjDesc->Common.Type == ACPI_TYPE_DEVICE) - { - /* Check if this Device already has a handler for this address space */ - - NextHandlerObj = ObjDesc->Device.Handler; - while (NextHandlerObj) - { - /* Found a handler, is it for the same address space? */ - - if (NextHandlerObj->AddressSpace.SpaceId == - HandlerObj->AddressSpace.SpaceId) - { - ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, - "Found handler for region [%s] in device %p(%p) " - "handler %p\n", - AcpiUtGetRegionName (HandlerObj->AddressSpace.SpaceId), - ObjDesc, NextHandlerObj, HandlerObj)); - - /* - * Since the object we found it on was a device, then it - * means that someone has already installed a handler for - * the branch of the namespace from this device on. Just - * bail out telling the walk routine to not traverse this - * branch. This preserves the scoping rule for handlers. - */ - return (AE_CTRL_DEPTH); - } - - /* Walk the linked list of handlers attached to this device */ - - NextHandlerObj = NextHandlerObj->AddressSpace.Next; - } - - /* - * As long as the device didn't have a handler for this space we - * don't care about it. We just ignore it and proceed. - */ - return (AE_OK); - } - - /* Object is a Region */ - - if (ObjDesc->Region.SpaceId != HandlerObj->AddressSpace.SpaceId) - { - /* This region is for a different address space, just ignore it */ - - return (AE_OK); - } - - /* - * Now we have a region and it is for the handler's address space type. - * - * First disconnect region for any previous handler (if any) - */ - AcpiEvDetachRegion (ObjDesc, FALSE); - - /* Connect the region to the new handler */ - - Status = AcpiEvAttachRegion (HandlerObj, ObjDesc, FALSE); - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvInstallSpaceHandler - * - * PARAMETERS: Node - Namespace node for the device - * SpaceId - The address space ID - * Handler - Address of the handler - * Setup - Address of the setup function - * Context - Value passed to the handler on each access - * - * RETURN: Status - * - * DESCRIPTION: Install a handler for all OpRegions of a given SpaceId. - * Assumes namespace is locked - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvInstallSpaceHandler ( - ACPI_NAMESPACE_NODE *Node, - ACPI_ADR_SPACE_TYPE SpaceId, - ACPI_ADR_SPACE_HANDLER Handler, - ACPI_ADR_SPACE_SETUP Setup, - void *Context) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT *HandlerObj; - ACPI_STATUS Status; - ACPI_OBJECT_TYPE Type; - UINT8 Flags = 0; - - - ACPI_FUNCTION_TRACE (EvInstallSpaceHandler); - - - /* - * This registration is valid for only the types below and the root. This - * is where the default handlers get placed. - */ - if ((Node->Type != ACPI_TYPE_DEVICE) && - (Node->Type != ACPI_TYPE_PROCESSOR) && - (Node->Type != ACPI_TYPE_THERMAL) && - (Node != AcpiGbl_RootNode)) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - if (Handler == ACPI_DEFAULT_HANDLER) - { - Flags = ACPI_ADDR_HANDLER_DEFAULT_INSTALLED; - - switch (SpaceId) - { - case ACPI_ADR_SPACE_SYSTEM_MEMORY: - Handler = AcpiExSystemMemorySpaceHandler; - Setup = AcpiEvSystemMemoryRegionSetup; - break; - - case ACPI_ADR_SPACE_SYSTEM_IO: - Handler = AcpiExSystemIoSpaceHandler; - Setup = AcpiEvIoSpaceRegionSetup; - break; - - case ACPI_ADR_SPACE_PCI_CONFIG: - Handler = AcpiExPciConfigSpaceHandler; - Setup = AcpiEvPciConfigRegionSetup; - break; - - case ACPI_ADR_SPACE_CMOS: - Handler = AcpiExCmosSpaceHandler; - Setup = AcpiEvCmosRegionSetup; - break; - - case ACPI_ADR_SPACE_PCI_BAR_TARGET: - Handler = AcpiExPciBarSpaceHandler; - Setup = AcpiEvPciBarRegionSetup; - break; - - case ACPI_ADR_SPACE_DATA_TABLE: - Handler = AcpiExDataTableSpaceHandler; - Setup = NULL; - break; - - default: - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - } - - /* If the caller hasn't specified a setup routine, use the default */ - - if (!Setup) - { - Setup = AcpiEvDefaultRegionSetup; - } - - /* Check for an existing internal object */ - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (ObjDesc) - { - /* - * The attached device object already exists. Make sure the handler - * is not already installed. - */ - HandlerObj = ObjDesc->Device.Handler; - - /* Walk the handler list for this device */ - - while (HandlerObj) - { - /* Same SpaceId indicates a handler already installed */ - - if (HandlerObj->AddressSpace.SpaceId == SpaceId) - { - if (HandlerObj->AddressSpace.Handler == Handler) - { - /* - * It is (relatively) OK to attempt to install the SAME - * handler twice. This can easily happen with the - * PCI_Config space. - */ - Status = AE_SAME_HANDLER; - goto UnlockAndExit; - } - else - { - /* A handler is already installed */ - - Status = AE_ALREADY_EXISTS; - } - goto UnlockAndExit; - } - - /* Walk the linked list of handlers */ - - HandlerObj = HandlerObj->AddressSpace.Next; - } - } - else - { - ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, - "Creating object on Device %p while installing handler\n", Node)); - - /* ObjDesc does not exist, create one */ - - if (Node->Type == ACPI_TYPE_ANY) - { - Type = ACPI_TYPE_DEVICE; - } - else - { - Type = Node->Type; - } - - ObjDesc = AcpiUtCreateInternalObject (Type); - if (!ObjDesc) - { - Status = AE_NO_MEMORY; - goto UnlockAndExit; - } - - /* Init new descriptor */ - - ObjDesc->Common.Type = (UINT8) Type; - - /* Attach the new object to the Node */ - - Status = AcpiNsAttachObject (Node, ObjDesc, Type); - - /* Remove local reference to the object */ - - AcpiUtRemoveReference (ObjDesc); - - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - } - - ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, - "Installing address handler for region %s(%X) on Device %4.4s %p(%p)\n", - AcpiUtGetRegionName (SpaceId), SpaceId, - AcpiUtGetNodeName (Node), Node, ObjDesc)); - - /* - * Install the handler - * - * At this point there is no existing handler. Just allocate the object - * for the handler and link it into the list. - */ - HandlerObj = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_ADDRESS_HANDLER); - if (!HandlerObj) - { - Status = AE_NO_MEMORY; - goto UnlockAndExit; - } - - /* Init handler obj */ - - HandlerObj->AddressSpace.SpaceId = (UINT8) SpaceId; - HandlerObj->AddressSpace.HandlerFlags = Flags; - HandlerObj->AddressSpace.RegionList = NULL; - HandlerObj->AddressSpace.Node = Node; - HandlerObj->AddressSpace.Handler = Handler; - HandlerObj->AddressSpace.Context = Context; - HandlerObj->AddressSpace.Setup = Setup; - - /* Install at head of Device.AddressSpace list */ - - HandlerObj->AddressSpace.Next = ObjDesc->Device.Handler; - - /* - * The Device object is the first reference on the HandlerObj. - * Each region that uses the handler adds a reference. - */ - ObjDesc->Device.Handler = HandlerObj; - - /* - * Walk the namespace finding all of the regions this - * handler will manage. - * - * Start at the device and search the branch toward - * the leaf nodes until either the leaf is encountered or - * a device is detected that has an address handler of the - * same type. - * - * In either case, back up and search down the remainder - * of the branch - */ - Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, Node, ACPI_UINT32_MAX, - ACPI_NS_WALK_UNLOCK, AcpiEvInstallHandler, NULL, - HandlerObj, NULL); - -UnlockAndExit: - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvExecuteRegMethods - * - * PARAMETERS: Node - Namespace node for the device - * SpaceId - The address space ID - * - * RETURN: Status - * - * DESCRIPTION: Run all _REG methods for the input Space ID; - * Note: assumes namespace is locked, or system init time. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvExecuteRegMethods ( - ACPI_NAMESPACE_NODE *Node, - ACPI_ADR_SPACE_TYPE SpaceId) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvExecuteRegMethods); - - - /* - * Run all _REG methods for all Operation Regions for this space ID. This - * is a separate walk in order to handle any interdependencies between - * regions and _REG methods. (i.e. handlers must be installed for all - * regions of this Space ID before we can run any _REG methods) - */ - Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, Node, ACPI_UINT32_MAX, - ACPI_NS_WALK_UNLOCK, AcpiEvRegRun, NULL, - &SpaceId, NULL); - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvRegRun - * - * PARAMETERS: WalkNamespace callback - * - * DESCRIPTION: Run _REG method for region objects of the requested spaceID - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiEvRegRun ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_NAMESPACE_NODE *Node; - ACPI_ADR_SPACE_TYPE SpaceId; - ACPI_STATUS Status; - - - SpaceId = *ACPI_CAST_PTR (ACPI_ADR_SPACE_TYPE, Context); - - /* Convert and validate the device handle */ - - Node = AcpiNsValidateHandle (ObjHandle); - if (!Node) - { - return (AE_BAD_PARAMETER); - } - - /* - * We only care about regions.and objects that are allowed to have address - * space handlers - */ - if ((Node->Type != ACPI_TYPE_REGION) && - (Node != AcpiGbl_RootNode)) - { - return (AE_OK); - } - - /* Check for an existing internal object */ - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (!ObjDesc) - { - /* No object, just exit */ - - return (AE_OK); - } - - /* Object is a Region */ - - if (ObjDesc->Region.SpaceId != SpaceId) - { - /* This region is for a different address space, just ignore it */ - - return (AE_OK); - } - - Status = AcpiEvExecuteRegMethod (ObjDesc, 1); - return (Status); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/events/evrgnini.c b/l4/pkg/acpica/lib-acpi/src/acpica/events/evrgnini.c deleted file mode 100644 index 67f6cddf6..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/events/evrgnini.c +++ /dev/null @@ -1,799 +0,0 @@ -/****************************************************************************** - * - * Module Name: evrgnini- ACPI AddressSpace (OpRegion) init - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __EVRGNINI_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acevents.h" -#include "acnamesp.h" - -#define _COMPONENT ACPI_EVENTS - ACPI_MODULE_NAME ("evrgnini") - -/* Local prototypes */ - -static BOOLEAN -AcpiEvIsPciRootBridge ( - ACPI_NAMESPACE_NODE *Node); - - -/******************************************************************************* - * - * FUNCTION: AcpiEvSystemMemoryRegionSetup - * - * PARAMETERS: Handle - Region we are interested in - * Function - Start or stop - * HandlerContext - Address space handler context - * RegionContext - Region specific context - * - * RETURN: Status - * - * DESCRIPTION: Setup a SystemMemory operation region - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvSystemMemoryRegionSetup ( - ACPI_HANDLE Handle, - UINT32 Function, - void *HandlerContext, - void **RegionContext) -{ - ACPI_OPERAND_OBJECT *RegionDesc = (ACPI_OPERAND_OBJECT *) Handle; - ACPI_MEM_SPACE_CONTEXT *LocalRegionContext; - - - ACPI_FUNCTION_TRACE (EvSystemMemoryRegionSetup); - - - if (Function == ACPI_REGION_DEACTIVATE) - { - if (*RegionContext) - { - LocalRegionContext = (ACPI_MEM_SPACE_CONTEXT *) *RegionContext; - - /* Delete a cached mapping if present */ - - if (LocalRegionContext->MappedLength) - { - AcpiOsUnmapMemory (LocalRegionContext->MappedLogicalAddress, - LocalRegionContext->MappedLength); - } - ACPI_FREE (LocalRegionContext); - *RegionContext = NULL; - } - return_ACPI_STATUS (AE_OK); - } - - /* Create a new context */ - - LocalRegionContext = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_MEM_SPACE_CONTEXT)); - if (!(LocalRegionContext)) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Save the region length and address for use in the handler */ - - LocalRegionContext->Length = RegionDesc->Region.Length; - LocalRegionContext->Address = RegionDesc->Region.Address; - - *RegionContext = LocalRegionContext; - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvIoSpaceRegionSetup - * - * PARAMETERS: Handle - Region we are interested in - * Function - Start or stop - * HandlerContext - Address space handler context - * RegionContext - Region specific context - * - * RETURN: Status - * - * DESCRIPTION: Setup a IO operation region - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvIoSpaceRegionSetup ( - ACPI_HANDLE Handle, - UINT32 Function, - void *HandlerContext, - void **RegionContext) -{ - ACPI_FUNCTION_TRACE (EvIoSpaceRegionSetup); - - - if (Function == ACPI_REGION_DEACTIVATE) - { - *RegionContext = NULL; - } - else - { - *RegionContext = HandlerContext; - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvPciConfigRegionSetup - * - * PARAMETERS: Handle - Region we are interested in - * Function - Start or stop - * HandlerContext - Address space handler context - * RegionContext - Region specific context - * - * RETURN: Status - * - * DESCRIPTION: Setup a PCI_Config operation region - * - * MUTEX: Assumes namespace is not locked - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvPciConfigRegionSetup ( - ACPI_HANDLE Handle, - UINT32 Function, - void *HandlerContext, - void **RegionContext) -{ - ACPI_STATUS Status = AE_OK; - ACPI_INTEGER PciValue; - ACPI_PCI_ID *PciId = *RegionContext; - ACPI_OPERAND_OBJECT *HandlerObj; - ACPI_NAMESPACE_NODE *ParentNode; - ACPI_NAMESPACE_NODE *PciRootNode; - ACPI_NAMESPACE_NODE *PciDeviceNode; - ACPI_OPERAND_OBJECT *RegionObj = (ACPI_OPERAND_OBJECT *) Handle; - - - ACPI_FUNCTION_TRACE (EvPciConfigRegionSetup); - - - HandlerObj = RegionObj->Region.Handler; - if (!HandlerObj) - { - /* - * No installed handler. This shouldn't happen because the dispatch - * routine checks before we get here, but we check again just in case. - */ - ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, - "Attempting to init a region %p, with no handler\n", RegionObj)); - return_ACPI_STATUS (AE_NOT_EXIST); - } - - *RegionContext = NULL; - if (Function == ACPI_REGION_DEACTIVATE) - { - if (PciId) - { - ACPI_FREE (PciId); - } - return_ACPI_STATUS (Status); - } - - ParentNode = AcpiNsGetParentNode (RegionObj->Region.Node); - - /* - * Get the _SEG and _BBN values from the device upon which the handler - * is installed. - * - * We need to get the _SEG and _BBN objects relative to the PCI BUS device. - * This is the device the handler has been registered to handle. - */ - - /* - * If the AddressSpace.Node is still pointing to the root, we need - * to scan upward for a PCI Root bridge and re-associate the OpRegion - * handlers with that device. - */ - if (HandlerObj->AddressSpace.Node == AcpiGbl_RootNode) - { - /* Start search from the parent object */ - - PciRootNode = ParentNode; - while (PciRootNode != AcpiGbl_RootNode) - { - /* Get the _HID/_CID in order to detect a RootBridge */ - - if (AcpiEvIsPciRootBridge (PciRootNode)) - { - /* Install a handler for this PCI root bridge */ - - Status = AcpiInstallAddressSpaceHandler ( - (ACPI_HANDLE) PciRootNode, - ACPI_ADR_SPACE_PCI_CONFIG, - ACPI_DEFAULT_HANDLER, NULL, NULL); - if (ACPI_FAILURE (Status)) - { - if (Status == AE_SAME_HANDLER) - { - /* - * It is OK if the handler is already installed on the - * root bridge. Still need to return a context object - * for the new PCI_Config operation region, however. - */ - Status = AE_OK; - } - else - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not install PciConfig handler " - "for Root Bridge %4.4s", - AcpiUtGetNodeName (PciRootNode))); - } - } - break; - } - - PciRootNode = AcpiNsGetParentNode (PciRootNode); - } - - /* PCI root bridge not found, use namespace root node */ - } - else - { - PciRootNode = HandlerObj->AddressSpace.Node; - } - - /* - * If this region is now initialized, we are done. - * (InstallAddressSpaceHandler could have initialized it) - */ - if (RegionObj->Region.Flags & AOPOBJ_SETUP_COMPLETE) - { - return_ACPI_STATUS (AE_OK); - } - - /* Region is still not initialized. Create a new context */ - - PciId = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PCI_ID)); - if (!PciId) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* - * For PCI_Config space access, we need the segment, bus, device and - * function numbers. Acquire them here. - * - * Find the parent device object. (This allows the operation region to be - * within a subscope under the device, such as a control method.) - */ - PciDeviceNode = RegionObj->Region.Node; - while (PciDeviceNode && (PciDeviceNode->Type != ACPI_TYPE_DEVICE)) - { - PciDeviceNode = AcpiNsGetParentNode (PciDeviceNode); - } - - if (!PciDeviceNode) - { - ACPI_FREE (PciId); - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - /* - * Get the PCI device and function numbers from the _ADR object contained - * in the parent's scope. - */ - Status = AcpiUtEvaluateNumericObject (METHOD_NAME__ADR, - PciDeviceNode, &PciValue); - - /* - * The default is zero, and since the allocation above zeroed the data, - * just do nothing on failure. - */ - if (ACPI_SUCCESS (Status)) - { - PciId->Device = ACPI_HIWORD (ACPI_LODWORD (PciValue)); - PciId->Function = ACPI_LOWORD (ACPI_LODWORD (PciValue)); - } - - /* The PCI segment number comes from the _SEG method */ - - Status = AcpiUtEvaluateNumericObject (METHOD_NAME__SEG, - PciRootNode, &PciValue); - if (ACPI_SUCCESS (Status)) - { - PciId->Segment = ACPI_LOWORD (PciValue); - } - - /* The PCI bus number comes from the _BBN method */ - - Status = AcpiUtEvaluateNumericObject (METHOD_NAME__BBN, - PciRootNode, &PciValue); - if (ACPI_SUCCESS (Status)) - { - PciId->Bus = ACPI_LOWORD (PciValue); - } - - /* Complete this device's PciId */ - - AcpiOsDerivePciId (PciRootNode, RegionObj->Region.Node, &PciId); - - *RegionContext = PciId; - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvIsPciRootBridge - * - * PARAMETERS: Node - Device node being examined - * - * RETURN: TRUE if device is a PCI/PCI-Express Root Bridge - * - * DESCRIPTION: Determine if the input device represents a PCI Root Bridge by - * examining the _HID and _CID for the device. - * - ******************************************************************************/ - -static BOOLEAN -AcpiEvIsPciRootBridge ( - ACPI_NAMESPACE_NODE *Node) -{ - ACPI_STATUS Status; - ACPI_DEVICE_ID *Hid; - ACPI_DEVICE_ID_LIST *Cid; - UINT32 i; - BOOLEAN Match; - - - /* Get the _HID and check for a PCI Root Bridge */ - - Status = AcpiUtExecute_HID (Node, &Hid); - if (ACPI_FAILURE (Status)) - { - return (FALSE); - } - - Match = AcpiUtIsPciRootBridge (Hid->String); - ACPI_FREE (Hid); - - if (Match) - { - return (TRUE); - } - - /* The _HID did not match. Get the _CID and check for a PCI Root Bridge */ - - Status = AcpiUtExecute_CID (Node, &Cid); - if (ACPI_FAILURE (Status)) - { - return (FALSE); - } - - /* Check all _CIDs in the returned list */ - - for (i = 0; i < Cid->Count; i++) - { - if (AcpiUtIsPciRootBridge (Cid->Ids[i].String)) - { - ACPI_FREE (Cid); - return (TRUE); - } - } - - ACPI_FREE (Cid); - return (FALSE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvPciBarRegionSetup - * - * PARAMETERS: Handle - Region we are interested in - * Function - Start or stop - * HandlerContext - Address space handler context - * RegionContext - Region specific context - * - * RETURN: Status - * - * DESCRIPTION: Setup a PciBAR operation region - * - * MUTEX: Assumes namespace is not locked - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvPciBarRegionSetup ( - ACPI_HANDLE Handle, - UINT32 Function, - void *HandlerContext, - void **RegionContext) -{ - ACPI_FUNCTION_TRACE (EvPciBarRegionSetup); - - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvCmosRegionSetup - * - * PARAMETERS: Handle - Region we are interested in - * Function - Start or stop - * HandlerContext - Address space handler context - * RegionContext - Region specific context - * - * RETURN: Status - * - * DESCRIPTION: Setup a CMOS operation region - * - * MUTEX: Assumes namespace is not locked - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvCmosRegionSetup ( - ACPI_HANDLE Handle, - UINT32 Function, - void *HandlerContext, - void **RegionContext) -{ - ACPI_FUNCTION_TRACE (EvCmosRegionSetup); - - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvDefaultRegionSetup - * - * PARAMETERS: Handle - Region we are interested in - * Function - Start or stop - * HandlerContext - Address space handler context - * RegionContext - Region specific context - * - * RETURN: Status - * - * DESCRIPTION: Default region initialization - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvDefaultRegionSetup ( - ACPI_HANDLE Handle, - UINT32 Function, - void *HandlerContext, - void **RegionContext) -{ - ACPI_FUNCTION_TRACE (EvDefaultRegionSetup); - - - if (Function == ACPI_REGION_DEACTIVATE) - { - *RegionContext = NULL; - } - else - { - *RegionContext = HandlerContext; - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvInitializeRegion - * - * PARAMETERS: RegionObj - Region we are initializing - * AcpiNsLocked - Is namespace locked? - * - * RETURN: Status - * - * DESCRIPTION: Initializes the region, finds any _REG methods and saves them - * for execution at a later time - * - * Get the appropriate address space handler for a newly - * created region. - * - * This also performs address space specific initialization. For - * example, PCI regions must have an _ADR object that contains - * a PCI address in the scope of the definition. This address is - * required to perform an access to PCI config space. - * - * MUTEX: Interpreter should be unlocked, because we may run the _REG - * method for this region. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvInitializeRegion ( - ACPI_OPERAND_OBJECT *RegionObj, - BOOLEAN AcpiNsLocked) -{ - ACPI_OPERAND_OBJECT *HandlerObj; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_ADR_SPACE_TYPE SpaceId; - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *MethodNode; - ACPI_NAME *RegNamePtr = (ACPI_NAME *) METHOD_NAME__REG; - ACPI_OPERAND_OBJECT *RegionObj2; - - - ACPI_FUNCTION_TRACE_U32 (EvInitializeRegion, AcpiNsLocked); - - - if (!RegionObj) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - if (RegionObj->Common.Flags & AOPOBJ_OBJECT_INITIALIZED) - { - return_ACPI_STATUS (AE_OK); - } - - RegionObj2 = AcpiNsGetSecondaryObject (RegionObj); - if (!RegionObj2) - { - return_ACPI_STATUS (AE_NOT_EXIST); - } - - Node = AcpiNsGetParentNode (RegionObj->Region.Node); - SpaceId = RegionObj->Region.SpaceId; - - /* Setup defaults */ - - RegionObj->Region.Handler = NULL; - RegionObj2->Extra.Method_REG = NULL; - RegionObj->Common.Flags &= ~(AOPOBJ_SETUP_COMPLETE); - RegionObj->Common.Flags |= AOPOBJ_OBJECT_INITIALIZED; - - /* Find any "_REG" method associated with this region definition */ - - Status = AcpiNsSearchOneScope ( - *RegNamePtr, Node, ACPI_TYPE_METHOD, &MethodNode); - if (ACPI_SUCCESS (Status)) - { - /* - * The _REG method is optional and there can be only one per region - * definition. This will be executed when the handler is attached - * or removed - */ - RegionObj2->Extra.Method_REG = MethodNode; - } - - /* - * The following loop depends upon the root Node having no parent - * ie: AcpiGbl_RootNode->ParentEntry being set to NULL - */ - while (Node) - { - /* Check to see if a handler exists */ - - HandlerObj = NULL; - ObjDesc = AcpiNsGetAttachedObject (Node); - if (ObjDesc) - { - /* Can only be a handler if the object exists */ - - switch (Node->Type) - { - case ACPI_TYPE_DEVICE: - - HandlerObj = ObjDesc->Device.Handler; - break; - - case ACPI_TYPE_PROCESSOR: - - HandlerObj = ObjDesc->Processor.Handler; - break; - - case ACPI_TYPE_THERMAL: - - HandlerObj = ObjDesc->ThermalZone.Handler; - break; - - case ACPI_TYPE_METHOD: - /* - * If we are executing module level code, the original - * Node's object was replaced by this Method object and we - * saved the handler in the method object. - * - * See AcpiNsExecModuleCode - */ - if (ObjDesc->Method.Flags & AOPOBJ_MODULE_LEVEL) - { - HandlerObj = ObjDesc->Method.Extra.Handler; - } - break; - - default: - /* Ignore other objects */ - break; - } - - while (HandlerObj) - { - /* Is this handler of the correct type? */ - - if (HandlerObj->AddressSpace.SpaceId == SpaceId) - { - /* Found correct handler */ - - ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, - "Found handler %p for region %p in obj %p\n", - HandlerObj, RegionObj, ObjDesc)); - - Status = AcpiEvAttachRegion (HandlerObj, RegionObj, - AcpiNsLocked); - - /* - * Tell all users that this region is usable by - * running the _REG method - */ - if (AcpiNsLocked) - { - Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - Status = AcpiEvExecuteRegMethod (RegionObj, 1); - - if (AcpiNsLocked) - { - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - return_ACPI_STATUS (AE_OK); - } - - /* Try next handler in the list */ - - HandlerObj = HandlerObj->AddressSpace.Next; - } - } - - /* This node does not have the handler we need; Pop up one level */ - - Node = AcpiNsGetParentNode (Node); - } - - /* If we get here, there is no handler for this region */ - - ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, - "No handler for RegionType %s(%X) (RegionObj %p)\n", - AcpiUtGetRegionName (SpaceId), SpaceId, RegionObj)); - - return_ACPI_STATUS (AE_NOT_EXIST); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/events/evsci.c b/l4/pkg/acpica/lib-acpi/src/acpica/events/evsci.c deleted file mode 100644 index cde433ce3..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/events/evsci.c +++ /dev/null @@ -1,280 +0,0 @@ -/******************************************************************************* - * - * Module Name: evsci - System Control Interrupt configuration and - * legacy to ACPI mode state transition functions - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#include "acpi.h" -#include "accommon.h" -#include "acevents.h" - - -#define _COMPONENT ACPI_EVENTS - ACPI_MODULE_NAME ("evsci") - -/* Local prototypes */ - -static UINT32 ACPI_SYSTEM_XFACE -AcpiEvSciXruptHandler ( - void *Context); - - -/******************************************************************************* - * - * FUNCTION: AcpiEvSciXruptHandler - * - * PARAMETERS: Context - Calling Context - * - * RETURN: Status code indicates whether interrupt was handled. - * - * DESCRIPTION: Interrupt handler that will figure out what function or - * control method to call to deal with a SCI. - * - ******************************************************************************/ - -static UINT32 ACPI_SYSTEM_XFACE -AcpiEvSciXruptHandler ( - void *Context) -{ - ACPI_GPE_XRUPT_INFO *GpeXruptList = Context; - UINT32 InterruptHandled = ACPI_INTERRUPT_NOT_HANDLED; - - - ACPI_FUNCTION_TRACE (EvSciXruptHandler); - - - /* - * We are guaranteed by the ACPI CA initialization/shutdown code that - * if this interrupt handler is installed, ACPI is enabled. - */ - - /* - * Fixed Events: - * Check for and dispatch any Fixed Events that have occurred - */ - InterruptHandled |= AcpiEvFixedEventDetect (); - - /* - * General Purpose Events: - * Check for and dispatch any GPEs that have occurred - */ - InterruptHandled |= AcpiEvGpeDetect (GpeXruptList); - - AcpiSciCount++; - return_UINT32 (InterruptHandled); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiEvGpeXruptHandler - * - * PARAMETERS: Context - Calling Context - * - * RETURN: Status code indicates whether interrupt was handled. - * - * DESCRIPTION: Handler for GPE Block Device interrupts - * - ******************************************************************************/ - -UINT32 ACPI_SYSTEM_XFACE -AcpiEvGpeXruptHandler ( - void *Context) -{ - ACPI_GPE_XRUPT_INFO *GpeXruptList = Context; - UINT32 InterruptHandled = ACPI_INTERRUPT_NOT_HANDLED; - - - ACPI_FUNCTION_TRACE (EvGpeXruptHandler); - - - /* - * We are guaranteed by the ACPI CA initialization/shutdown code that - * if this interrupt handler is installed, ACPI is enabled. - */ - - /* GPEs: Check for and dispatch any GPEs that have occurred */ - - InterruptHandled |= AcpiEvGpeDetect (GpeXruptList); - - return_UINT32 (InterruptHandled); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiEvInstallSciHandler - * - * PARAMETERS: none - * - * RETURN: Status - * - * DESCRIPTION: Installs SCI handler. - * - ******************************************************************************/ - -UINT32 -AcpiEvInstallSciHandler ( - void) -{ - UINT32 Status = AE_OK; - - - ACPI_FUNCTION_TRACE (EvInstallSciHandler); - - - Status = AcpiOsInstallInterruptHandler ((UINT32) AcpiGbl_FADT.SciInterrupt, - AcpiEvSciXruptHandler, AcpiGbl_GpeXruptListHead); - return_ACPI_STATUS (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiEvRemoveSciHandler - * - * PARAMETERS: none - * - * RETURN: E_OK if handler uninstalled OK, E_ERROR if handler was not - * installed to begin with - * - * DESCRIPTION: Remove the SCI interrupt handler. No further SCIs will be - * taken. - * - * Note: It doesn't seem important to disable all events or set the event - * enable registers to their original values. The OS should disable - * the SCI interrupt level when the handler is removed, so no more - * events will come in. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvRemoveSciHandler ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (EvRemoveSciHandler); - - - /* Just let the OS remove the handler and disable the level */ - - Status = AcpiOsRemoveInterruptHandler ((UINT32) AcpiGbl_FADT.SciInterrupt, - AcpiEvSciXruptHandler); - - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/events/evxface.c b/l4/pkg/acpica/lib-acpi/src/acpica/events/evxface.c deleted file mode 100644 index 6eb5a14af..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/events/evxface.c +++ /dev/null @@ -1,967 +0,0 @@ -/****************************************************************************** - * - * Module Name: evxface - External interfaces for ACPI events - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __EVXFACE_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "acevents.h" -#include "acinterp.h" - -#define _COMPONENT ACPI_EVENTS - ACPI_MODULE_NAME ("evxface") - - -/******************************************************************************* - * - * FUNCTION: AcpiInstallExceptionHandler - * - * PARAMETERS: Handler - Pointer to the handler function for the - * event - * - * RETURN: Status - * - * DESCRIPTION: Saves the pointer to the handler function - * - ******************************************************************************/ - -ACPI_STATUS -AcpiInstallExceptionHandler ( - ACPI_EXCEPTION_HANDLER Handler) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiInstallExceptionHandler); - - - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Don't allow two handlers. */ - - if (AcpiGbl_ExceptionHandler) - { - Status = AE_ALREADY_EXISTS; - goto Cleanup; - } - - /* Install the handler */ - - AcpiGbl_ExceptionHandler = Handler; - -Cleanup: - (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiInstallExceptionHandler) - - -/******************************************************************************* - * - * FUNCTION: AcpiInstallFixedEventHandler - * - * PARAMETERS: Event - Event type to enable. - * Handler - Pointer to the handler function for the - * event - * Context - Value passed to the handler on each GPE - * - * RETURN: Status - * - * DESCRIPTION: Saves the pointer to the handler function and then enables the - * event. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiInstallFixedEventHandler ( - UINT32 Event, - ACPI_EVENT_HANDLER Handler, - void *Context) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiInstallFixedEventHandler); - - - /* Parameter validation */ - - if (Event > ACPI_EVENT_MAX) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Don't allow two handlers. */ - - if (NULL != AcpiGbl_FixedEventHandlers[Event].Handler) - { - Status = AE_ALREADY_EXISTS; - goto Cleanup; - } - - /* Install the handler before enabling the event */ - - AcpiGbl_FixedEventHandlers[Event].Handler = Handler; - AcpiGbl_FixedEventHandlers[Event].Context = Context; - - Status = AcpiEnableEvent (Event, 0); - if (ACPI_FAILURE (Status)) - { - ACPI_WARNING ((AE_INFO, "Could not enable fixed event %X", Event)); - - /* Remove the handler */ - - AcpiGbl_FixedEventHandlers[Event].Handler = NULL; - AcpiGbl_FixedEventHandlers[Event].Context = NULL; - } - else - { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Enabled fixed event %X, Handler=%p\n", Event, Handler)); - } - - -Cleanup: - (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiInstallFixedEventHandler) - - -/******************************************************************************* - * - * FUNCTION: AcpiRemoveFixedEventHandler - * - * PARAMETERS: Event - Event type to disable. - * Handler - Address of the handler - * - * RETURN: Status - * - * DESCRIPTION: Disables the event and unregisters the event handler. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRemoveFixedEventHandler ( - UINT32 Event, - ACPI_EVENT_HANDLER Handler) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (AcpiRemoveFixedEventHandler); - - - /* Parameter validation */ - - if (Event > ACPI_EVENT_MAX) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Disable the event before removing the handler */ - - Status = AcpiDisableEvent (Event, 0); - - /* Always Remove the handler */ - - AcpiGbl_FixedEventHandlers[Event].Handler = NULL; - AcpiGbl_FixedEventHandlers[Event].Context = NULL; - - if (ACPI_FAILURE (Status)) - { - ACPI_WARNING ((AE_INFO, - "Could not write to fixed event enable register %X", Event)); - } - else - { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Disabled fixed event %X\n", Event)); - } - - (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiRemoveFixedEventHandler) - - -/******************************************************************************* - * - * FUNCTION: AcpiInstallNotifyHandler - * - * PARAMETERS: Device - The device for which notifies will be handled - * HandlerType - The type of handler: - * ACPI_SYSTEM_NOTIFY: SystemHandler (00-7f) - * ACPI_DEVICE_NOTIFY: DriverHandler (80-ff) - * ACPI_ALL_NOTIFY: both system and device - * Handler - Address of the handler - * Context - Value passed to the handler on each GPE - * - * RETURN: Status - * - * DESCRIPTION: Install a handler for notifies on an ACPI device - * - ******************************************************************************/ - -ACPI_STATUS -AcpiInstallNotifyHandler ( - ACPI_HANDLE Device, - UINT32 HandlerType, - ACPI_NOTIFY_HANDLER Handler, - void *Context) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT *NotifyObj; - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiInstallNotifyHandler); - - - /* Parameter validation */ - - if ((!Device) || - (!Handler) || - (HandlerType > ACPI_MAX_NOTIFY_HANDLER_TYPE)) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Convert and validate the device handle */ - - Node = AcpiNsValidateHandle (Device); - if (!Node) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* - * Root Object: - * Registering a notify handler on the root object indicates that the - * caller wishes to receive notifications for all objects. Note that - * only one global handler can be regsitered (per notify type). - */ - if (Device == ACPI_ROOT_OBJECT) - { - /* Make sure the handler is not already installed */ - - if (((HandlerType & ACPI_SYSTEM_NOTIFY) && - AcpiGbl_SystemNotify.Handler) || - ((HandlerType & ACPI_DEVICE_NOTIFY) && - AcpiGbl_DeviceNotify.Handler)) - { - Status = AE_ALREADY_EXISTS; - goto UnlockAndExit; - } - - if (HandlerType & ACPI_SYSTEM_NOTIFY) - { - AcpiGbl_SystemNotify.Node = Node; - AcpiGbl_SystemNotify.Handler = Handler; - AcpiGbl_SystemNotify.Context = Context; - } - - if (HandlerType & ACPI_DEVICE_NOTIFY) - { - AcpiGbl_DeviceNotify.Node = Node; - AcpiGbl_DeviceNotify.Handler = Handler; - AcpiGbl_DeviceNotify.Context = Context; - } - - /* Global notify handler installed */ - } - - /* - * All Other Objects: - * Caller will only receive notifications specific to the target object. - * Note that only certain object types can receive notifications. - */ - else - { - /* Notifies allowed on this object? */ - - if (!AcpiEvIsNotifyObject (Node)) - { - Status = AE_TYPE; - goto UnlockAndExit; - } - - /* Check for an existing internal object */ - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (ObjDesc) - { - /* Object exists - make sure there's no handler */ - - if (((HandlerType & ACPI_SYSTEM_NOTIFY) && - ObjDesc->CommonNotify.SystemNotify) || - ((HandlerType & ACPI_DEVICE_NOTIFY) && - ObjDesc->CommonNotify.DeviceNotify)) - { - Status = AE_ALREADY_EXISTS; - goto UnlockAndExit; - } - } - else - { - /* Create a new object */ - - ObjDesc = AcpiUtCreateInternalObject (Node->Type); - if (!ObjDesc) - { - Status = AE_NO_MEMORY; - goto UnlockAndExit; - } - - /* Attach new object to the Node */ - - Status = AcpiNsAttachObject (Device, ObjDesc, Node->Type); - - /* Remove local reference to the object */ - - AcpiUtRemoveReference (ObjDesc); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - } - - /* Install the handler */ - - NotifyObj = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_NOTIFY); - if (!NotifyObj) - { - Status = AE_NO_MEMORY; - goto UnlockAndExit; - } - - NotifyObj->Notify.Node = Node; - NotifyObj->Notify.Handler = Handler; - NotifyObj->Notify.Context = Context; - - if (HandlerType & ACPI_SYSTEM_NOTIFY) - { - ObjDesc->CommonNotify.SystemNotify = NotifyObj; - } - - if (HandlerType & ACPI_DEVICE_NOTIFY) - { - ObjDesc->CommonNotify.DeviceNotify = NotifyObj; - } - - if (HandlerType == ACPI_ALL_NOTIFY) - { - /* Extra ref if installed in both */ - - AcpiUtAddReference (NotifyObj); - } - } - - -UnlockAndExit: - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiInstallNotifyHandler) - - -/******************************************************************************* - * - * FUNCTION: AcpiRemoveNotifyHandler - * - * PARAMETERS: Device - The device for which notifies will be handled - * HandlerType - The type of handler: - * ACPI_SYSTEM_NOTIFY: SystemHandler (00-7f) - * ACPI_DEVICE_NOTIFY: DriverHandler (80-ff) - * ACPI_ALL_NOTIFY: both system and device - * Handler - Address of the handler - * - * RETURN: Status - * - * DESCRIPTION: Remove a handler for notifies on an ACPI device - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRemoveNotifyHandler ( - ACPI_HANDLE Device, - UINT32 HandlerType, - ACPI_NOTIFY_HANDLER Handler) -{ - ACPI_OPERAND_OBJECT *NotifyObj; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiRemoveNotifyHandler); - - - /* Parameter validation */ - - if ((!Device) || - (!Handler) || - (HandlerType > ACPI_MAX_NOTIFY_HANDLER_TYPE)) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Convert and validate the device handle */ - - Node = AcpiNsValidateHandle (Device); - if (!Node) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* Root Object */ - - if (Device == ACPI_ROOT_OBJECT) - { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Removing notify handler for namespace root object\n")); - - if (((HandlerType & ACPI_SYSTEM_NOTIFY) && - !AcpiGbl_SystemNotify.Handler) || - ((HandlerType & ACPI_DEVICE_NOTIFY) && - !AcpiGbl_DeviceNotify.Handler)) - { - Status = AE_NOT_EXIST; - goto UnlockAndExit; - } - - if (HandlerType & ACPI_SYSTEM_NOTIFY) - { - AcpiGbl_SystemNotify.Node = NULL; - AcpiGbl_SystemNotify.Handler = NULL; - AcpiGbl_SystemNotify.Context = NULL; - } - - if (HandlerType & ACPI_DEVICE_NOTIFY) - { - AcpiGbl_DeviceNotify.Node = NULL; - AcpiGbl_DeviceNotify.Handler = NULL; - AcpiGbl_DeviceNotify.Context = NULL; - } - } - - /* All Other Objects */ - - else - { - /* Notifies allowed on this object? */ - - if (!AcpiEvIsNotifyObject (Node)) - { - Status = AE_TYPE; - goto UnlockAndExit; - } - - /* Check for an existing internal object */ - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (!ObjDesc) - { - Status = AE_NOT_EXIST; - goto UnlockAndExit; - } - - /* Object exists - make sure there's an existing handler */ - - if (HandlerType & ACPI_SYSTEM_NOTIFY) - { - NotifyObj = ObjDesc->CommonNotify.SystemNotify; - if (!NotifyObj) - { - Status = AE_NOT_EXIST; - goto UnlockAndExit; - } - - if (NotifyObj->Notify.Handler != Handler) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* Remove the handler */ - - ObjDesc->CommonNotify.SystemNotify = NULL; - AcpiUtRemoveReference (NotifyObj); - } - - if (HandlerType & ACPI_DEVICE_NOTIFY) - { - NotifyObj = ObjDesc->CommonNotify.DeviceNotify; - if (!NotifyObj) - { - Status = AE_NOT_EXIST; - goto UnlockAndExit; - } - - if (NotifyObj->Notify.Handler != Handler) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* Remove the handler */ - - ObjDesc->CommonNotify.DeviceNotify = NULL; - AcpiUtRemoveReference (NotifyObj); - } - } - - -UnlockAndExit: - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiRemoveNotifyHandler) - - -/******************************************************************************* - * - * FUNCTION: AcpiInstallGpeHandler - * - * PARAMETERS: GpeDevice - Namespace node for the GPE (NULL for FADT - * defined GPEs) - * GpeNumber - The GPE number within the GPE block - * Type - Whether this GPE should be treated as an - * edge- or level-triggered interrupt. - * Address - Address of the handler - * Context - Value passed to the handler on each GPE - * - * RETURN: Status - * - * DESCRIPTION: Install a handler for a General Purpose Event. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiInstallGpeHandler ( - ACPI_HANDLE GpeDevice, - UINT32 GpeNumber, - UINT32 Type, - ACPI_EVENT_HANDLER Address, - void *Context) -{ - ACPI_GPE_EVENT_INFO *GpeEventInfo; - ACPI_HANDLER_INFO *Handler; - ACPI_STATUS Status; - ACPI_CPU_FLAGS Flags; - - - ACPI_FUNCTION_TRACE (AcpiInstallGpeHandler); - - - /* Parameter validation */ - - if ((!Address) || (Type > ACPI_GPE_XRUPT_TYPE_MASK)) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Ensure that we have a valid GPE number */ - - GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); - if (!GpeEventInfo) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* Make sure that there isn't a handler there already */ - - if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) == - ACPI_GPE_DISPATCH_HANDLER) - { - Status = AE_ALREADY_EXISTS; - goto UnlockAndExit; - } - - /* Allocate and init handler object */ - - Handler = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_HANDLER_INFO)); - if (!Handler) - { - Status = AE_NO_MEMORY; - goto UnlockAndExit; - } - - Handler->Address = Address; - Handler->Context = Context; - Handler->MethodNode = GpeEventInfo->Dispatch.MethodNode; - - /* Disable the GPE before installing the handler */ - - Status = AcpiEvDisableGpe (GpeEventInfo); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - - /* Install the handler */ - - Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); - GpeEventInfo->Dispatch.Handler = Handler; - - /* Setup up dispatch flags to indicate handler (vs. method) */ - - GpeEventInfo->Flags &= ~(ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK); - GpeEventInfo->Flags |= (UINT8) (Type | ACPI_GPE_DISPATCH_HANDLER); - - AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); - - -UnlockAndExit: - (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiInstallGpeHandler) - - -/******************************************************************************* - * - * FUNCTION: AcpiRemoveGpeHandler - * - * PARAMETERS: GpeDevice - Namespace node for the GPE (NULL for FADT - * defined GPEs) - * GpeNumber - The event to remove a handler - * Address - Address of the handler - * - * RETURN: Status - * - * DESCRIPTION: Remove a handler for a General Purpose AcpiEvent. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRemoveGpeHandler ( - ACPI_HANDLE GpeDevice, - UINT32 GpeNumber, - ACPI_EVENT_HANDLER Address) -{ - ACPI_GPE_EVENT_INFO *GpeEventInfo; - ACPI_HANDLER_INFO *Handler; - ACPI_STATUS Status; - ACPI_CPU_FLAGS Flags; - - - ACPI_FUNCTION_TRACE (AcpiRemoveGpeHandler); - - - /* Parameter validation */ - - if (!Address) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Ensure that we have a valid GPE number */ - - GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); - if (!GpeEventInfo) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* Make sure that a handler is indeed installed */ - - if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) != - ACPI_GPE_DISPATCH_HANDLER) - { - Status = AE_NOT_EXIST; - goto UnlockAndExit; - } - - /* Make sure that the installed handler is the same */ - - if (GpeEventInfo->Dispatch.Handler->Address != Address) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* Disable the GPE before removing the handler */ - - Status = AcpiEvDisableGpe (GpeEventInfo); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - - /* Remove the handler */ - - Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); - Handler = GpeEventInfo->Dispatch.Handler; - - /* Restore Method node (if any), set dispatch flags */ - - GpeEventInfo->Dispatch.MethodNode = Handler->MethodNode; - GpeEventInfo->Flags &= ~ACPI_GPE_DISPATCH_MASK; /* Clear bits */ - if (Handler->MethodNode) - { - GpeEventInfo->Flags |= ACPI_GPE_DISPATCH_METHOD; - } - AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); - - /* Now we can free the handler object */ - - ACPI_FREE (Handler); - - -UnlockAndExit: - (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiRemoveGpeHandler) - - -/******************************************************************************* - * - * FUNCTION: AcpiAcquireGlobalLock - * - * PARAMETERS: Timeout - How long the caller is willing to wait - * Handle - Where the handle to the lock is returned - * (if acquired) - * - * RETURN: Status - * - * DESCRIPTION: Acquire the ACPI Global Lock - * - * Note: Allows callers with the same thread ID to acquire the global lock - * multiple times. In other words, externally, the behavior of the global lock - * is identical to an AML mutex. On the first acquire, a new handle is - * returned. On any subsequent calls to acquire by the same thread, the same - * handle is returned. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiAcquireGlobalLock ( - UINT16 Timeout, - UINT32 *Handle) -{ - ACPI_STATUS Status; - - - if (!Handle) - { - return (AE_BAD_PARAMETER); - } - - /* Must lock interpreter to prevent race conditions */ - - AcpiExEnterInterpreter (); - - Status = AcpiExAcquireMutexObject (Timeout, - AcpiGbl_GlobalLockMutex, AcpiOsGetThreadId ()); - - if (ACPI_SUCCESS (Status)) - { - /* Return the global lock handle (updated in AcpiEvAcquireGlobalLock) */ - - *Handle = AcpiGbl_GlobalLockHandle; - } - - AcpiExExitInterpreter (); - return (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiAcquireGlobalLock) - - -/******************************************************************************* - * - * FUNCTION: AcpiReleaseGlobalLock - * - * PARAMETERS: Handle - Returned from AcpiAcquireGlobalLock - * - * RETURN: Status - * - * DESCRIPTION: Release the ACPI Global Lock. The handle must be valid. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiReleaseGlobalLock ( - UINT32 Handle) -{ - ACPI_STATUS Status; - - - if (!Handle || (Handle != AcpiGbl_GlobalLockHandle)) - { - return (AE_NOT_ACQUIRED); - } - - Status = AcpiExReleaseMutexObject (AcpiGbl_GlobalLockMutex); - return (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiReleaseGlobalLock) - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/events/evxfevnt.c b/l4/pkg/acpica/lib-acpi/src/acpica/events/evxfevnt.c deleted file mode 100644 index 27066a399..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/events/evxfevnt.c +++ /dev/null @@ -1,1112 +0,0 @@ -/****************************************************************************** - * - * Module Name: evxfevnt - External Interfaces, ACPI event disable/enable - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __EVXFEVNT_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acevents.h" -#include "acnamesp.h" -#include "actables.h" - -#define _COMPONENT ACPI_EVENTS - ACPI_MODULE_NAME ("evxfevnt") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiEvGetGpeDevice ( - ACPI_GPE_XRUPT_INFO *GpeXruptInfo, - ACPI_GPE_BLOCK_INFO *GpeBlock, - void *Context); - - -/******************************************************************************* - * - * FUNCTION: AcpiEnable - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Transfers the system into ACPI mode. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEnable ( - void) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (AcpiEnable); - - - /* ACPI tables must be present */ - - if (!AcpiTbTablesLoaded ()) - { - return_ACPI_STATUS (AE_NO_ACPI_TABLES); - } - - /* Check current mode */ - - if (AcpiHwGetMode() == ACPI_SYS_MODE_ACPI) - { - ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "System is already in ACPI mode\n")); - } - else - { - /* Transition to ACPI mode */ - - Status = AcpiHwSetMode (ACPI_SYS_MODE_ACPI); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR ((AE_INFO, "Could not transition to ACPI mode")); - return_ACPI_STATUS (Status); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_INIT, - "Transition to ACPI mode successful\n")); - } - - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiEnable) - - -/******************************************************************************* - * - * FUNCTION: AcpiDisable - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Transfers the system into LEGACY (non-ACPI) mode. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDisable ( - void) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (AcpiDisable); - - - if (AcpiHwGetMode() == ACPI_SYS_MODE_LEGACY) - { - ACPI_DEBUG_PRINT ((ACPI_DB_INIT, - "System is already in legacy (non-ACPI) mode\n")); - } - else - { - /* Transition to LEGACY mode */ - - Status = AcpiHwSetMode (ACPI_SYS_MODE_LEGACY); - - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR ((AE_INFO, - "Could not exit ACPI mode to legacy mode")); - return_ACPI_STATUS (Status); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "ACPI mode disabled\n")); - } - - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiDisable) - - -/******************************************************************************* - * - * FUNCTION: AcpiEnableEvent - * - * PARAMETERS: Event - The fixed eventto be enabled - * Flags - Reserved - * - * RETURN: Status - * - * DESCRIPTION: Enable an ACPI event (fixed) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEnableEvent ( - UINT32 Event, - UINT32 Flags) -{ - ACPI_STATUS Status = AE_OK; - UINT32 Value; - - - ACPI_FUNCTION_TRACE (AcpiEnableEvent); - - - /* Decode the Fixed Event */ - - if (Event > ACPI_EVENT_MAX) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* - * Enable the requested fixed event (by writing a one to the enable - * register bit) - */ - Status = AcpiWriteBitRegister ( - AcpiGbl_FixedEventInfo[Event].EnableRegisterId, - ACPI_ENABLE_EVENT); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Make sure that the hardware responded */ - - Status = AcpiReadBitRegister ( - AcpiGbl_FixedEventInfo[Event].EnableRegisterId, &Value); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - if (Value != 1) - { - ACPI_ERROR ((AE_INFO, - "Could not enable %s event", AcpiUtGetEventName (Event))); - return_ACPI_STATUS (AE_NO_HARDWARE_RESPONSE); - } - - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiEnableEvent) - - -/******************************************************************************* - * - * FUNCTION: AcpiSetGpeType - * - * PARAMETERS: GpeDevice - Parent GPE Device - * GpeNumber - GPE level within the GPE block - * Type - New GPE type - * - * RETURN: Status - * - * DESCRIPTION: Set the type of an individual GPE - * - ******************************************************************************/ - -ACPI_STATUS -AcpiSetGpeType ( - ACPI_HANDLE GpeDevice, - UINT32 GpeNumber, - UINT8 Type) -{ - ACPI_STATUS Status = AE_OK; - ACPI_GPE_EVENT_INFO *GpeEventInfo; - - - ACPI_FUNCTION_TRACE (AcpiSetGpeType); - - - /* Ensure that we have a valid GPE number */ - - GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); - if (!GpeEventInfo) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - if ((GpeEventInfo->Flags & ACPI_GPE_TYPE_MASK) == Type) - { - return_ACPI_STATUS (AE_OK); - } - - /* Set the new type (will disable GPE if currently enabled) */ - - Status = AcpiEvSetGpeType (GpeEventInfo, Type); - -UnlockAndExit: - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiSetGpeType) - - -/******************************************************************************* - * - * FUNCTION: AcpiEnableGpe - * - * PARAMETERS: GpeDevice - Parent GPE Device - * GpeNumber - GPE level within the GPE block - * Flags - Just enable, or also wake enable? - * Called from ISR or not - * - * RETURN: Status - * - * DESCRIPTION: Enable an ACPI event (general purpose) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEnableGpe ( - ACPI_HANDLE GpeDevice, - UINT32 GpeNumber, - UINT32 Flags) -{ - ACPI_STATUS Status = AE_OK; - ACPI_GPE_EVENT_INFO *GpeEventInfo; - - - ACPI_FUNCTION_TRACE (AcpiEnableGpe); - - - /* Use semaphore lock if not executing at interrupt level */ - - if (Flags & ACPI_NOT_ISR) - { - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* Ensure that we have a valid GPE number */ - - GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); - if (!GpeEventInfo) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* Perform the enable */ - - Status = AcpiEvEnableGpe (GpeEventInfo, TRUE); - -UnlockAndExit: - if (Flags & ACPI_NOT_ISR) - { - (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - } - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiEnableGpe) - - -/******************************************************************************* - * - * FUNCTION: AcpiDisableGpe - * - * PARAMETERS: GpeDevice - Parent GPE Device - * GpeNumber - GPE level within the GPE block - * Flags - Just disable, or also wake disable? - * Called from ISR or not - * - * RETURN: Status - * - * DESCRIPTION: Disable an ACPI event (general purpose) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDisableGpe ( - ACPI_HANDLE GpeDevice, - UINT32 GpeNumber, - UINT32 Flags) -{ - ACPI_STATUS Status = AE_OK; - ACPI_GPE_EVENT_INFO *GpeEventInfo; - - - ACPI_FUNCTION_TRACE (AcpiDisableGpe); - - - /* Use semaphore lock if not executing at interrupt level */ - - if (Flags & ACPI_NOT_ISR) - { - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* Ensure that we have a valid GPE number */ - - GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); - if (!GpeEventInfo) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - Status = AcpiEvDisableGpe (GpeEventInfo); - -UnlockAndExit: - if (Flags & ACPI_NOT_ISR) - { - (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - } - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiDisableGpe) - - -/******************************************************************************* - * - * FUNCTION: AcpiDisableEvent - * - * PARAMETERS: Event - The fixed eventto be enabled - * Flags - Reserved - * - * RETURN: Status - * - * DESCRIPTION: Disable an ACPI event (fixed) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDisableEvent ( - UINT32 Event, - UINT32 Flags) -{ - ACPI_STATUS Status = AE_OK; - UINT32 Value; - - - ACPI_FUNCTION_TRACE (AcpiDisableEvent); - - - /* Decode the Fixed Event */ - - if (Event > ACPI_EVENT_MAX) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* - * Disable the requested fixed event (by writing a zero to the enable - * register bit) - */ - Status = AcpiWriteBitRegister ( - AcpiGbl_FixedEventInfo[Event].EnableRegisterId, - ACPI_DISABLE_EVENT); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Status = AcpiReadBitRegister ( - AcpiGbl_FixedEventInfo[Event].EnableRegisterId, &Value); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - if (Value != 0) - { - ACPI_ERROR ((AE_INFO, - "Could not disable %s events", AcpiUtGetEventName (Event))); - return_ACPI_STATUS (AE_NO_HARDWARE_RESPONSE); - } - - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiDisableEvent) - - -/******************************************************************************* - * - * FUNCTION: AcpiClearEvent - * - * PARAMETERS: Event - The fixed event to be cleared - * - * RETURN: Status - * - * DESCRIPTION: Clear an ACPI event (fixed) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiClearEvent ( - UINT32 Event) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (AcpiClearEvent); - - - /* Decode the Fixed Event */ - - if (Event > ACPI_EVENT_MAX) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* - * Clear the requested fixed event (By writing a one to the status - * register bit) - */ - Status = AcpiWriteBitRegister ( - AcpiGbl_FixedEventInfo[Event].StatusRegisterId, - ACPI_CLEAR_STATUS); - - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiClearEvent) - - -/******************************************************************************* - * - * FUNCTION: AcpiClearGpe - * - * PARAMETERS: GpeDevice - Parent GPE Device - * GpeNumber - GPE level within the GPE block - * Flags - Called from an ISR or not - * - * RETURN: Status - * - * DESCRIPTION: Clear an ACPI event (general purpose) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiClearGpe ( - ACPI_HANDLE GpeDevice, - UINT32 GpeNumber, - UINT32 Flags) -{ - ACPI_STATUS Status = AE_OK; - ACPI_GPE_EVENT_INFO *GpeEventInfo; - - - ACPI_FUNCTION_TRACE (AcpiClearGpe); - - - /* Use semaphore lock if not executing at interrupt level */ - - if (Flags & ACPI_NOT_ISR) - { - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* Ensure that we have a valid GPE number */ - - GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); - if (!GpeEventInfo) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - Status = AcpiHwClearGpe (GpeEventInfo); - -UnlockAndExit: - if (Flags & ACPI_NOT_ISR) - { - (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - } - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiClearGpe) - - -/******************************************************************************* - * - * FUNCTION: AcpiGetEventStatus - * - * PARAMETERS: Event - The fixed event - * EventStatus - Where the current status of the event will - * be returned - * - * RETURN: Status - * - * DESCRIPTION: Obtains and returns the current status of the event - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetEventStatus ( - UINT32 Event, - ACPI_EVENT_STATUS *EventStatus) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (AcpiGetEventStatus); - - - if (!EventStatus) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Decode the Fixed Event */ - - if (Event > ACPI_EVENT_MAX) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Get the status of the requested fixed event */ - - Status = AcpiReadBitRegister ( - AcpiGbl_FixedEventInfo[Event].StatusRegisterId, EventStatus); - - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetEventStatus) - - -/******************************************************************************* - * - * FUNCTION: AcpiGetGpeStatus - * - * PARAMETERS: GpeDevice - Parent GPE Device - * GpeNumber - GPE level within the GPE block - * Flags - Called from an ISR or not - * EventStatus - Where the current status of the event will - * be returned - * - * RETURN: Status - * - * DESCRIPTION: Get status of an event (general purpose) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetGpeStatus ( - ACPI_HANDLE GpeDevice, - UINT32 GpeNumber, - UINT32 Flags, - ACPI_EVENT_STATUS *EventStatus) -{ - ACPI_STATUS Status = AE_OK; - ACPI_GPE_EVENT_INFO *GpeEventInfo; - - - ACPI_FUNCTION_TRACE (AcpiGetGpeStatus); - - - /* Use semaphore lock if not executing at interrupt level */ - - if (Flags & ACPI_NOT_ISR) - { - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* Ensure that we have a valid GPE number */ - - GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); - if (!GpeEventInfo) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* Obtain status on the requested GPE number */ - - Status = AcpiHwGetGpeStatus (GpeEventInfo, EventStatus); - -UnlockAndExit: - if (Flags & ACPI_NOT_ISR) - { - (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - } - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetGpeStatus) - - -/******************************************************************************* - * - * FUNCTION: AcpiInstallGpeBlock - * - * PARAMETERS: GpeDevice - Handle to the parent GPE Block Device - * GpeBlockAddress - Address and SpaceID - * RegisterCount - Number of GPE register pairs in the block - * InterruptNumber - H/W interrupt for the block - * - * RETURN: Status - * - * DESCRIPTION: Create and Install a block of GPE registers - * - ******************************************************************************/ - -ACPI_STATUS -AcpiInstallGpeBlock ( - ACPI_HANDLE GpeDevice, - ACPI_GENERIC_ADDRESS *GpeBlockAddress, - UINT32 RegisterCount, - UINT32 InterruptNumber) -{ - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_NAMESPACE_NODE *Node; - ACPI_GPE_BLOCK_INFO *GpeBlock; - - - ACPI_FUNCTION_TRACE (AcpiInstallGpeBlock); - - - if ((!GpeDevice) || - (!GpeBlockAddress) || - (!RegisterCount)) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Node = AcpiNsValidateHandle (GpeDevice); - if (!Node) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* - * For user-installed GPE Block Devices, the GpeBlockBaseNumber - * is always zero - */ - Status = AcpiEvCreateGpeBlock (Node, GpeBlockAddress, RegisterCount, - 0, InterruptNumber, &GpeBlock); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - - /* Run the _PRW methods and enable the GPEs */ - - Status = AcpiEvInitializeGpeBlock (Node, GpeBlock); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - - /* Get the DeviceObject attached to the node */ - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (!ObjDesc) - { - /* No object, create a new one */ - - ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_DEVICE); - if (!ObjDesc) - { - Status = AE_NO_MEMORY; - goto UnlockAndExit; - } - - Status = AcpiNsAttachObject (Node, ObjDesc, ACPI_TYPE_DEVICE); - - /* Remove local reference to the object */ - - AcpiUtRemoveReference (ObjDesc); - - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - } - - /* Install the GPE block in the DeviceObject */ - - ObjDesc->Device.GpeBlock = GpeBlock; - - -UnlockAndExit: - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiInstallGpeBlock) - - -/******************************************************************************* - * - * FUNCTION: AcpiRemoveGpeBlock - * - * PARAMETERS: GpeDevice - Handle to the parent GPE Block Device - * - * RETURN: Status - * - * DESCRIPTION: Remove a previously installed block of GPE registers - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRemoveGpeBlock ( - ACPI_HANDLE GpeDevice) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - - - ACPI_FUNCTION_TRACE (AcpiRemoveGpeBlock); - - - if (!GpeDevice) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Node = AcpiNsValidateHandle (GpeDevice); - if (!Node) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* Get the DeviceObject attached to the node */ - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (!ObjDesc || - !ObjDesc->Device.GpeBlock) - { - return_ACPI_STATUS (AE_NULL_OBJECT); - } - - /* Delete the GPE block (but not the DeviceObject) */ - - Status = AcpiEvDeleteGpeBlock (ObjDesc->Device.GpeBlock); - if (ACPI_SUCCESS (Status)) - { - ObjDesc->Device.GpeBlock = NULL; - } - -UnlockAndExit: - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiRemoveGpeBlock) - - -/******************************************************************************* - * - * FUNCTION: AcpiGetGpeDevice - * - * PARAMETERS: Index - System GPE index (0-CurrentGpeCount) - * GpeDevice - Where the parent GPE Device is returned - * - * RETURN: Status - * - * DESCRIPTION: Obtain the GPE device associated with the input index. A NULL - * gpe device indicates that the gpe number is contained in one of - * the FADT-defined gpe blocks. Otherwise, the GPE block device. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetGpeDevice ( - UINT32 Index, - ACPI_HANDLE *GpeDevice) -{ - ACPI_GPE_DEVICE_INFO Info; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiGetGpeDevice); - - - if (!GpeDevice) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - if (Index >= AcpiCurrentGpeCount) - { - return_ACPI_STATUS (AE_NOT_EXIST); - } - - /* Setup and walk the GPE list */ - - Info.Index = Index; - Info.Status = AE_NOT_EXIST; - Info.GpeDevice = NULL; - Info.NextBlockBaseIndex = 0; - - Status = AcpiEvWalkGpeList (AcpiEvGetGpeDevice, &Info); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - *GpeDevice = ACPI_CAST_PTR (ACPI_HANDLE, Info.GpeDevice); - return_ACPI_STATUS (Info.Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetGpeDevice) - - -/******************************************************************************* - * - * FUNCTION: AcpiEvGetGpeDevice - * - * PARAMETERS: GPE_WALK_CALLBACK - * - * RETURN: Status - * - * DESCRIPTION: Matches the input GPE index (0-CurrentGpeCount) with a GPE - * block device. NULL if the GPE is one of the FADT-defined GPEs. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiEvGetGpeDevice ( - ACPI_GPE_XRUPT_INFO *GpeXruptInfo, - ACPI_GPE_BLOCK_INFO *GpeBlock, - void *Context) -{ - ACPI_GPE_DEVICE_INFO *Info = Context; - - - /* Increment Index by the number of GPEs in this block */ - - Info->NextBlockBaseIndex += - (GpeBlock->RegisterCount * ACPI_GPE_REGISTER_WIDTH); - - if (Info->Index < Info->NextBlockBaseIndex) - { - /* - * The GPE index is within this block, get the node. Leave the node - * NULL for the FADT-defined GPEs - */ - if ((GpeBlock->Node)->Type == ACPI_TYPE_DEVICE) - { - Info->GpeDevice = GpeBlock->Node; - } - - Info->Status = AE_OK; - return (AE_CTRL_END); - } - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiDisableAllGpes - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Disable and clear all GPEs in all GPE blocks - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDisableAllGpes ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiDisableAllGpes); - - - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Status = AcpiHwDisableAllGpes (); - (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - - return_ACPI_STATUS (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiEnableAllRuntimeGpes - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Enable all "runtime" GPEs, in all GPE blocks - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEnableAllRuntimeGpes ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiEnableAllRuntimeGpes); - - - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Status = AcpiHwEnableAllRuntimeGpes (); - (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/events/evxfregn.c b/l4/pkg/acpica/lib-acpi/src/acpica/events/evxfregn.c deleted file mode 100644 index 3b60589b7..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/events/evxfregn.c +++ /dev/null @@ -1,346 +0,0 @@ -/****************************************************************************** - * - * Module Name: evxfregn - External Interfaces, ACPI Operation Regions and - * Address Spaces. - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EVXFREGN_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "acevents.h" - -#define _COMPONENT ACPI_EVENTS - ACPI_MODULE_NAME ("evxfregn") - - -/******************************************************************************* - * - * FUNCTION: AcpiInstallAddressSpaceHandler - * - * PARAMETERS: Device - Handle for the device - * SpaceId - The address space ID - * Handler - Address of the handler - * Setup - Address of the setup function - * Context - Value passed to the handler on each access - * - * RETURN: Status - * - * DESCRIPTION: Install a handler for all OpRegions of a given SpaceId. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiInstallAddressSpaceHandler ( - ACPI_HANDLE Device, - ACPI_ADR_SPACE_TYPE SpaceId, - ACPI_ADR_SPACE_HANDLER Handler, - ACPI_ADR_SPACE_SETUP Setup, - void *Context) -{ - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiInstallAddressSpaceHandler); - - - /* Parameter validation */ - - if (!Device) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Convert and validate the device handle */ - - Node = AcpiNsValidateHandle (Device); - if (!Node) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* Install the handler for all Regions for this Space ID */ - - Status = AcpiEvInstallSpaceHandler (Node, SpaceId, Handler, Setup, Context); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - - /* Run all _REG methods for this address space */ - - Status = AcpiEvExecuteRegMethods (Node, SpaceId); - -UnlockAndExit: - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiInstallAddressSpaceHandler) - - -/******************************************************************************* - * - * FUNCTION: AcpiRemoveAddressSpaceHandler - * - * PARAMETERS: Device - Handle for the device - * SpaceId - The address space ID - * Handler - Address of the handler - * - * RETURN: Status - * - * DESCRIPTION: Remove a previously installed handler. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRemoveAddressSpaceHandler ( - ACPI_HANDLE Device, - ACPI_ADR_SPACE_TYPE SpaceId, - ACPI_ADR_SPACE_HANDLER Handler) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT *HandlerObj; - ACPI_OPERAND_OBJECT *RegionObj; - ACPI_OPERAND_OBJECT **LastObjPtr; - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiRemoveAddressSpaceHandler); - - - /* Parameter validation */ - - if (!Device) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Convert and validate the device handle */ - - Node = AcpiNsValidateHandle (Device); - if (!Node || - ((Node->Type != ACPI_TYPE_DEVICE) && - (Node->Type != ACPI_TYPE_PROCESSOR) && - (Node->Type != ACPI_TYPE_THERMAL) && - (Node != AcpiGbl_RootNode))) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* Make sure the internal object exists */ - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (!ObjDesc) - { - Status = AE_NOT_EXIST; - goto UnlockAndExit; - } - - /* Find the address handler the user requested */ - - HandlerObj = ObjDesc->Device.Handler; - LastObjPtr = &ObjDesc->Device.Handler; - while (HandlerObj) - { - /* We have a handler, see if user requested this one */ - - if (HandlerObj->AddressSpace.SpaceId == SpaceId) - { - /* Handler must be the same as the installed handler */ - - if (HandlerObj->AddressSpace.Handler != Handler) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* Matched SpaceId, first dereference this in the Regions */ - - ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, - "Removing address handler %p(%p) for region %s " - "on Device %p(%p)\n", - HandlerObj, Handler, AcpiUtGetRegionName (SpaceId), - Node, ObjDesc)); - - RegionObj = HandlerObj->AddressSpace.RegionList; - - /* Walk the handler's region list */ - - while (RegionObj) - { - /* - * First disassociate the handler from the region. - * - * NOTE: this doesn't mean that the region goes away - * The region is just inaccessible as indicated to - * the _REG method - */ - AcpiEvDetachRegion (RegionObj, TRUE); - - /* - * Walk the list: Just grab the head because the - * DetachRegion removed the previous head. - */ - RegionObj = HandlerObj->AddressSpace.RegionList; - - } - - /* Remove this Handler object from the list */ - - *LastObjPtr = HandlerObj->AddressSpace.Next; - - /* Now we can delete the handler object */ - - AcpiUtRemoveReference (HandlerObj); - goto UnlockAndExit; - } - - /* Walk the linked list of handlers */ - - LastObjPtr = &HandlerObj->AddressSpace.Next; - HandlerObj = HandlerObj->AddressSpace.Next; - } - - /* The handler does not exist */ - - ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, - "Unable to remove address handler %p for %s(%X), DevNode %p, obj %p\n", - Handler, AcpiUtGetRegionName (SpaceId), SpaceId, Node, ObjDesc)); - - Status = AE_NOT_EXIST; - -UnlockAndExit: - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiRemoveAddressSpaceHandler) - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exconfig.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exconfig.c deleted file mode 100644 index d0acdd5f8..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exconfig.c +++ /dev/null @@ -1,751 +0,0 @@ -/****************************************************************************** - * - * Module Name: exconfig - Namespace reconfiguration (Load/Unload opcodes) - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXCONFIG_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "actables.h" -#include "acdispat.h" -#include "acevents.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exconfig") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiExAddTable ( - UINT32 TableIndex, - ACPI_NAMESPACE_NODE *ParentNode, - ACPI_OPERAND_OBJECT **DdbHandle); - -static ACPI_STATUS -AcpiExRegionRead ( - ACPI_OPERAND_OBJECT *ObjDesc, - UINT32 Length, - UINT8 *Buffer); - - -/******************************************************************************* - * - * FUNCTION: AcpiExAddTable - * - * PARAMETERS: Table - Pointer to raw table - * ParentNode - Where to load the table (scope) - * DdbHandle - Where to return the table handle. - * - * RETURN: Status - * - * DESCRIPTION: Common function to Install and Load an ACPI table with a - * returned table handle. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiExAddTable ( - UINT32 TableIndex, - ACPI_NAMESPACE_NODE *ParentNode, - ACPI_OPERAND_OBJECT **DdbHandle) -{ - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *ObjDesc; - - - ACPI_FUNCTION_TRACE (ExAddTable); - - - /* Create an object to be the table handle */ - - ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_REFERENCE); - if (!ObjDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Init the table handle */ - - ObjDesc->Common.Flags |= AOPOBJ_DATA_VALID; - ObjDesc->Reference.Class = ACPI_REFCLASS_TABLE; - *DdbHandle = ObjDesc; - - /* Install the new table into the local data structures */ - - ObjDesc->Reference.Value = TableIndex; - - /* Add the table to the namespace */ - - Status = AcpiNsLoadTable (TableIndex, ParentNode); - if (ACPI_FAILURE (Status)) - { - AcpiUtRemoveReference (ObjDesc); - *DdbHandle = NULL; - return_ACPI_STATUS (Status); - } - - /* Execute any module-level code that was found in the table */ - - AcpiExExitInterpreter (); - AcpiNsExecModuleCodeList (); - AcpiExEnterInterpreter (); - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExLoadTableOp - * - * PARAMETERS: WalkState - Current state with operands - * ReturnDesc - Where to store the return object - * - * RETURN: Status - * - * DESCRIPTION: Load an ACPI table from the RSDT/XSDT - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExLoadTableOp ( - ACPI_WALK_STATE *WalkState, - ACPI_OPERAND_OBJECT **ReturnDesc) -{ - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - ACPI_NAMESPACE_NODE *ParentNode; - ACPI_NAMESPACE_NODE *StartNode; - ACPI_NAMESPACE_NODE *ParameterNode = NULL; - ACPI_OPERAND_OBJECT *DdbHandle; - ACPI_TABLE_HEADER *Table; - UINT32 TableIndex; - - - ACPI_FUNCTION_TRACE (ExLoadTableOp); - - - /* Validate lengths for the SignatureString, OEMIDString, OEMTableID */ - - if ((Operand[0]->String.Length > ACPI_NAME_SIZE) || - (Operand[1]->String.Length > ACPI_OEM_ID_SIZE) || - (Operand[2]->String.Length > ACPI_OEM_TABLE_ID_SIZE)) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Find the ACPI table in the RSDT/XSDT */ - - Status = AcpiTbFindTable (Operand[0]->String.Pointer, - Operand[1]->String.Pointer, - Operand[2]->String.Pointer, &TableIndex); - if (ACPI_FAILURE (Status)) - { - if (Status != AE_NOT_FOUND) - { - return_ACPI_STATUS (Status); - } - - /* Table not found, return an Integer=0 and AE_OK */ - - DdbHandle = AcpiUtCreateIntegerObject ((UINT64) 0); - if (!DdbHandle) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - *ReturnDesc = DdbHandle; - return_ACPI_STATUS (AE_OK); - } - - /* Default nodes */ - - StartNode = WalkState->ScopeInfo->Scope.Node; - ParentNode = AcpiGbl_RootNode; - - /* RootPath (optional parameter) */ - - if (Operand[3]->String.Length > 0) - { - /* - * Find the node referenced by the RootPathString. This is the - * location within the namespace where the table will be loaded. - */ - Status = AcpiNsGetNode (StartNode, Operand[3]->String.Pointer, - ACPI_NS_SEARCH_PARENT, &ParentNode); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* ParameterPath (optional parameter) */ - - if (Operand[4]->String.Length > 0) - { - if ((Operand[4]->String.Pointer[0] != '\\') && - (Operand[4]->String.Pointer[0] != '^')) - { - /* - * Path is not absolute, so it will be relative to the node - * referenced by the RootPathString (or the NS root if omitted) - */ - StartNode = ParentNode; - } - - /* Find the node referenced by the ParameterPathString */ - - Status = AcpiNsGetNode (StartNode, Operand[4]->String.Pointer, - ACPI_NS_SEARCH_PARENT, &ParameterNode); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* Load the table into the namespace */ - - Status = AcpiExAddTable (TableIndex, ParentNode, &DdbHandle); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Parameter Data (optional) */ - - if (ParameterNode) - { - /* Store the parameter data into the optional parameter object */ - - Status = AcpiExStore (Operand[5], - ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, ParameterNode), - WalkState); - if (ACPI_FAILURE (Status)) - { - (void) AcpiExUnloadTable (DdbHandle); - - AcpiUtRemoveReference (DdbHandle); - return_ACPI_STATUS (Status); - } - } - - Status = AcpiGetTableByIndex (TableIndex, &Table); - if (ACPI_SUCCESS (Status)) - { - ACPI_INFO ((AE_INFO, - "Dynamic OEM Table Load - [%.4s] OemId [%.6s] OemTableId [%.8s]", - Table->Signature, Table->OemId, Table->OemTableId)); - } - - /* Invoke table handler if present */ - - if (AcpiGbl_TableHandler) - { - (void) AcpiGbl_TableHandler (ACPI_TABLE_EVENT_LOAD, Table, - AcpiGbl_TableHandlerContext); - } - - *ReturnDesc = DdbHandle; - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExRegionRead - * - * PARAMETERS: ObjDesc - Region descriptor - * Length - Number of bytes to read - * Buffer - Pointer to where to put the data - * - * RETURN: Status - * - * DESCRIPTION: Read data from an operation region. The read starts from the - * beginning of the region. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiExRegionRead ( - ACPI_OPERAND_OBJECT *ObjDesc, - UINT32 Length, - UINT8 *Buffer) -{ - ACPI_STATUS Status; - ACPI_INTEGER Value; - UINT32 RegionOffset = 0; - UINT32 i; - - - /* Bytewise reads */ - - for (i = 0; i < Length; i++) - { - Status = AcpiEvAddressSpaceDispatch (ObjDesc, ACPI_READ, - RegionOffset, 8, &Value); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - *Buffer = (UINT8) Value; - Buffer++; - RegionOffset++; - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExLoadOp - * - * PARAMETERS: ObjDesc - Region or Buffer/Field where the table will be - * obtained - * Target - Where a handle to the table will be stored - * WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Load an ACPI table from a field or operation region - * - * NOTE: Region Fields (Field, BankField, IndexFields) are resolved to buffer - * objects before this code is reached. - * - * If source is an operation region, it must refer to SystemMemory, as - * per the ACPI specification. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExLoadOp ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_OPERAND_OBJECT *Target, - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT *DdbHandle; - ACPI_TABLE_HEADER *Table; - ACPI_TABLE_DESC TableDesc; - UINT32 TableIndex; - ACPI_STATUS Status; - UINT32 Length; - - - ACPI_FUNCTION_TRACE (ExLoadOp); - - - ACPI_MEMSET (&TableDesc, 0, sizeof (ACPI_TABLE_DESC)); - - /* Source Object can be either an OpRegion or a Buffer/Field */ - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_REGION: - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Load table from Region %p\n", ObjDesc)); - - /* Region must be SystemMemory (from ACPI spec) */ - - if (ObjDesc->Region.SpaceId != ACPI_ADR_SPACE_SYSTEM_MEMORY) - { - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - /* - * If the Region Address and Length have not been previously evaluated, - * evaluate them now and save the results. - */ - if (!(ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)) - { - Status = AcpiDsGetRegionArguments (ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* Get the table header first so we can get the table length */ - - Table = ACPI_ALLOCATE (sizeof (ACPI_TABLE_HEADER)); - if (!Table) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - Status = AcpiExRegionRead (ObjDesc, sizeof (ACPI_TABLE_HEADER), - ACPI_CAST_PTR (UINT8, Table)); - Length = Table->Length; - ACPI_FREE (Table); - - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Must have at least an ACPI table header */ - - if (Length < sizeof (ACPI_TABLE_HEADER)) - { - return_ACPI_STATUS (AE_INVALID_TABLE_LENGTH); - } - - /* - * The original implementation simply mapped the table, with no copy. - * However, the memory region is not guaranteed to remain stable and - * we must copy the table to a local buffer. For example, the memory - * region is corrupted after suspend on some machines. Dynamically - * loaded tables are usually small, so this overhead is minimal. - * - * The latest implementation (5/2009) does not use a mapping at all. - * We use the low-level operation region interface to read the table - * instead of the obvious optimization of using a direct mapping. - * This maintains a consistent use of operation regions across the - * entire subsystem. This is important if additional processing must - * be performed in the (possibly user-installed) operation region - * handler. For example, AcpiExec and ASLTS depend on this. - */ - - /* Allocate a buffer for the table */ - - TableDesc.Pointer = ACPI_ALLOCATE (Length); - if (!TableDesc.Pointer) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Read the entire table */ - - Status = AcpiExRegionRead (ObjDesc, Length, - ACPI_CAST_PTR (UINT8, TableDesc.Pointer)); - if (ACPI_FAILURE (Status)) - { - ACPI_FREE (TableDesc.Pointer); - return_ACPI_STATUS (Status); - } - - TableDesc.Address = ObjDesc->Region.Address; - break; - - - case ACPI_TYPE_BUFFER: /* Buffer or resolved RegionField */ - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Load table from Buffer or Field %p\n", ObjDesc)); - - /* Must have at least an ACPI table header */ - - if (ObjDesc->Buffer.Length < sizeof (ACPI_TABLE_HEADER)) - { - return_ACPI_STATUS (AE_INVALID_TABLE_LENGTH); - } - - /* Get the actual table length from the table header */ - - Table = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ObjDesc->Buffer.Pointer); - Length = Table->Length; - - /* Table cannot extend beyond the buffer */ - - if (Length > ObjDesc->Buffer.Length) - { - return_ACPI_STATUS (AE_AML_BUFFER_LIMIT); - } - if (Length < sizeof (ACPI_TABLE_HEADER)) - { - return_ACPI_STATUS (AE_INVALID_TABLE_LENGTH); - } - - /* - * Copy the table from the buffer because the buffer could be modified - * or even deleted in the future - */ - TableDesc.Pointer = ACPI_ALLOCATE (Length); - if (!TableDesc.Pointer) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - ACPI_MEMCPY (TableDesc.Pointer, Table, Length); - TableDesc.Address = ACPI_TO_INTEGER (TableDesc.Pointer); - break; - - - default: - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - /* Validate table checksum (will not get validated in TbAddTable) */ - - Status = AcpiTbVerifyChecksum (TableDesc.Pointer, Length); - if (ACPI_FAILURE (Status)) - { - ACPI_FREE (TableDesc.Pointer); - return_ACPI_STATUS (Status); - } - - /* Complete the table descriptor */ - - TableDesc.Length = Length; - TableDesc.Flags = ACPI_TABLE_ORIGIN_ALLOCATED; - - /* Install the new table into the local data structures */ - - Status = AcpiTbAddTable (&TableDesc, &TableIndex); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - /* - * Add the table to the namespace. - * - * Note: Load the table objects relative to the root of the namespace. - * This appears to go against the ACPI specification, but we do it for - * compatibility with other ACPI implementations. - */ - Status = AcpiExAddTable (TableIndex, AcpiGbl_RootNode, &DdbHandle); - if (ACPI_FAILURE (Status)) - { - /* On error, TablePtr was deallocated above */ - - return_ACPI_STATUS (Status); - } - - /* Store the DdbHandle into the Target operand */ - - Status = AcpiExStore (DdbHandle, Target, WalkState); - if (ACPI_FAILURE (Status)) - { - (void) AcpiExUnloadTable (DdbHandle); - - /* TablePtr was deallocated above */ - - AcpiUtRemoveReference (DdbHandle); - return_ACPI_STATUS (Status); - } - - /* Remove the reference by added by AcpiExStore above */ - - AcpiUtRemoveReference (DdbHandle); - - /* Invoke table handler if present */ - - if (AcpiGbl_TableHandler) - { - (void) AcpiGbl_TableHandler (ACPI_TABLE_EVENT_LOAD, TableDesc.Pointer, - AcpiGbl_TableHandlerContext); - } - -Cleanup: - if (ACPI_FAILURE (Status)) - { - /* Delete allocated table buffer */ - - AcpiTbDeleteTable (&TableDesc); - } - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExUnloadTable - * - * PARAMETERS: DdbHandle - Handle to a previously loaded table - * - * RETURN: Status - * - * DESCRIPTION: Unload an ACPI table - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExUnloadTable ( - ACPI_OPERAND_OBJECT *DdbHandle) -{ - ACPI_STATUS Status = AE_OK; - ACPI_OPERAND_OBJECT *TableDesc = DdbHandle; - UINT32 TableIndex; - ACPI_TABLE_HEADER *Table; - - - ACPI_FUNCTION_TRACE (ExUnloadTable); - - - /* - * Validate the handle - * Although the handle is partially validated in AcpiExReconfiguration() - * when it calls AcpiExResolveOperands(), the handle is more completely - * validated here. - * - * Handle must be a valid operand object of type reference. Also, the - * DdbHandle must still be marked valid (table has not been previously - * unloaded) - */ - if ((!DdbHandle) || - (ACPI_GET_DESCRIPTOR_TYPE (DdbHandle) != ACPI_DESC_TYPE_OPERAND) || - (DdbHandle->Common.Type != ACPI_TYPE_LOCAL_REFERENCE) || - (!(DdbHandle->Common.Flags & AOPOBJ_DATA_VALID))) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Get the table index from the DdbHandle */ - - TableIndex = TableDesc->Reference.Value; - - /* Ensure the table is still loaded */ - - if (!AcpiTbIsTableLoaded (TableIndex)) - { - return_ACPI_STATUS (AE_NOT_EXIST); - } - - /* Invoke table handler if present */ - - if (AcpiGbl_TableHandler) - { - Status = AcpiGetTableByIndex (TableIndex, &Table); - if (ACPI_SUCCESS (Status)) - { - (void) AcpiGbl_TableHandler (ACPI_TABLE_EVENT_UNLOAD, Table, - AcpiGbl_TableHandlerContext); - } - } - - /* Delete the portion of the namespace owned by this table */ - - Status = AcpiTbDeleteNamespaceByOwner (TableIndex); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - (void) AcpiTbReleaseOwnerId (TableIndex); - AcpiTbSetTableLoadedFlag (TableIndex, FALSE); - - /* - * Invalidate the handle. We do this because the handle may be stored - * in a named object and may not be actually deleted until much later. - */ - DdbHandle->Common.Flags &= ~AOPOBJ_DATA_VALID; - return_ACPI_STATUS (AE_OK); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exconvrt.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exconvrt.c deleted file mode 100644 index fd8fec1c7..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exconvrt.c +++ /dev/null @@ -1,826 +0,0 @@ -/****************************************************************************** - * - * Module Name: exconvrt - Object conversion routines - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __EXCONVRT_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" -#include "amlcode.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exconvrt") - -/* Local prototypes */ - -static UINT32 -AcpiExConvertToAscii ( - ACPI_INTEGER Integer, - UINT16 Base, - UINT8 *String, - UINT8 MaxLength); - - -/******************************************************************************* - * - * FUNCTION: AcpiExConvertToInteger - * - * PARAMETERS: ObjDesc - Object to be converted. Must be an - * Integer, Buffer, or String - * ResultDesc - Where the new Integer object is returned - * Flags - Used for string conversion - * - * RETURN: Status - * - * DESCRIPTION: Convert an ACPI Object to an integer. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExConvertToInteger ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_OPERAND_OBJECT **ResultDesc, - UINT32 Flags) -{ - ACPI_OPERAND_OBJECT *ReturnDesc; - UINT8 *Pointer; - ACPI_INTEGER Result; - UINT32 i; - UINT32 Count; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_PTR (ExConvertToInteger, ObjDesc); - - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_INTEGER: - - /* No conversion necessary */ - - *ResultDesc = ObjDesc; - return_ACPI_STATUS (AE_OK); - - case ACPI_TYPE_BUFFER: - case ACPI_TYPE_STRING: - - /* Note: Takes advantage of common buffer/string fields */ - - Pointer = ObjDesc->Buffer.Pointer; - Count = ObjDesc->Buffer.Length; - break; - - default: - return_ACPI_STATUS (AE_TYPE); - } - - /* - * Convert the buffer/string to an integer. Note that both buffers and - * strings are treated as raw data - we don't convert ascii to hex for - * strings. - * - * There are two terminating conditions for the loop: - * 1) The size of an integer has been reached, or - * 2) The end of the buffer or string has been reached - */ - Result = 0; - - /* String conversion is different than Buffer conversion */ - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_STRING: - - /* - * Convert string to an integer - for most cases, the string must be - * hexadecimal as per the ACPI specification. The only exception (as - * of ACPI 3.0) is that the ToInteger() operator allows both decimal - * and hexadecimal strings (hex prefixed with "0x"). - */ - Status = AcpiUtStrtoul64 ((char *) Pointer, Flags, &Result); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - break; - - - case ACPI_TYPE_BUFFER: - - /* Check for zero-length buffer */ - - if (!Count) - { - return_ACPI_STATUS (AE_AML_BUFFER_LIMIT); - } - - /* Transfer no more than an integer's worth of data */ - - if (Count > AcpiGbl_IntegerByteWidth) - { - Count = AcpiGbl_IntegerByteWidth; - } - - /* - * Convert buffer to an integer - we simply grab enough raw data - * from the buffer to fill an integer - */ - for (i = 0; i < Count; i++) - { - /* - * Get next byte and shift it into the Result. - * Little endian is used, meaning that the first byte of the buffer - * is the LSB of the integer - */ - Result |= (((ACPI_INTEGER) Pointer[i]) << (i * 8)); - } - break; - - - default: - - /* No other types can get here */ - break; - } - - /* Create a new integer */ - - ReturnDesc = AcpiUtCreateIntegerObject (Result); - if (!ReturnDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Converted value: %8.8X%8.8X\n", - ACPI_FORMAT_UINT64 (Result))); - - /* Save the Result */ - - AcpiExTruncateFor32bitTable (ReturnDesc); - *ResultDesc = ReturnDesc; - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExConvertToBuffer - * - * PARAMETERS: ObjDesc - Object to be converted. Must be an - * Integer, Buffer, or String - * ResultDesc - Where the new buffer object is returned - * - * RETURN: Status - * - * DESCRIPTION: Convert an ACPI Object to a Buffer - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExConvertToBuffer ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_OPERAND_OBJECT **ResultDesc) -{ - ACPI_OPERAND_OBJECT *ReturnDesc; - UINT8 *NewBuf; - - - ACPI_FUNCTION_TRACE_PTR (ExConvertToBuffer, ObjDesc); - - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_BUFFER: - - /* No conversion necessary */ - - *ResultDesc = ObjDesc; - return_ACPI_STATUS (AE_OK); - - - case ACPI_TYPE_INTEGER: - - /* - * Create a new Buffer object. - * Need enough space for one integer - */ - ReturnDesc = AcpiUtCreateBufferObject (AcpiGbl_IntegerByteWidth); - if (!ReturnDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Copy the integer to the buffer, LSB first */ - - NewBuf = ReturnDesc->Buffer.Pointer; - ACPI_MEMCPY (NewBuf, - &ObjDesc->Integer.Value, - AcpiGbl_IntegerByteWidth); - break; - - - case ACPI_TYPE_STRING: - - /* - * Create a new Buffer object - * Size will be the string length - * - * NOTE: Add one to the string length to include the null terminator. - * The ACPI spec is unclear on this subject, but there is existing - * ASL/AML code that depends on the null being transferred to the new - * buffer. - */ - ReturnDesc = AcpiUtCreateBufferObject ( - (ACPI_SIZE) ObjDesc->String.Length + 1); - if (!ReturnDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Copy the string to the buffer */ - - NewBuf = ReturnDesc->Buffer.Pointer; - ACPI_STRNCPY ((char *) NewBuf, (char *) ObjDesc->String.Pointer, - ObjDesc->String.Length); - break; - - - default: - return_ACPI_STATUS (AE_TYPE); - } - - /* Mark buffer initialized */ - - ReturnDesc->Common.Flags |= AOPOBJ_DATA_VALID; - *ResultDesc = ReturnDesc; - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExConvertToAscii - * - * PARAMETERS: Integer - Value to be converted - * Base - ACPI_STRING_DECIMAL or ACPI_STRING_HEX - * String - Where the string is returned - * DataWidth - Size of data item to be converted, in bytes - * - * RETURN: Actual string length - * - * DESCRIPTION: Convert an ACPI Integer to a hex or decimal string - * - ******************************************************************************/ - -static UINT32 -AcpiExConvertToAscii ( - ACPI_INTEGER Integer, - UINT16 Base, - UINT8 *String, - UINT8 DataWidth) -{ - ACPI_INTEGER Digit; - UINT32 i; - UINT32 j; - UINT32 k = 0; - UINT32 HexLength; - UINT32 DecimalLength; - UINT32 Remainder; - BOOLEAN SupressZeros; - - - ACPI_FUNCTION_ENTRY (); - - - switch (Base) - { - case 10: - - /* Setup max length for the decimal number */ - - switch (DataWidth) - { - case 1: - DecimalLength = ACPI_MAX8_DECIMAL_DIGITS; - break; - - case 4: - DecimalLength = ACPI_MAX32_DECIMAL_DIGITS; - break; - - case 8: - default: - DecimalLength = ACPI_MAX64_DECIMAL_DIGITS; - break; - } - - SupressZeros = TRUE; /* No leading zeros */ - Remainder = 0; - - for (i = DecimalLength; i > 0; i--) - { - /* Divide by nth factor of 10 */ - - Digit = Integer; - for (j = 0; j < i; j++) - { - (void) AcpiUtShortDivide (Digit, 10, &Digit, &Remainder); - } - - /* Handle leading zeros */ - - if (Remainder != 0) - { - SupressZeros = FALSE; - } - - if (!SupressZeros) - { - String[k] = (UINT8) (ACPI_ASCII_ZERO + Remainder); - k++; - } - } - break; - - case 16: - - /* HexLength: 2 ascii hex chars per data byte */ - - HexLength = ACPI_MUL_2 (DataWidth); - for (i = 0, j = (HexLength-1); i < HexLength; i++, j--) - { - /* Get one hex digit, most significant digits first */ - - String[k] = (UINT8) AcpiUtHexToAsciiChar (Integer, ACPI_MUL_4 (j)); - k++; - } - break; - - default: - return (0); - } - - /* - * Since leading zeros are suppressed, we must check for the case where - * the integer equals 0 - * - * Finally, null terminate the string and return the length - */ - if (!k) - { - String [0] = ACPI_ASCII_ZERO; - k = 1; - } - - String [k] = 0; - return ((UINT32) k); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExConvertToString - * - * PARAMETERS: ObjDesc - Object to be converted. Must be an - * Integer, Buffer, or String - * ResultDesc - Where the string object is returned - * Type - String flags (base and conversion type) - * - * RETURN: Status - * - * DESCRIPTION: Convert an ACPI Object to a string - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExConvertToString ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_OPERAND_OBJECT **ResultDesc, - UINT32 Type) -{ - ACPI_OPERAND_OBJECT *ReturnDesc; - UINT8 *NewBuf; - UINT32 i; - UINT32 StringLength = 0; - UINT16 Base = 16; - UINT8 Separator = ','; - - - ACPI_FUNCTION_TRACE_PTR (ExConvertToString, ObjDesc); - - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_STRING: - - /* No conversion necessary */ - - *ResultDesc = ObjDesc; - return_ACPI_STATUS (AE_OK); - - - case ACPI_TYPE_INTEGER: - - switch (Type) - { - case ACPI_EXPLICIT_CONVERT_DECIMAL: - - /* Make room for maximum decimal number */ - - StringLength = ACPI_MAX_DECIMAL_DIGITS; - Base = 10; - break; - - default: - - /* Two hex string characters for each integer byte */ - - StringLength = ACPI_MUL_2 (AcpiGbl_IntegerByteWidth); - break; - } - - /* - * Create a new String - * Need enough space for one ASCII integer (plus null terminator) - */ - ReturnDesc = AcpiUtCreateStringObject ((ACPI_SIZE) StringLength); - if (!ReturnDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - NewBuf = ReturnDesc->Buffer.Pointer; - - /* Convert integer to string */ - - StringLength = AcpiExConvertToAscii (ObjDesc->Integer.Value, Base, - NewBuf, AcpiGbl_IntegerByteWidth); - - /* Null terminate at the correct place */ - - ReturnDesc->String.Length = StringLength; - NewBuf [StringLength] = 0; - break; - - - case ACPI_TYPE_BUFFER: - - /* Setup string length, base, and separator */ - - switch (Type) - { - case ACPI_EXPLICIT_CONVERT_DECIMAL: /* Used by ToDecimalString */ - /* - * From ACPI: "If Data is a buffer, it is converted to a string of - * decimal values separated by commas." - */ - Base = 10; - - /* - * Calculate the final string length. Individual string values - * are variable length (include separator for each) - */ - for (i = 0; i < ObjDesc->Buffer.Length; i++) - { - if (ObjDesc->Buffer.Pointer[i] >= 100) - { - StringLength += 4; - } - else if (ObjDesc->Buffer.Pointer[i] >= 10) - { - StringLength += 3; - } - else - { - StringLength += 2; - } - } - break; - - case ACPI_IMPLICIT_CONVERT_HEX: - /* - * From the ACPI spec: - *"The entire contents of the buffer are converted to a string of - * two-character hexadecimal numbers, each separated by a space." - */ - Separator = ' '; - StringLength = (ObjDesc->Buffer.Length * 3); - break; - - case ACPI_EXPLICIT_CONVERT_HEX: /* Used by ToHexString */ - /* - * From ACPI: "If Data is a buffer, it is converted to a string of - * hexadecimal values separated by commas." - */ - StringLength = (ObjDesc->Buffer.Length * 3); - break; - - default: - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* - * Create a new string object and string buffer - * (-1 because of extra separator included in StringLength from above) - * Allow creation of zero-length strings from zero-length buffers. - */ - if (StringLength) - { - StringLength--; - } - - ReturnDesc = AcpiUtCreateStringObject ((ACPI_SIZE) StringLength); - if (!ReturnDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - NewBuf = ReturnDesc->Buffer.Pointer; - - /* - * Convert buffer bytes to hex or decimal values - * (separated by commas or spaces) - */ - for (i = 0; i < ObjDesc->Buffer.Length; i++) - { - NewBuf += AcpiExConvertToAscii ( - (ACPI_INTEGER) ObjDesc->Buffer.Pointer[i], Base, - NewBuf, 1); - *NewBuf++ = Separator; /* each separated by a comma or space */ - } - - /* - * Null terminate the string - * (overwrites final comma/space from above) - */ - if (ObjDesc->Buffer.Length) - { - NewBuf--; - } - *NewBuf = 0; - break; - - default: - return_ACPI_STATUS (AE_TYPE); - } - - *ResultDesc = ReturnDesc; - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExConvertToTargetType - * - * PARAMETERS: DestinationType - Current type of the destination - * SourceDesc - Source object to be converted. - * ResultDesc - Where the converted object is returned - * WalkState - Current method state - * - * RETURN: Status - * - * DESCRIPTION: Implements "implicit conversion" rules for storing an object. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExConvertToTargetType ( - ACPI_OBJECT_TYPE DestinationType, - ACPI_OPERAND_OBJECT *SourceDesc, - ACPI_OPERAND_OBJECT **ResultDesc, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (ExConvertToTargetType); - - - /* Default behavior */ - - *ResultDesc = SourceDesc; - - /* - * If required by the target, - * perform implicit conversion on the source before we store it. - */ - switch (GET_CURRENT_ARG_TYPE (WalkState->OpInfo->RuntimeArgs)) - { - case ARGI_SIMPLE_TARGET: - case ARGI_FIXED_TARGET: - case ARGI_INTEGER_REF: /* Handles Increment, Decrement cases */ - - switch (DestinationType) - { - case ACPI_TYPE_LOCAL_REGION_FIELD: - /* - * Named field can always handle conversions - */ - break; - - default: - /* No conversion allowed for these types */ - - if (DestinationType != SourceDesc->Common.Type) - { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Explicit operator, will store (%s) over existing type (%s)\n", - AcpiUtGetObjectTypeName (SourceDesc), - AcpiUtGetTypeName (DestinationType))); - Status = AE_TYPE; - } - } - break; - - - case ARGI_TARGETREF: - - switch (DestinationType) - { - case ACPI_TYPE_INTEGER: - case ACPI_TYPE_BUFFER_FIELD: - case ACPI_TYPE_LOCAL_BANK_FIELD: - case ACPI_TYPE_LOCAL_INDEX_FIELD: - /* - * These types require an Integer operand. We can convert - * a Buffer or a String to an Integer if necessary. - */ - Status = AcpiExConvertToInteger (SourceDesc, ResultDesc, - 16); - break; - - - case ACPI_TYPE_STRING: - /* - * The operand must be a String. We can convert an - * Integer or Buffer if necessary - */ - Status = AcpiExConvertToString (SourceDesc, ResultDesc, - ACPI_IMPLICIT_CONVERT_HEX); - break; - - - case ACPI_TYPE_BUFFER: - /* - * The operand must be a Buffer. We can convert an - * Integer or String if necessary - */ - Status = AcpiExConvertToBuffer (SourceDesc, ResultDesc); - break; - - - default: - ACPI_ERROR ((AE_INFO, "Bad destination type during conversion: %X", - DestinationType)); - Status = AE_AML_INTERNAL; - break; - } - break; - - - case ARGI_REFERENCE: - /* - * CreateXxxxField cases - we are storing the field object into the name - */ - break; - - - default: - ACPI_ERROR ((AE_INFO, - "Unknown Target type ID 0x%X AmlOpcode %X DestType %s", - GET_CURRENT_ARG_TYPE (WalkState->OpInfo->RuntimeArgs), - WalkState->Opcode, AcpiUtGetTypeName (DestinationType))); - Status = AE_AML_INTERNAL; - } - - /* - * Source-to-Target conversion semantics: - * - * If conversion to the target type cannot be performed, then simply - * overwrite the target with the new object and type. - */ - if (Status == AE_TYPE) - { - Status = AE_OK; - } - - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/excreate.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/excreate.c deleted file mode 100644 index e5463187a..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/excreate.c +++ /dev/null @@ -1,636 +0,0 @@ -/****************************************************************************** - * - * Module Name: excreate - Named object creation - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXCREATE_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" -#include "amlcode.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("excreate") - - -#ifndef ACPI_NO_METHOD_EXECUTION -/******************************************************************************* - * - * FUNCTION: AcpiExCreateAlias - * - * PARAMETERS: WalkState - Current state, contains operands - * - * RETURN: Status - * - * DESCRIPTION: Create a new named alias - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExCreateAlias ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_NAMESPACE_NODE *TargetNode; - ACPI_NAMESPACE_NODE *AliasNode; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (ExCreateAlias); - - - /* Get the source/alias operands (both namespace nodes) */ - - AliasNode = (ACPI_NAMESPACE_NODE *) WalkState->Operands[0]; - TargetNode = (ACPI_NAMESPACE_NODE *) WalkState->Operands[1]; - - if ((TargetNode->Type == ACPI_TYPE_LOCAL_ALIAS) || - (TargetNode->Type == ACPI_TYPE_LOCAL_METHOD_ALIAS)) - { - /* - * Dereference an existing alias so that we don't create a chain - * of aliases. With this code, we guarantee that an alias is - * always exactly one level of indirection away from the - * actual aliased name. - */ - TargetNode = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, TargetNode->Object); - } - - /* - * For objects that can never change (i.e., the NS node will - * permanently point to the same object), we can simply attach - * the object to the new NS node. For other objects (such as - * Integers, buffers, etc.), we have to point the Alias node - * to the original Node. - */ - switch (TargetNode->Type) - { - - /* For these types, the sub-object can change dynamically via a Store */ - - case ACPI_TYPE_INTEGER: - case ACPI_TYPE_STRING: - case ACPI_TYPE_BUFFER: - case ACPI_TYPE_PACKAGE: - case ACPI_TYPE_BUFFER_FIELD: - - /* - * These types open a new scope, so we need the NS node in order to access - * any children. - */ - case ACPI_TYPE_DEVICE: - case ACPI_TYPE_POWER: - case ACPI_TYPE_PROCESSOR: - case ACPI_TYPE_THERMAL: - case ACPI_TYPE_LOCAL_SCOPE: - - /* - * The new alias has the type ALIAS and points to the original - * NS node, not the object itself. - */ - AliasNode->Type = ACPI_TYPE_LOCAL_ALIAS; - AliasNode->Object = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, TargetNode); - break; - - case ACPI_TYPE_METHOD: - - /* - * Control method aliases need to be differentiated - */ - AliasNode->Type = ACPI_TYPE_LOCAL_METHOD_ALIAS; - AliasNode->Object = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, TargetNode); - break; - - default: - - /* Attach the original source object to the new Alias Node */ - - /* - * The new alias assumes the type of the target, and it points - * to the same object. The reference count of the object has an - * additional reference to prevent deletion out from under either the - * target node or the alias Node - */ - Status = AcpiNsAttachObject (AliasNode, - AcpiNsGetAttachedObject (TargetNode), TargetNode->Type); - break; - } - - /* Since both operands are Nodes, we don't need to delete them */ - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExCreateEvent - * - * PARAMETERS: WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Create a new event object - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExCreateEvent ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *ObjDesc; - - - ACPI_FUNCTION_TRACE (ExCreateEvent); - - - ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_EVENT); - if (!ObjDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* - * Create the actual OS semaphore, with zero initial units -- meaning - * that the event is created in an unsignalled state - */ - Status = AcpiOsCreateSemaphore (ACPI_NO_UNIT_LIMIT, 0, - &ObjDesc->Event.OsSemaphore); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - /* Attach object to the Node */ - - Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) WalkState->Operands[0], - ObjDesc, ACPI_TYPE_EVENT); - -Cleanup: - /* - * Remove local reference to the object (on error, will cause deletion - * of both object and semaphore if present.) - */ - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExCreateMutex - * - * PARAMETERS: WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Create a new mutex object - * - * Mutex (Name[0], SyncLevel[1]) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExCreateMutex ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status = AE_OK; - ACPI_OPERAND_OBJECT *ObjDesc; - - - ACPI_FUNCTION_TRACE_PTR (ExCreateMutex, ACPI_WALK_OPERANDS); - - - /* Create the new mutex object */ - - ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_MUTEX); - if (!ObjDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* Create the actual OS Mutex */ - - Status = AcpiOsCreateMutex (&ObjDesc->Mutex.OsMutex); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - /* Init object and attach to NS node */ - - ObjDesc->Mutex.SyncLevel = (UINT8) WalkState->Operands[1]->Integer.Value; - ObjDesc->Mutex.Node = (ACPI_NAMESPACE_NODE *) WalkState->Operands[0]; - - Status = AcpiNsAttachObject (ObjDesc->Mutex.Node, ObjDesc, ACPI_TYPE_MUTEX); - - -Cleanup: - /* - * Remove local reference to the object (on error, will cause deletion - * of both object and semaphore if present.) - */ - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExCreateRegion - * - * PARAMETERS: AmlStart - Pointer to the region declaration AML - * AmlLength - Max length of the declaration AML - * RegionSpace - SpaceID for the region - * WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Create a new operation region object - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExCreateRegion ( - UINT8 *AmlStart, - UINT32 AmlLength, - UINT8 RegionSpace, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_NAMESPACE_NODE *Node; - ACPI_OPERAND_OBJECT *RegionObj2; - - - ACPI_FUNCTION_TRACE (ExCreateRegion); - - - /* Get the Namespace Node */ - - Node = WalkState->Op->Common.Node; - - /* - * If the region object is already attached to this node, - * just return - */ - if (AcpiNsGetAttachedObject (Node)) - { - return_ACPI_STATUS (AE_OK); - } - - /* - * Space ID must be one of the predefined IDs, or in the user-defined - * range - */ - if ((RegionSpace >= ACPI_NUM_PREDEFINED_REGIONS) && - (RegionSpace < ACPI_USER_REGION_BEGIN)) - { - ACPI_ERROR ((AE_INFO, "Invalid AddressSpace type %X", RegionSpace)); - return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "Region Type - %s (%X)\n", - AcpiUtGetRegionName (RegionSpace), RegionSpace)); - - /* Create the region descriptor */ - - ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_REGION); - if (!ObjDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* - * Remember location in AML stream of address & length - * operands since they need to be evaluated at run time. - */ - RegionObj2 = ObjDesc->Common.NextObject; - RegionObj2->Extra.AmlStart = AmlStart; - RegionObj2->Extra.AmlLength = AmlLength; - - /* Init the region from the operands */ - - ObjDesc->Region.SpaceId = RegionSpace; - ObjDesc->Region.Address = 0; - ObjDesc->Region.Length = 0; - ObjDesc->Region.Node = Node; - - /* Install the new region object in the parent Node */ - - Status = AcpiNsAttachObject (Node, ObjDesc, ACPI_TYPE_REGION); - - -Cleanup: - - /* Remove local reference to the object */ - - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExCreateProcessor - * - * PARAMETERS: WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Create a new processor object and populate the fields - * - * Processor (Name[0], CpuID[1], PblockAddr[2], PblockLength[3]) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExCreateProcessor ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_PTR (ExCreateProcessor, WalkState); - - - /* Create the processor object */ - - ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_PROCESSOR); - if (!ObjDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Initialize the processor object from the operands */ - - ObjDesc->Processor.ProcId = (UINT8) Operand[1]->Integer.Value; - ObjDesc->Processor.Length = (UINT8) Operand[3]->Integer.Value; - ObjDesc->Processor.Address = (ACPI_IO_ADDRESS) Operand[2]->Integer.Value; - - /* Install the processor object in the parent Node */ - - Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) Operand[0], - ObjDesc, ACPI_TYPE_PROCESSOR); - - /* Remove local reference to the object */ - - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExCreatePowerResource - * - * PARAMETERS: WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Create a new PowerResource object and populate the fields - * - * PowerResource (Name[0], SystemLevel[1], ResourceOrder[2]) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExCreatePowerResource ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *ObjDesc; - - - ACPI_FUNCTION_TRACE_PTR (ExCreatePowerResource, WalkState); - - - /* Create the power resource object */ - - ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_POWER); - if (!ObjDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Initialize the power object from the operands */ - - ObjDesc->PowerResource.SystemLevel = (UINT8) Operand[1]->Integer.Value; - ObjDesc->PowerResource.ResourceOrder = (UINT16) Operand[2]->Integer.Value; - - /* Install the power resource object in the parent Node */ - - Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) Operand[0], - ObjDesc, ACPI_TYPE_POWER); - - /* Remove local reference to the object */ - - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} -#endif - - -/******************************************************************************* - * - * FUNCTION: AcpiExCreateMethod - * - * PARAMETERS: AmlStart - First byte of the method's AML - * AmlLength - AML byte count for this method - * WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Create a new method object - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExCreateMethod ( - UINT8 *AmlStart, - UINT32 AmlLength, - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status; - UINT8 MethodFlags; - - - ACPI_FUNCTION_TRACE_PTR (ExCreateMethod, WalkState); - - - /* Create a new method object */ - - ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD); - if (!ObjDesc) - { - Status = AE_NO_MEMORY; - goto Exit; - } - - /* Save the method's AML pointer and length */ - - ObjDesc->Method.AmlStart = AmlStart; - ObjDesc->Method.AmlLength = AmlLength; - - /* - * Disassemble the method flags. Split off the Arg Count - * for efficiency - */ - MethodFlags = (UINT8) Operand[1]->Integer.Value; - - ObjDesc->Method.MethodFlags = (UINT8) (MethodFlags & ~AML_METHOD_ARG_COUNT); - ObjDesc->Method.ParamCount = (UINT8) (MethodFlags & AML_METHOD_ARG_COUNT); - - /* - * Get the SyncLevel. If method is serialized, a mutex will be - * created for this method when it is parsed. - */ - if (MethodFlags & AML_METHOD_SERIALIZED) - { - /* - * ACPI 1.0: SyncLevel = 0 - * ACPI 2.0: SyncLevel = SyncLevel in method declaration - */ - ObjDesc->Method.SyncLevel = (UINT8) - ((MethodFlags & AML_METHOD_SYNC_LEVEL) >> 4); - } - - /* Attach the new object to the method Node */ - - Status = AcpiNsAttachObject ((ACPI_NAMESPACE_NODE *) Operand[0], - ObjDesc, ACPI_TYPE_METHOD); - - /* Remove local reference to the object */ - - AcpiUtRemoveReference (ObjDesc); - -Exit: - /* Remove a reference to the operand */ - - AcpiUtRemoveReference (Operand[1]); - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exdump.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exdump.c deleted file mode 100644 index 5de5a6f6e..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exdump.c +++ /dev/null @@ -1,1194 +0,0 @@ -/****************************************************************************** - * - * Module Name: exdump - Interpreter debug output routines - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXDUMP_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" -#include "amlcode.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exdump") - -/* - * The following routines are used for debug output only - */ -#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) - -/* Local prototypes */ - -static void -AcpiExOutString ( - char *Title, - char *Value); - -static void -AcpiExOutPointer ( - char *Title, - void *Value); - -static void -AcpiExDumpObject ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_EXDUMP_INFO *Info); - -static void -AcpiExDumpReferenceObj ( - ACPI_OPERAND_OBJECT *ObjDesc); - -static void -AcpiExDumpPackageObj ( - ACPI_OPERAND_OBJECT *ObjDesc, - UINT32 Level, - UINT32 Index); - - -/******************************************************************************* - * - * Object Descriptor info tables - * - * Note: The first table entry must be an INIT opcode and must contain - * the table length (number of table entries) - * - ******************************************************************************/ - -static ACPI_EXDUMP_INFO AcpiExDumpInteger[2] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpInteger), NULL}, - {ACPI_EXD_UINT64, ACPI_EXD_OFFSET (Integer.Value), "Value"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpString[4] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpString), NULL}, - {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (String.Length), "Length"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (String.Pointer), "Pointer"}, - {ACPI_EXD_STRING, 0, NULL} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpBuffer[5] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBuffer), NULL}, - {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Buffer.Length), "Length"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Buffer.Pointer), "Pointer"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Buffer.Node), "Parent Node"}, - {ACPI_EXD_BUFFER, 0, NULL} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpPackage[5] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpPackage), NULL}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Package.Flags), "Flags"}, - {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Package.Count), "Elements"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Package.Elements), "Element List"}, - {ACPI_EXD_PACKAGE, 0, NULL} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpDevice[4] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpDevice), NULL}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Device.Handler), "Handler"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Device.SystemNotify), "System Notify"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Device.DeviceNotify), "Device Notify"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpEvent[2] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpEvent), NULL}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Event.OsSemaphore), "OsSemaphore"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpMethod[9] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpMethod), NULL}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.MethodFlags), "Method Flags"}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ParamCount), "Parameter Count"}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.SyncLevel), "Sync Level"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.Mutex), "Mutex"}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.OwnerId), "Owner Id"}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ThreadCount), "Thread Count"}, - {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Method.AmlLength), "Aml Length"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.AmlStart), "Aml Start"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpMutex[5] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpMutex), NULL}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Mutex.SyncLevel), "Sync Level"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Mutex.OwnerThread), "Owner Thread"}, - {ACPI_EXD_UINT16, ACPI_EXD_OFFSET (Mutex.AcquisitionDepth), "Acquire Depth"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Mutex.OsMutex), "OsMutex"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpRegion[7] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpRegion), NULL}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Region.SpaceId), "Space Id"}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Region.Flags), "Flags"}, - {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET (Region.Address), "Address"}, - {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Region.Length), "Length"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Region.Handler), "Handler"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Region.Next), "Next"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpPower[5] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpPower), NULL}, - {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (PowerResource.SystemLevel), "System Level"}, - {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (PowerResource.ResourceOrder), "Resource Order"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.SystemNotify), "System Notify"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.DeviceNotify), "Device Notify"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpProcessor[7] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpProcessor), NULL}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Processor.ProcId), "Processor ID"}, - {ACPI_EXD_UINT8 , ACPI_EXD_OFFSET (Processor.Length), "Length"}, - {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET (Processor.Address), "Address"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.SystemNotify), "System Notify"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.DeviceNotify), "Device Notify"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.Handler), "Handler"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpThermal[4] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpThermal), NULL}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.SystemNotify), "System Notify"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.DeviceNotify), "Device Notify"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.Handler), "Handler"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpBufferField[3] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBufferField), NULL}, - {ACPI_EXD_FIELD, 0, NULL}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BufferField.BufferObj), "Buffer Object"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpRegionField[3] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpRegionField), NULL}, - {ACPI_EXD_FIELD, 0, NULL}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Field.RegionObj), "Region Object"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpBankField[5] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField), NULL}, - {ACPI_EXD_FIELD, 0, NULL}, - {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (BankField.Value), "Value"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BankField.RegionObj), "Region Object"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BankField.BankObj), "Bank Object"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpIndexField[5] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField), NULL}, - {ACPI_EXD_FIELD, 0, NULL}, - {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (IndexField.Value), "Value"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (IndexField.IndexObj), "Index Object"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (IndexField.DataObj), "Data Object"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpReference[8] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpReference), NULL}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Reference.Class), "Class"}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Reference.TargetType), "Target Type"}, - {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Reference.Value), "Value"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.Object), "Object Desc"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.Node), "Node"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.Where), "Where"}, - {ACPI_EXD_REFERENCE,0, NULL} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpAddressHandler[6] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpAddressHandler), NULL}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (AddressSpace.SpaceId), "Space Id"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (AddressSpace.Next), "Next"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (AddressSpace.RegionList), "Region List"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (AddressSpace.Node), "Node"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (AddressSpace.Context), "Context"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpNotify[3] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpNotify), NULL}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Node), "Node"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Context), "Context"} -}; - - -/* Miscellaneous tables */ - -static ACPI_EXDUMP_INFO AcpiExDumpCommon[4] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpCommon), NULL}, - {ACPI_EXD_TYPE , 0, NULL}, - {ACPI_EXD_UINT16, ACPI_EXD_OFFSET (Common.ReferenceCount), "Reference Count"}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Common.Flags), "Flags"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpFieldCommon[7] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpFieldCommon), NULL}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.FieldFlags), "Field Flags"}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.AccessByteWidth), "Access Byte Width"}, - {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (CommonField.BitLength), "Bit Length"}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.StartFieldBitOffset),"Field Bit Offset"}, - {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (CommonField.BaseByteOffset), "Base Byte Offset"}, - {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (CommonField.Node), "Parent Node"} -}; - -static ACPI_EXDUMP_INFO AcpiExDumpNode[5] = -{ - {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpNode), NULL}, - {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET (Flags), "Flags"}, - {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET (OwnerId), "Owner Id"}, - {ACPI_EXD_POINTER, ACPI_EXD_NSOFFSET (Child), "Child List"}, - {ACPI_EXD_POINTER, ACPI_EXD_NSOFFSET (Peer), "Next Peer"} -}; - - -/* Dispatch table, indexed by object type */ - -static ACPI_EXDUMP_INFO *AcpiExDumpInfo[] = -{ - NULL, - AcpiExDumpInteger, - AcpiExDumpString, - AcpiExDumpBuffer, - AcpiExDumpPackage, - NULL, - AcpiExDumpDevice, - AcpiExDumpEvent, - AcpiExDumpMethod, - AcpiExDumpMutex, - AcpiExDumpRegion, - AcpiExDumpPower, - AcpiExDumpProcessor, - AcpiExDumpThermal, - AcpiExDumpBufferField, - NULL, - NULL, - AcpiExDumpRegionField, - AcpiExDumpBankField, - AcpiExDumpIndexField, - AcpiExDumpReference, - NULL, - NULL, - AcpiExDumpNotify, - AcpiExDumpAddressHandler, - NULL, - NULL, - NULL -}; - - -/******************************************************************************* - * - * FUNCTION: AcpiExDumpObject - * - * PARAMETERS: ObjDesc - Descriptor to dump - * Info - Info table corresponding to this object - * type - * - * RETURN: None - * - * DESCRIPTION: Walk the info table for this object - * - ******************************************************************************/ - -static void -AcpiExDumpObject ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_EXDUMP_INFO *Info) -{ - UINT8 *Target; - char *Name; - UINT8 Count; - - - if (!Info) - { - AcpiOsPrintf ( - "ExDumpObject: Display not implemented for object type %s\n", - AcpiUtGetObjectTypeName (ObjDesc)); - return; - } - - /* First table entry must contain the table length (# of table entries) */ - - Count = Info->Offset; - - while (Count) - { - Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset); - Name = Info->Name; - - switch (Info->Opcode) - { - case ACPI_EXD_INIT: - break; - - case ACPI_EXD_TYPE: - - AcpiExOutString ("Type", AcpiUtGetObjectTypeName (ObjDesc)); - break; - - case ACPI_EXD_UINT8: - - AcpiOsPrintf ("%20s : %2.2X\n", Name, *Target); - break; - - case ACPI_EXD_UINT16: - - AcpiOsPrintf ("%20s : %4.4X\n", Name, ACPI_GET16 (Target)); - break; - - case ACPI_EXD_UINT32: - - AcpiOsPrintf ("%20s : %8.8X\n", Name, ACPI_GET32 (Target)); - break; - - case ACPI_EXD_UINT64: - - AcpiOsPrintf ("%20s : %8.8X%8.8X\n", "Value", - ACPI_FORMAT_UINT64 (ACPI_GET64 (Target))); - break; - - case ACPI_EXD_POINTER: - case ACPI_EXD_ADDRESS: - - AcpiExOutPointer (Name, *ACPI_CAST_PTR (void *, Target)); - break; - - case ACPI_EXD_STRING: - - AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX); - AcpiOsPrintf ("\n"); - break; - - case ACPI_EXD_BUFFER: - - ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length); - break; - - case ACPI_EXD_PACKAGE: - - /* Dump the package contents */ - - AcpiOsPrintf ("\nPackage Contents:\n"); - AcpiExDumpPackageObj (ObjDesc, 0, 0); - break; - - case ACPI_EXD_FIELD: - - AcpiExDumpObject (ObjDesc, AcpiExDumpFieldCommon); - break; - - case ACPI_EXD_REFERENCE: - - AcpiExOutString ("Class Name", - ACPI_CAST_PTR (char, AcpiUtGetReferenceName (ObjDesc))); - AcpiExDumpReferenceObj (ObjDesc); - break; - - default: - - AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n", - Info->Opcode); - return; - } - - Info++; - Count--; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExDumpOperand - * - * PARAMETERS: *ObjDesc - Pointer to entry to be dumped - * Depth - Current nesting depth - * - * RETURN: None - * - * DESCRIPTION: Dump an operand object - * - ******************************************************************************/ - -void -AcpiExDumpOperand ( - ACPI_OPERAND_OBJECT *ObjDesc, - UINT32 Depth) -{ - UINT32 Length; - UINT32 Index; - - - ACPI_FUNCTION_NAME (ExDumpOperand) - - - if (!((ACPI_LV_EXEC & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer))) - { - return; - } - - if (!ObjDesc) - { - /* This could be a null element of a package */ - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n")); - return; - } - - if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc)); - ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC); - return; - } - - if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "%p is not a node or operand object: [%s]\n", - ObjDesc, AcpiUtGetDescriptorName (ObjDesc))); - ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT)); - return; - } - - /* ObjDesc is a valid object */ - - if (Depth > 0) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p ", - Depth, " ", Depth, ObjDesc)); - } - else - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", ObjDesc)); - } - - /* Decode object type */ - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_LOCAL_REFERENCE: - - AcpiOsPrintf ("Reference: [%s] ", AcpiUtGetReferenceName (ObjDesc)); - - switch (ObjDesc->Reference.Class) - { - case ACPI_REFCLASS_DEBUG: - - AcpiOsPrintf ("\n"); - break; - - - case ACPI_REFCLASS_INDEX: - - AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object); - break; - - - case ACPI_REFCLASS_TABLE: - - AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value); - break; - - - case ACPI_REFCLASS_REFOF: - - AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object, - AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *) - ObjDesc->Reference.Object)->Common.Type)); - break; - - - case ACPI_REFCLASS_NAME: - - AcpiOsPrintf ("- [%4.4s]\n", ObjDesc->Reference.Node->Name.Ascii); - break; - - - case ACPI_REFCLASS_ARG: - case ACPI_REFCLASS_LOCAL: - - AcpiOsPrintf ("%X\n", ObjDesc->Reference.Value); - break; - - - default: /* Unknown reference class */ - - AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class); - break; - } - break; - - - case ACPI_TYPE_BUFFER: - - AcpiOsPrintf ("Buffer length %.2X @ %p\n", - ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer); - - /* Debug only -- dump the buffer contents */ - - if (ObjDesc->Buffer.Pointer) - { - Length = ObjDesc->Buffer.Length; - if (Length > 128) - { - Length = 128; - } - - AcpiOsPrintf ("Buffer Contents: (displaying length 0x%.2X)\n", - Length); - ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, Length); - } - break; - - - case ACPI_TYPE_INTEGER: - - AcpiOsPrintf ("Integer %8.8X%8.8X\n", - ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); - break; - - - case ACPI_TYPE_PACKAGE: - - AcpiOsPrintf ("Package [Len %X] ElementArray %p\n", - ObjDesc->Package.Count, ObjDesc->Package.Elements); - - /* - * If elements exist, package element pointer is valid, - * and debug_level exceeds 1, dump package's elements. - */ - if (ObjDesc->Package.Count && - ObjDesc->Package.Elements && - AcpiDbgLevel > 1) - { - for (Index = 0; Index < ObjDesc->Package.Count; Index++) - { - AcpiExDumpOperand (ObjDesc->Package.Elements[Index], Depth+1); - } - } - break; - - - case ACPI_TYPE_REGION: - - AcpiOsPrintf ("Region %s (%X)", - AcpiUtGetRegionName (ObjDesc->Region.SpaceId), - ObjDesc->Region.SpaceId); - - /* - * If the address and length have not been evaluated, - * don't print them. - */ - if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID)) - { - AcpiOsPrintf ("\n"); - } - else - { - AcpiOsPrintf (" base %8.8X%8.8X Length %X\n", - ACPI_FORMAT_NATIVE_UINT (ObjDesc->Region.Address), - ObjDesc->Region.Length); - } - break; - - - case ACPI_TYPE_STRING: - - AcpiOsPrintf ("String length %X @ %p ", - ObjDesc->String.Length, - ObjDesc->String.Pointer); - - AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX); - AcpiOsPrintf ("\n"); - break; - - - case ACPI_TYPE_LOCAL_BANK_FIELD: - - AcpiOsPrintf ("BankField\n"); - break; - - - case ACPI_TYPE_LOCAL_REGION_FIELD: - - AcpiOsPrintf ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at " - "byte=%X bit=%X of below:\n", - ObjDesc->Field.BitLength, - ObjDesc->Field.AccessByteWidth, - ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK, - ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK, - ObjDesc->Field.BaseByteOffset, - ObjDesc->Field.StartFieldBitOffset); - - AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth+1); - break; - - - case ACPI_TYPE_LOCAL_INDEX_FIELD: - - AcpiOsPrintf ("IndexField\n"); - break; - - - case ACPI_TYPE_BUFFER_FIELD: - - AcpiOsPrintf ("BufferField: %X bits at byte %X bit %X of\n", - ObjDesc->BufferField.BitLength, - ObjDesc->BufferField.BaseByteOffset, - ObjDesc->BufferField.StartFieldBitOffset); - - if (!ObjDesc->BufferField.BufferObj) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n")); - } - else if ((ObjDesc->BufferField.BufferObj)->Common.Type != - ACPI_TYPE_BUFFER) - { - AcpiOsPrintf ("*not a Buffer*\n"); - } - else - { - AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth+1); - } - break; - - - case ACPI_TYPE_EVENT: - - AcpiOsPrintf ("Event\n"); - break; - - - case ACPI_TYPE_METHOD: - - AcpiOsPrintf ("Method(%X) @ %p:%X\n", - ObjDesc->Method.ParamCount, - ObjDesc->Method.AmlStart, - ObjDesc->Method.AmlLength); - break; - - - case ACPI_TYPE_MUTEX: - - AcpiOsPrintf ("Mutex\n"); - break; - - - case ACPI_TYPE_DEVICE: - - AcpiOsPrintf ("Device\n"); - break; - - - case ACPI_TYPE_POWER: - - AcpiOsPrintf ("Power\n"); - break; - - - case ACPI_TYPE_PROCESSOR: - - AcpiOsPrintf ("Processor\n"); - break; - - - case ACPI_TYPE_THERMAL: - - AcpiOsPrintf ("Thermal\n"); - break; - - - default: - /* Unknown Type */ - - AcpiOsPrintf ("Unknown Type %X\n", ObjDesc->Common.Type); - break; - } - - return; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExDumpOperands - * - * PARAMETERS: Operands - A list of Operand objects - * OpcodeName - AML opcode name - * NumOperands - Operand count for this opcode - * - * DESCRIPTION: Dump the operands associated with the opcode - * - ******************************************************************************/ - -void -AcpiExDumpOperands ( - ACPI_OPERAND_OBJECT **Operands, - const char *OpcodeName, - UINT32 NumOperands) -{ - ACPI_FUNCTION_NAME (ExDumpOperands); - - - if (!OpcodeName) - { - OpcodeName = "UNKNOWN"; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "**** Start operand dump for opcode [%s], %d operands\n", - OpcodeName, NumOperands)); - - if (NumOperands == 0) - { - NumOperands = 1; - } - - /* Dump the individual operands */ - - while (NumOperands) - { - AcpiExDumpOperand (*Operands, 0); - Operands++; - NumOperands--; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "**** End operand dump for [%s]\n", OpcodeName)); - return; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExOut* functions - * - * PARAMETERS: Title - Descriptive text - * Value - Value to be displayed - * - * DESCRIPTION: Object dump output formatting functions. These functions - * reduce the number of format strings required and keeps them - * all in one place for easy modification. - * - ******************************************************************************/ - -static void -AcpiExOutString ( - char *Title, - char *Value) -{ - AcpiOsPrintf ("%20s : %s\n", Title, Value); -} - -static void -AcpiExOutPointer ( - char *Title, - void *Value) -{ - AcpiOsPrintf ("%20s : %p\n", Title, Value); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExDumpNamespaceNode - * - * PARAMETERS: Node - Descriptor to dump - * Flags - Force display if TRUE - * - * DESCRIPTION: Dumps the members of the given.Node - * - ******************************************************************************/ - -void -AcpiExDumpNamespaceNode ( - ACPI_NAMESPACE_NODE *Node, - UINT32 Flags) -{ - - ACPI_FUNCTION_ENTRY (); - - - if (!Flags) - { - if (!((ACPI_LV_OBJECTS & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer))) - { - return; - } - } - - AcpiOsPrintf ("%20s : %4.4s\n", "Name", AcpiUtGetNodeName (Node)); - AcpiExOutString ("Type", AcpiUtGetTypeName (Node->Type)); - AcpiExOutPointer ("Attached Object", AcpiNsGetAttachedObject (Node)); - AcpiExOutPointer ("Parent", AcpiNsGetParentNode (Node)); - - AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node), - AcpiExDumpNode); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExDumpReferenceObj - * - * PARAMETERS: Object - Descriptor to dump - * - * DESCRIPTION: Dumps a reference object - * - ******************************************************************************/ - -static void -AcpiExDumpReferenceObj ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_BUFFER RetBuf; - ACPI_STATUS Status; - - - RetBuf.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - - if (ObjDesc->Reference.Class == ACPI_REFCLASS_NAME) - { - AcpiOsPrintf (" %p ", ObjDesc->Reference.Node); - - Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node, &RetBuf); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf (" Could not convert name to pathname\n"); - } - else - { - AcpiOsPrintf ("%s\n", (char *) RetBuf.Pointer); - ACPI_FREE (RetBuf.Pointer); - } - } - else if (ObjDesc->Reference.Object) - { - if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND) - { - AcpiOsPrintf (" Target: %p", ObjDesc->Reference.Object); - if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE) - { - AcpiOsPrintf (" Table Index: %X\n", ObjDesc->Reference.Value); - } - else - { - AcpiOsPrintf (" Target: %p [%s]\n", ObjDesc->Reference.Object, - AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *) - ObjDesc->Reference.Object)->Common.Type)); - } - } - else - { - AcpiOsPrintf (" Target: %p\n", ObjDesc->Reference.Object); - } - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExDumpPackageObj - * - * PARAMETERS: ObjDesc - Descriptor to dump - * Level - Indentation Level - * Index - Package index for this object - * - * DESCRIPTION: Dumps the elements of the package - * - ******************************************************************************/ - -static void -AcpiExDumpPackageObj ( - ACPI_OPERAND_OBJECT *ObjDesc, - UINT32 Level, - UINT32 Index) -{ - UINT32 i; - - - /* Indentation and index output */ - - if (Level > 0) - { - for (i = 0; i < Level; i++) - { - AcpiOsPrintf (" "); - } - - AcpiOsPrintf ("[%.2d] ", Index); - } - - AcpiOsPrintf ("%p ", ObjDesc); - - /* Null package elements are allowed */ - - if (!ObjDesc) - { - AcpiOsPrintf ("[Null Object]\n"); - return; - } - - /* Packages may only contain a few object types */ - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_INTEGER: - - AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n", - ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); - break; - - - case ACPI_TYPE_STRING: - - AcpiOsPrintf ("[String] Value: "); - for (i = 0; i < ObjDesc->String.Length; i++) - { - AcpiOsPrintf ("%c", ObjDesc->String.Pointer[i]); - } - AcpiOsPrintf ("\n"); - break; - - - case ACPI_TYPE_BUFFER: - - AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length); - if (ObjDesc->Buffer.Length) - { - AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer), - ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT); - } - else - { - AcpiOsPrintf ("\n"); - } - break; - - - case ACPI_TYPE_PACKAGE: - - AcpiOsPrintf ("[Package] Contains %d Elements:\n", - ObjDesc->Package.Count); - - for (i = 0; i < ObjDesc->Package.Count; i++) - { - AcpiExDumpPackageObj (ObjDesc->Package.Elements[i], Level+1, i); - } - break; - - - case ACPI_TYPE_LOCAL_REFERENCE: - - AcpiOsPrintf ("[Object Reference] Type [%s] %2.2X", - AcpiUtGetReferenceName (ObjDesc), - ObjDesc->Reference.Class); - AcpiExDumpReferenceObj (ObjDesc); - break; - - - default: - - AcpiOsPrintf ("[Unknown Type] %X\n", ObjDesc->Common.Type); - break; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExDumpObjectDescriptor - * - * PARAMETERS: ObjDesc - Descriptor to dump - * Flags - Force display if TRUE - * - * DESCRIPTION: Dumps the members of the object descriptor given. - * - ******************************************************************************/ - -void -AcpiExDumpObjectDescriptor ( - ACPI_OPERAND_OBJECT *ObjDesc, - UINT32 Flags) -{ - ACPI_FUNCTION_TRACE (ExDumpObjectDescriptor); - - - if (!ObjDesc) - { - return_VOID; - } - - if (!Flags) - { - if (!((ACPI_LV_OBJECTS & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer))) - { - return_VOID; - } - } - - if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED) - { - AcpiExDumpNamespaceNode ((ACPI_NAMESPACE_NODE *) ObjDesc, Flags); - - AcpiOsPrintf ("\nAttached Object (%p):\n", - ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object); - - AcpiExDumpObjectDescriptor ( - ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object, Flags); - return_VOID; - } - - if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) - { - AcpiOsPrintf ( - "ExDumpObjectDescriptor: %p is not an ACPI operand object: [%s]\n", - ObjDesc, AcpiUtGetDescriptorName (ObjDesc)); - return_VOID; - } - - if (ObjDesc->Common.Type > ACPI_TYPE_NS_NODE_MAX) - { - return_VOID; - } - - /* Common Fields */ - - AcpiExDumpObject (ObjDesc, AcpiExDumpCommon); - - /* Object-specific fields */ - - AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]); - return_VOID; -} - -#endif - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exfield.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exfield.c deleted file mode 100644 index 503e8e6b3..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exfield.c +++ /dev/null @@ -1,466 +0,0 @@ -/****************************************************************************** - * - * Module Name: exfield - ACPI AML (p-code) execution - field manipulation - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __EXFIELD_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acdispat.h" -#include "acinterp.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exfield") - - -/******************************************************************************* - * - * FUNCTION: AcpiExReadDataFromField - * - * PARAMETERS: WalkState - Current execution state - * ObjDesc - The named field - * RetBufferDesc - Where the return data object is stored - * - * RETURN: Status - * - * DESCRIPTION: Read from a named field. Returns either an Integer or a - * Buffer, depending on the size of the field. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExReadDataFromField ( - ACPI_WALK_STATE *WalkState, - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_OPERAND_OBJECT **RetBufferDesc) -{ - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *BufferDesc; - ACPI_SIZE Length; - void *Buffer; - UINT32 Function; - - - ACPI_FUNCTION_TRACE_PTR (ExReadDataFromField, ObjDesc); - - - /* Parameter validation */ - - if (!ObjDesc) - { - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } - if (!RetBufferDesc) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - if (ObjDesc->Common.Type == ACPI_TYPE_BUFFER_FIELD) - { - /* - * If the BufferField arguments have not been previously evaluated, - * evaluate them now and save the results. - */ - if (!(ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)) - { - Status = AcpiDsGetBufferFieldArguments (ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - } - else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) && - (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS || - ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI)) - { - /* - * This is an SMBus or IPMI read. We must create a buffer to hold - * the data and then directly access the region handler. - * - * Note: Smbus protocol value is passed in upper 16-bits of Function - */ - if (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS) - { - Length = ACPI_SMBUS_BUFFER_SIZE; - Function = ACPI_READ | (ObjDesc->Field.Attribute << 16); - } - else /* IPMI */ - { - Length = ACPI_IPMI_BUFFER_SIZE; - Function = ACPI_READ; - } - - BufferDesc = AcpiUtCreateBufferObject (Length); - if (!BufferDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Lock entire transaction if requested */ - - AcpiExAcquireGlobalLock (ObjDesc->CommonField.FieldFlags); - - /* Call the region handler for the read */ - - Status = AcpiExAccessRegion (ObjDesc, 0, - ACPI_CAST_PTR (ACPI_INTEGER, BufferDesc->Buffer.Pointer), - Function); - AcpiExReleaseGlobalLock (ObjDesc->CommonField.FieldFlags); - goto Exit; - } - - /* - * Allocate a buffer for the contents of the field. - * - * If the field is larger than the size of an ACPI_INTEGER, create - * a BUFFER to hold it. Otherwise, use an INTEGER. This allows - * the use of arithmetic operators on the returned value if the - * field size is equal or smaller than an Integer. - * - * Note: Field.length is in bits. - */ - Length = (ACPI_SIZE) ACPI_ROUND_BITS_UP_TO_BYTES (ObjDesc->Field.BitLength); - if (Length > AcpiGbl_IntegerByteWidth) - { - /* Field is too large for an Integer, create a Buffer instead */ - - BufferDesc = AcpiUtCreateBufferObject (Length); - if (!BufferDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - Buffer = BufferDesc->Buffer.Pointer; - } - else - { - /* Field will fit within an Integer (normal case) */ - - BufferDesc = AcpiUtCreateIntegerObject ((UINT64) 0); - if (!BufferDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - Length = AcpiGbl_IntegerByteWidth; - Buffer = &BufferDesc->Integer.Value; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "FieldRead [TO]: Obj %p, Type %X, Buf %p, ByteLen %X\n", - ObjDesc, ObjDesc->Common.Type, Buffer, (UINT32) Length)); - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "FieldRead [FROM]: BitLen %X, BitOff %X, ByteOff %X\n", - ObjDesc->CommonField.BitLength, - ObjDesc->CommonField.StartFieldBitOffset, - ObjDesc->CommonField.BaseByteOffset)); - - /* Lock entire transaction if requested */ - - AcpiExAcquireGlobalLock (ObjDesc->CommonField.FieldFlags); - - /* Read from the field */ - - Status = AcpiExExtractFromField (ObjDesc, Buffer, (UINT32) Length); - AcpiExReleaseGlobalLock (ObjDesc->CommonField.FieldFlags); - - -Exit: - if (ACPI_FAILURE (Status)) - { - AcpiUtRemoveReference (BufferDesc); - } - else - { - *RetBufferDesc = BufferDesc; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExWriteDataToField - * - * PARAMETERS: SourceDesc - Contains data to write - * ObjDesc - The named field - * ResultDesc - Where the return value is returned, if any - * - * RETURN: Status - * - * DESCRIPTION: Write to a named field - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExWriteDataToField ( - ACPI_OPERAND_OBJECT *SourceDesc, - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_OPERAND_OBJECT **ResultDesc) -{ - ACPI_STATUS Status; - UINT32 Length; - void *Buffer; - ACPI_OPERAND_OBJECT *BufferDesc; - UINT32 Function; - - - ACPI_FUNCTION_TRACE_PTR (ExWriteDataToField, ObjDesc); - - - /* Parameter validation */ - - if (!SourceDesc || !ObjDesc) - { - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } - - if (ObjDesc->Common.Type == ACPI_TYPE_BUFFER_FIELD) - { - /* - * If the BufferField arguments have not been previously evaluated, - * evaluate them now and save the results. - */ - if (!(ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)) - { - Status = AcpiDsGetBufferFieldArguments (ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - } - else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) && - (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS || - ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI)) - { - /* - * This is an SMBus or IPMI write. We will bypass the entire field - * mechanism and handoff the buffer directly to the handler. For - * these address spaces, the buffer is bi-directional; on a write, - * return data is returned in the same buffer. - * - * Source must be a buffer of sufficient size: - * ACPI_SMBUS_BUFFER_SIZE or ACPI_IPMI_BUFFER_SIZE. - * - * Note: SMBus protocol type is passed in upper 16-bits of Function - */ - if (SourceDesc->Common.Type != ACPI_TYPE_BUFFER) - { - ACPI_ERROR ((AE_INFO, - "SMBus or IPMI write requires Buffer, found type %s", - AcpiUtGetObjectTypeName (SourceDesc))); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - if (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS) - { - Length = ACPI_SMBUS_BUFFER_SIZE; - Function = ACPI_WRITE | (ObjDesc->Field.Attribute << 16); - } - else /* IPMI */ - { - Length = ACPI_IPMI_BUFFER_SIZE; - Function = ACPI_WRITE; - } - - if (SourceDesc->Buffer.Length < Length) - { - ACPI_ERROR ((AE_INFO, - "SMBus or IPMI write requires Buffer of length %X, found length %X", - Length, SourceDesc->Buffer.Length)); - - return_ACPI_STATUS (AE_AML_BUFFER_LIMIT); - } - - /* Create the bi-directional buffer */ - - BufferDesc = AcpiUtCreateBufferObject (Length); - if (!BufferDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - Buffer = BufferDesc->Buffer.Pointer; - ACPI_MEMCPY (Buffer, SourceDesc->Buffer.Pointer, Length); - - /* Lock entire transaction if requested */ - - AcpiExAcquireGlobalLock (ObjDesc->CommonField.FieldFlags); - - /* - * Perform the write (returns status and perhaps data in the - * same buffer) - */ - Status = AcpiExAccessRegion (ObjDesc, 0, - (ACPI_INTEGER *) Buffer, Function); - AcpiExReleaseGlobalLock (ObjDesc->CommonField.FieldFlags); - - *ResultDesc = BufferDesc; - return_ACPI_STATUS (Status); - } - - /* Get a pointer to the data to be written */ - - switch (SourceDesc->Common.Type) - { - case ACPI_TYPE_INTEGER: - Buffer = &SourceDesc->Integer.Value; - Length = sizeof (SourceDesc->Integer.Value); - break; - - case ACPI_TYPE_BUFFER: - Buffer = SourceDesc->Buffer.Pointer; - Length = SourceDesc->Buffer.Length; - break; - - case ACPI_TYPE_STRING: - Buffer = SourceDesc->String.Pointer; - Length = SourceDesc->String.Length; - break; - - default: - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "FieldWrite [FROM]: Obj %p (%s:%X), Buf %p, ByteLen %X\n", - SourceDesc, AcpiUtGetTypeName (SourceDesc->Common.Type), - SourceDesc->Common.Type, Buffer, Length)); - - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "FieldWrite [TO]: Obj %p (%s:%X), BitLen %X, BitOff %X, ByteOff %X\n", - ObjDesc, AcpiUtGetTypeName (ObjDesc->Common.Type), - ObjDesc->Common.Type, - ObjDesc->CommonField.BitLength, - ObjDesc->CommonField.StartFieldBitOffset, - ObjDesc->CommonField.BaseByteOffset)); - - /* Lock entire transaction if requested */ - - AcpiExAcquireGlobalLock (ObjDesc->CommonField.FieldFlags); - - /* Write to the field */ - - Status = AcpiExInsertIntoField (ObjDesc, Buffer, Length); - AcpiExReleaseGlobalLock (ObjDesc->CommonField.FieldFlags); - - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exfldio.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exfldio.c deleted file mode 100644 index 37a678655..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exfldio.c +++ /dev/null @@ -1,1081 +0,0 @@ -/****************************************************************************** - * - * Module Name: exfldio - Aml Field I/O - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __EXFLDIO_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" -#include "amlcode.h" -#include "acevents.h" -#include "acdispat.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exfldio") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiExFieldDatumIo ( - ACPI_OPERAND_OBJECT *ObjDesc, - UINT32 FieldDatumByteOffset, - ACPI_INTEGER *Value, - UINT32 ReadWrite); - -static BOOLEAN -AcpiExRegisterOverflow ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_INTEGER Value); - -static ACPI_STATUS -AcpiExSetupRegion ( - ACPI_OPERAND_OBJECT *ObjDesc, - UINT32 FieldDatumByteOffset); - - -/******************************************************************************* - * - * FUNCTION: AcpiExSetupRegion - * - * PARAMETERS: ObjDesc - Field to be read or written - * FieldDatumByteOffset - Byte offset of this datum within the - * parent field - * - * RETURN: Status - * - * DESCRIPTION: Common processing for AcpiExExtractFromField and - * AcpiExInsertIntoField. Initialize the Region if necessary and - * validate the request. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiExSetupRegion ( - ACPI_OPERAND_OBJECT *ObjDesc, - UINT32 FieldDatumByteOffset) -{ - ACPI_STATUS Status = AE_OK; - ACPI_OPERAND_OBJECT *RgnDesc; - - - ACPI_FUNCTION_TRACE_U32 (ExSetupRegion, FieldDatumByteOffset); - - - RgnDesc = ObjDesc->CommonField.RegionObj; - - /* We must have a valid region */ - - if (RgnDesc->Common.Type != ACPI_TYPE_REGION) - { - ACPI_ERROR ((AE_INFO, "Needed Region, found type %X (%s)", - RgnDesc->Common.Type, - AcpiUtGetObjectTypeName (RgnDesc))); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - /* - * If the Region Address and Length have not been previously evaluated, - * evaluate them now and save the results. - */ - if (!(RgnDesc->Common.Flags & AOPOBJ_DATA_VALID)) - { - Status = AcpiDsGetRegionArguments (RgnDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* - * Exit now for SMBus or IPMI address space, it has a non-linear address space - * and the request cannot be directly validated - */ - if (RgnDesc->Region.SpaceId == ACPI_ADR_SPACE_SMBUS || - RgnDesc->Region.SpaceId == ACPI_ADR_SPACE_IPMI) - { - /* SMBus or IPMI has a non-linear address space */ - - return_ACPI_STATUS (AE_OK); - } - -#ifdef ACPI_UNDER_DEVELOPMENT - /* - * If the Field access is AnyAcc, we can now compute the optimal - * access (because we know know the length of the parent region) - */ - if (!(ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)) - { - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } -#endif - - /* - * Validate the request. The entire request from the byte offset for a - * length of one field datum (access width) must fit within the region. - * (Region length is specified in bytes) - */ - if (RgnDesc->Region.Length < - (ObjDesc->CommonField.BaseByteOffset + - FieldDatumByteOffset + - ObjDesc->CommonField.AccessByteWidth)) - { - if (AcpiGbl_EnableInterpreterSlack) - { - /* - * Slack mode only: We will go ahead and allow access to this - * field if it is within the region length rounded up to the next - * access width boundary. ACPI_SIZE cast for 64-bit compile. - */ - if (ACPI_ROUND_UP (RgnDesc->Region.Length, - ObjDesc->CommonField.AccessByteWidth) >= - ((ACPI_SIZE) ObjDesc->CommonField.BaseByteOffset + - ObjDesc->CommonField.AccessByteWidth + - FieldDatumByteOffset)) - { - return_ACPI_STATUS (AE_OK); - } - } - - if (RgnDesc->Region.Length < ObjDesc->CommonField.AccessByteWidth) - { - /* - * This is the case where the AccessType (AccWord, etc.) is wider - * than the region itself. For example, a region of length one - * byte, and a field with Dword access specified. - */ - ACPI_ERROR ((AE_INFO, - "Field [%4.4s] access width (%d bytes) too large for region [%4.4s] (length %X)", - AcpiUtGetNodeName (ObjDesc->CommonField.Node), - ObjDesc->CommonField.AccessByteWidth, - AcpiUtGetNodeName (RgnDesc->Region.Node), - RgnDesc->Region.Length)); - } - - /* - * Offset rounded up to next multiple of field width - * exceeds region length, indicate an error - */ - ACPI_ERROR ((AE_INFO, - "Field [%4.4s] Base+Offset+Width %X+%X+%X is beyond end of region [%4.4s] (length %X)", - AcpiUtGetNodeName (ObjDesc->CommonField.Node), - ObjDesc->CommonField.BaseByteOffset, - FieldDatumByteOffset, ObjDesc->CommonField.AccessByteWidth, - AcpiUtGetNodeName (RgnDesc->Region.Node), - RgnDesc->Region.Length)); - - return_ACPI_STATUS (AE_AML_REGION_LIMIT); - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExAccessRegion - * - * PARAMETERS: ObjDesc - Field to be read - * FieldDatumByteOffset - Byte offset of this datum within the - * parent field - * Value - Where to store value (must at least - * the size of ACPI_INTEGER) - * Function - Read or Write flag plus other region- - * dependent flags - * - * RETURN: Status - * - * DESCRIPTION: Read or Write a single field datum to an Operation Region. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExAccessRegion ( - ACPI_OPERAND_OBJECT *ObjDesc, - UINT32 FieldDatumByteOffset, - ACPI_INTEGER *Value, - UINT32 Function) -{ - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *RgnDesc; - UINT32 RegionOffset; - - - ACPI_FUNCTION_TRACE (ExAccessRegion); - - - /* - * Ensure that the region operands are fully evaluated and verify - * the validity of the request - */ - Status = AcpiExSetupRegion (ObjDesc, FieldDatumByteOffset); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * The physical address of this field datum is: - * - * 1) The base of the region, plus - * 2) The base offset of the field, plus - * 3) The current offset into the field - */ - RgnDesc = ObjDesc->CommonField.RegionObj; - RegionOffset = - ObjDesc->CommonField.BaseByteOffset + - FieldDatumByteOffset; - - if ((Function & ACPI_IO_MASK) == ACPI_READ) - { - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "[READ]")); - } - else - { - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "[WRITE]")); - } - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_BFIELD, - " Region [%s:%X], Width %X, ByteBase %X, Offset %X at %p\n", - AcpiUtGetRegionName (RgnDesc->Region.SpaceId), - RgnDesc->Region.SpaceId, - ObjDesc->CommonField.AccessByteWidth, - ObjDesc->CommonField.BaseByteOffset, - FieldDatumByteOffset, - ACPI_CAST_PTR (void, (RgnDesc->Region.Address + RegionOffset)))); - - /* Invoke the appropriate AddressSpace/OpRegion handler */ - - Status = AcpiEvAddressSpaceDispatch (RgnDesc, Function, RegionOffset, - ACPI_MUL_8 (ObjDesc->CommonField.AccessByteWidth), Value); - - if (ACPI_FAILURE (Status)) - { - if (Status == AE_NOT_IMPLEMENTED) - { - ACPI_ERROR ((AE_INFO, - "Region %s(%X) not implemented", - AcpiUtGetRegionName (RgnDesc->Region.SpaceId), - RgnDesc->Region.SpaceId)); - } - else if (Status == AE_NOT_EXIST) - { - ACPI_ERROR ((AE_INFO, - "Region %s(%X) has no handler", - AcpiUtGetRegionName (RgnDesc->Region.SpaceId), - RgnDesc->Region.SpaceId)); - } - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExRegisterOverflow - * - * PARAMETERS: ObjDesc - Register(Field) to be written - * Value - Value to be stored - * - * RETURN: TRUE if value overflows the field, FALSE otherwise - * - * DESCRIPTION: Check if a value is out of range of the field being written. - * Used to check if the values written to Index and Bank registers - * are out of range. Normally, the value is simply truncated - * to fit the field, but this case is most likely a serious - * coding error in the ASL. - * - ******************************************************************************/ - -static BOOLEAN -AcpiExRegisterOverflow ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_INTEGER Value) -{ - - if (ObjDesc->CommonField.BitLength >= ACPI_INTEGER_BIT_SIZE) - { - /* - * The field is large enough to hold the maximum integer, so we can - * never overflow it. - */ - return (FALSE); - } - - if (Value >= ((ACPI_INTEGER) 1 << ObjDesc->CommonField.BitLength)) - { - /* - * The Value is larger than the maximum value that can fit into - * the register. - */ - return (TRUE); - } - - /* The Value will fit into the field with no truncation */ - - return (FALSE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExFieldDatumIo - * - * PARAMETERS: ObjDesc - Field to be read - * FieldDatumByteOffset - Byte offset of this datum within the - * parent field - * Value - Where to store value (must be 64 bits) - * ReadWrite - Read or Write flag - * - * RETURN: Status - * - * DESCRIPTION: Read or Write a single datum of a field. The FieldType is - * demultiplexed here to handle the different types of fields - * (BufferField, RegionField, IndexField, BankField) - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiExFieldDatumIo ( - ACPI_OPERAND_OBJECT *ObjDesc, - UINT32 FieldDatumByteOffset, - ACPI_INTEGER *Value, - UINT32 ReadWrite) -{ - ACPI_STATUS Status; - ACPI_INTEGER LocalValue; - - - ACPI_FUNCTION_TRACE_U32 (ExFieldDatumIo, FieldDatumByteOffset); - - - if (ReadWrite == ACPI_READ) - { - if (!Value) - { - LocalValue = 0; - - /* To support reads without saving return value */ - Value = &LocalValue; - } - - /* Clear the entire return buffer first, [Very Important!] */ - - *Value = 0; - } - - /* - * The four types of fields are: - * - * BufferField - Read/write from/to a Buffer - * RegionField - Read/write from/to a Operation Region. - * BankField - Write to a Bank Register, then read/write from/to an - * OperationRegion - * IndexField - Write to an Index Register, then read/write from/to a - * Data Register - */ - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_BUFFER_FIELD: - /* - * If the BufferField arguments have not been previously evaluated, - * evaluate them now and save the results. - */ - if (!(ObjDesc->Common.Flags & AOPOBJ_DATA_VALID)) - { - Status = AcpiDsGetBufferFieldArguments (ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - if (ReadWrite == ACPI_READ) - { - /* - * Copy the data from the source buffer. - * Length is the field width in bytes. - */ - ACPI_MEMCPY (Value, - (ObjDesc->BufferField.BufferObj)->Buffer.Pointer + - ObjDesc->BufferField.BaseByteOffset + - FieldDatumByteOffset, - ObjDesc->CommonField.AccessByteWidth); - } - else - { - /* - * Copy the data to the target buffer. - * Length is the field width in bytes. - */ - ACPI_MEMCPY ((ObjDesc->BufferField.BufferObj)->Buffer.Pointer + - ObjDesc->BufferField.BaseByteOffset + - FieldDatumByteOffset, - Value, ObjDesc->CommonField.AccessByteWidth); - } - - Status = AE_OK; - break; - - - case ACPI_TYPE_LOCAL_BANK_FIELD: - - /* - * Ensure that the BankValue is not beyond the capacity of - * the register - */ - if (AcpiExRegisterOverflow (ObjDesc->BankField.BankObj, - (ACPI_INTEGER) ObjDesc->BankField.Value)) - { - return_ACPI_STATUS (AE_AML_REGISTER_LIMIT); - } - - /* - * For BankFields, we must write the BankValue to the BankRegister - * (itself a RegionField) before we can access the data. - */ - Status = AcpiExInsertIntoField (ObjDesc->BankField.BankObj, - &ObjDesc->BankField.Value, - sizeof (ObjDesc->BankField.Value)); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Now that the Bank has been selected, fall through to the - * RegionField case and write the datum to the Operation Region - */ - - /*lint -fallthrough */ - - - case ACPI_TYPE_LOCAL_REGION_FIELD: - /* - * For simple RegionFields, we just directly access the owning - * Operation Region. - */ - Status = AcpiExAccessRegion (ObjDesc, FieldDatumByteOffset, Value, - ReadWrite); - break; - - - case ACPI_TYPE_LOCAL_INDEX_FIELD: - - - /* - * Ensure that the IndexValue is not beyond the capacity of - * the register - */ - if (AcpiExRegisterOverflow (ObjDesc->IndexField.IndexObj, - (ACPI_INTEGER) ObjDesc->IndexField.Value)) - { - return_ACPI_STATUS (AE_AML_REGISTER_LIMIT); - } - - /* Write the index value to the IndexRegister (itself a RegionField) */ - - FieldDatumByteOffset += ObjDesc->IndexField.Value; - - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Write to Index Register: Value %8.8X\n", - FieldDatumByteOffset)); - - Status = AcpiExInsertIntoField (ObjDesc->IndexField.IndexObj, - &FieldDatumByteOffset, - sizeof (FieldDatumByteOffset)); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - if (ReadWrite == ACPI_READ) - { - /* Read the datum from the DataRegister */ - - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Read from Data Register\n")); - - Status = AcpiExExtractFromField (ObjDesc->IndexField.DataObj, - Value, sizeof (ACPI_INTEGER)); - } - else - { - /* Write the datum to the DataRegister */ - - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Write to Data Register: Value %8.8X%8.8X\n", - ACPI_FORMAT_UINT64 (*Value))); - - Status = AcpiExInsertIntoField (ObjDesc->IndexField.DataObj, - Value, sizeof (ACPI_INTEGER)); - } - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Wrong object type in field I/O %X", - ObjDesc->Common.Type)); - Status = AE_AML_INTERNAL; - break; - } - - if (ACPI_SUCCESS (Status)) - { - if (ReadWrite == ACPI_READ) - { - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Value Read %8.8X%8.8X, Width %d\n", - ACPI_FORMAT_UINT64 (*Value), - ObjDesc->CommonField.AccessByteWidth)); - } - else - { - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Value Written %8.8X%8.8X, Width %d\n", - ACPI_FORMAT_UINT64 (*Value), - ObjDesc->CommonField.AccessByteWidth)); - } - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExWriteWithUpdateRule - * - * PARAMETERS: ObjDesc - Field to be written - * Mask - bitmask within field datum - * FieldValue - Value to write - * FieldDatumByteOffset - Offset of datum within field - * - * RETURN: Status - * - * DESCRIPTION: Apply the field update rule to a field write - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExWriteWithUpdateRule ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_INTEGER Mask, - ACPI_INTEGER FieldValue, - UINT32 FieldDatumByteOffset) -{ - ACPI_STATUS Status = AE_OK; - ACPI_INTEGER MergedValue; - ACPI_INTEGER CurrentValue; - - - ACPI_FUNCTION_TRACE_U32 (ExWriteWithUpdateRule, Mask); - - - /* Start with the new bits */ - - MergedValue = FieldValue; - - /* If the mask is all ones, we don't need to worry about the update rule */ - - if (Mask != ACPI_INTEGER_MAX) - { - /* Decode the update rule */ - - switch (ObjDesc->CommonField.FieldFlags & AML_FIELD_UPDATE_RULE_MASK) - { - case AML_FIELD_UPDATE_PRESERVE: - /* - * Check if update rule needs to be applied (not if mask is all - * ones) The left shift drops the bits we want to ignore. - */ - if ((~Mask << (ACPI_MUL_8 (sizeof (Mask)) - - ACPI_MUL_8 (ObjDesc->CommonField.AccessByteWidth))) != 0) - { - /* - * Read the current contents of the byte/word/dword containing - * the field, and merge with the new field value. - */ - Status = AcpiExFieldDatumIo (ObjDesc, FieldDatumByteOffset, - &CurrentValue, ACPI_READ); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - MergedValue |= (CurrentValue & ~Mask); - } - break; - - case AML_FIELD_UPDATE_WRITE_AS_ONES: - - /* Set positions outside the field to all ones */ - - MergedValue |= ~Mask; - break; - - case AML_FIELD_UPDATE_WRITE_AS_ZEROS: - - /* Set positions outside the field to all zeros */ - - MergedValue &= Mask; - break; - - default: - - ACPI_ERROR ((AE_INFO, - "Unknown UpdateRule value: %X", - (ObjDesc->CommonField.FieldFlags & AML_FIELD_UPDATE_RULE_MASK))); - return_ACPI_STATUS (AE_AML_OPERAND_VALUE); - } - } - - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Mask %8.8X%8.8X, DatumOffset %X, Width %X, Value %8.8X%8.8X, MergedValue %8.8X%8.8X\n", - ACPI_FORMAT_UINT64 (Mask), - FieldDatumByteOffset, - ObjDesc->CommonField.AccessByteWidth, - ACPI_FORMAT_UINT64 (FieldValue), - ACPI_FORMAT_UINT64 (MergedValue))); - - /* Write the merged value */ - - Status = AcpiExFieldDatumIo (ObjDesc, FieldDatumByteOffset, - &MergedValue, ACPI_WRITE); - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExExtractFromField - * - * PARAMETERS: ObjDesc - Field to be read - * Buffer - Where to store the field data - * BufferLength - Length of Buffer - * - * RETURN: Status - * - * DESCRIPTION: Retrieve the current value of the given field - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExExtractFromField ( - ACPI_OPERAND_OBJECT *ObjDesc, - void *Buffer, - UINT32 BufferLength) -{ - ACPI_STATUS Status; - ACPI_INTEGER RawDatum; - ACPI_INTEGER MergedDatum; - UINT32 FieldOffset = 0; - UINT32 BufferOffset = 0; - UINT32 BufferTailBits; - UINT32 DatumCount; - UINT32 FieldDatumCount; - UINT32 i; - - - ACPI_FUNCTION_TRACE (ExExtractFromField); - - - /* Validate target buffer and clear it */ - - if (BufferLength < - ACPI_ROUND_BITS_UP_TO_BYTES (ObjDesc->CommonField.BitLength)) - { - ACPI_ERROR ((AE_INFO, - "Field size %X (bits) is too large for buffer (%X)", - ObjDesc->CommonField.BitLength, BufferLength)); - - return_ACPI_STATUS (AE_BUFFER_OVERFLOW); - } - ACPI_MEMSET (Buffer, 0, BufferLength); - - /* Compute the number of datums (access width data items) */ - - DatumCount = ACPI_ROUND_UP_TO ( - ObjDesc->CommonField.BitLength, - ObjDesc->CommonField.AccessBitWidth); - FieldDatumCount = ACPI_ROUND_UP_TO ( - ObjDesc->CommonField.BitLength + - ObjDesc->CommonField.StartFieldBitOffset, - ObjDesc->CommonField.AccessBitWidth); - - /* Priming read from the field */ - - Status = AcpiExFieldDatumIo (ObjDesc, FieldOffset, &RawDatum, ACPI_READ); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - MergedDatum = RawDatum >> ObjDesc->CommonField.StartFieldBitOffset; - - /* Read the rest of the field */ - - for (i = 1; i < FieldDatumCount; i++) - { - /* Get next input datum from the field */ - - FieldOffset += ObjDesc->CommonField.AccessByteWidth; - Status = AcpiExFieldDatumIo (ObjDesc, FieldOffset, - &RawDatum, ACPI_READ); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Merge with previous datum if necessary. - * - * Note: Before the shift, check if the shift value will be larger than - * the integer size. If so, there is no need to perform the operation. - * This avoids the differences in behavior between different compilers - * concerning shift values larger than the target data width. - */ - if ((ObjDesc->CommonField.AccessBitWidth - - ObjDesc->CommonField.StartFieldBitOffset) < ACPI_INTEGER_BIT_SIZE) - { - MergedDatum |= RawDatum << - (ObjDesc->CommonField.AccessBitWidth - - ObjDesc->CommonField.StartFieldBitOffset); - } - - if (i == DatumCount) - { - break; - } - - /* Write merged datum to target buffer */ - - ACPI_MEMCPY (((char *) Buffer) + BufferOffset, &MergedDatum, - ACPI_MIN(ObjDesc->CommonField.AccessByteWidth, - BufferLength - BufferOffset)); - - BufferOffset += ObjDesc->CommonField.AccessByteWidth; - MergedDatum = RawDatum >> ObjDesc->CommonField.StartFieldBitOffset; - } - - /* Mask off any extra bits in the last datum */ - - BufferTailBits = ObjDesc->CommonField.BitLength % - ObjDesc->CommonField.AccessBitWidth; - if (BufferTailBits) - { - MergedDatum &= ACPI_MASK_BITS_ABOVE (BufferTailBits); - } - - /* Write the last datum to the buffer */ - - ACPI_MEMCPY (((char *) Buffer) + BufferOffset, &MergedDatum, - ACPI_MIN(ObjDesc->CommonField.AccessByteWidth, - BufferLength - BufferOffset)); - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExInsertIntoField - * - * PARAMETERS: ObjDesc - Field to be written - * Buffer - Data to be written - * BufferLength - Length of Buffer - * - * RETURN: Status - * - * DESCRIPTION: Store the Buffer contents into the given field - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExInsertIntoField ( - ACPI_OPERAND_OBJECT *ObjDesc, - void *Buffer, - UINT32 BufferLength) -{ - ACPI_STATUS Status; - ACPI_INTEGER Mask; - ACPI_INTEGER WidthMask; - ACPI_INTEGER MergedDatum; - ACPI_INTEGER RawDatum = 0; - UINT32 FieldOffset = 0; - UINT32 BufferOffset = 0; - UINT32 BufferTailBits; - UINT32 DatumCount; - UINT32 FieldDatumCount; - UINT32 i; - UINT32 RequiredLength; - void *NewBuffer; - - - ACPI_FUNCTION_TRACE (ExInsertIntoField); - - - /* Validate input buffer */ - - NewBuffer = NULL; - RequiredLength = ACPI_ROUND_BITS_UP_TO_BYTES ( - ObjDesc->CommonField.BitLength); - /* - * We must have a buffer that is at least as long as the field - * we are writing to. This is because individual fields are - * indivisible and partial writes are not supported -- as per - * the ACPI specification. - */ - if (BufferLength < RequiredLength) - { - /* We need to create a new buffer */ - - NewBuffer = ACPI_ALLOCATE_ZEROED (RequiredLength); - if (!NewBuffer) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* - * Copy the original data to the new buffer, starting - * at Byte zero. All unused (upper) bytes of the - * buffer will be 0. - */ - ACPI_MEMCPY ((char *) NewBuffer, (char *) Buffer, BufferLength); - Buffer = NewBuffer; - BufferLength = RequiredLength; - } - - /* - * Create the bitmasks used for bit insertion. - * Note: This if/else is used to bypass compiler differences with the - * shift operator - */ - if (ObjDesc->CommonField.AccessBitWidth == ACPI_INTEGER_BIT_SIZE) - { - WidthMask = ACPI_INTEGER_MAX; - } - else - { - WidthMask = ACPI_MASK_BITS_ABOVE (ObjDesc->CommonField.AccessBitWidth); - } - - Mask = WidthMask & - ACPI_MASK_BITS_BELOW (ObjDesc->CommonField.StartFieldBitOffset); - - /* Compute the number of datums (access width data items) */ - - DatumCount = ACPI_ROUND_UP_TO (ObjDesc->CommonField.BitLength, - ObjDesc->CommonField.AccessBitWidth); - - FieldDatumCount = ACPI_ROUND_UP_TO (ObjDesc->CommonField.BitLength + - ObjDesc->CommonField.StartFieldBitOffset, - ObjDesc->CommonField.AccessBitWidth); - - /* Get initial Datum from the input buffer */ - - ACPI_MEMCPY (&RawDatum, Buffer, - ACPI_MIN(ObjDesc->CommonField.AccessByteWidth, - BufferLength - BufferOffset)); - - MergedDatum = RawDatum << ObjDesc->CommonField.StartFieldBitOffset; - - /* Write the entire field */ - - for (i = 1; i < FieldDatumCount; i++) - { - /* Write merged datum to the target field */ - - MergedDatum &= Mask; - Status = AcpiExWriteWithUpdateRule (ObjDesc, Mask, - MergedDatum, FieldOffset); - if (ACPI_FAILURE (Status)) - { - goto Exit; - } - - FieldOffset += ObjDesc->CommonField.AccessByteWidth; - - /* - * Start new output datum by merging with previous input datum - * if necessary. - * - * Note: Before the shift, check if the shift value will be larger than - * the integer size. If so, there is no need to perform the operation. - * This avoids the differences in behavior between different compilers - * concerning shift values larger than the target data width. - */ - if ((ObjDesc->CommonField.AccessBitWidth - - ObjDesc->CommonField.StartFieldBitOffset) < ACPI_INTEGER_BIT_SIZE) - { - MergedDatum = RawDatum >> - (ObjDesc->CommonField.AccessBitWidth - - ObjDesc->CommonField.StartFieldBitOffset); - } - else - { - MergedDatum = 0; - } - - Mask = WidthMask; - - if (i == DatumCount) - { - break; - } - - /* Get the next input datum from the buffer */ - - BufferOffset += ObjDesc->CommonField.AccessByteWidth; - ACPI_MEMCPY (&RawDatum, ((char *) Buffer) + BufferOffset, - ACPI_MIN(ObjDesc->CommonField.AccessByteWidth, - BufferLength - BufferOffset)); - MergedDatum |= RawDatum << ObjDesc->CommonField.StartFieldBitOffset; - } - - /* Mask off any extra bits in the last datum */ - - BufferTailBits = (ObjDesc->CommonField.BitLength + - ObjDesc->CommonField.StartFieldBitOffset) % - ObjDesc->CommonField.AccessBitWidth; - if (BufferTailBits) - { - Mask &= ACPI_MASK_BITS_ABOVE (BufferTailBits); - } - - /* Write the last datum to the field */ - - MergedDatum &= Mask; - Status = AcpiExWriteWithUpdateRule (ObjDesc, - Mask, MergedDatum, FieldOffset); - -Exit: - /* Free temporary buffer if we used one */ - - if (NewBuffer) - { - ACPI_FREE (NewBuffer); - } - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exmisc.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exmisc.c deleted file mode 100644 index 41e4a9752..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exmisc.c +++ /dev/null @@ -1,873 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exmisc - ACPI AML (p-code) execution - specific opcodes - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXMISC_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" -#include "amlcode.h" -#include "amlresrc.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exmisc") - - -/******************************************************************************* - * - * FUNCTION: AcpiExGetObjectReference - * - * PARAMETERS: ObjDesc - Create a reference to this object - * ReturnDesc - Where to store the reference - * WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Obtain and return a "reference" to the target object - * Common code for the RefOfOp and the CondRefOfOp. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExGetObjectReference ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_OPERAND_OBJECT **ReturnDesc, - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT *ReferenceObj; - ACPI_OPERAND_OBJECT *ReferencedObj; - - - ACPI_FUNCTION_TRACE_PTR (ExGetObjectReference, ObjDesc); - - - *ReturnDesc = NULL; - - switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc)) - { - case ACPI_DESC_TYPE_OPERAND: - - if (ObjDesc->Common.Type != ACPI_TYPE_LOCAL_REFERENCE) - { - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - /* - * Must be a reference to a Local or Arg - */ - switch (ObjDesc->Reference.Class) - { - case ACPI_REFCLASS_LOCAL: - case ACPI_REFCLASS_ARG: - case ACPI_REFCLASS_DEBUG: - - /* The referenced object is the pseudo-node for the local/arg */ - - ReferencedObj = ObjDesc->Reference.Object; - break; - - default: - - ACPI_ERROR ((AE_INFO, "Unknown Reference Class %2.2X", - ObjDesc->Reference.Class)); - return_ACPI_STATUS (AE_AML_INTERNAL); - } - break; - - - case ACPI_DESC_TYPE_NAMED: - - /* - * A named reference that has already been resolved to a Node - */ - ReferencedObj = ObjDesc; - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Invalid descriptor type %X", - ACPI_GET_DESCRIPTOR_TYPE (ObjDesc))); - return_ACPI_STATUS (AE_TYPE); - } - - - /* Create a new reference object */ - - ReferenceObj = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_REFERENCE); - if (!ReferenceObj) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - ReferenceObj->Reference.Class = ACPI_REFCLASS_REFOF; - ReferenceObj->Reference.Object = ReferencedObj; - *ReturnDesc = ReferenceObj; - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Object %p Type [%s], returning Reference %p\n", - ObjDesc, AcpiUtGetObjectTypeName (ObjDesc), *ReturnDesc)); - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExConcatTemplate - * - * PARAMETERS: Operand0 - First source object - * Operand1 - Second source object - * ActualReturnDesc - Where to place the return object - * WalkState - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Concatenate two resource templates - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExConcatTemplate ( - ACPI_OPERAND_OBJECT *Operand0, - ACPI_OPERAND_OBJECT *Operand1, - ACPI_OPERAND_OBJECT **ActualReturnDesc, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *ReturnDesc; - UINT8 *NewBuf; - UINT8 *EndTag; - ACPI_SIZE Length0; - ACPI_SIZE Length1; - ACPI_SIZE NewLength; - - - ACPI_FUNCTION_TRACE (ExConcatTemplate); - - - /* - * Find the EndTag descriptor in each resource template. - * Note1: returned pointers point TO the EndTag, not past it. - * Note2: zero-length buffers are allowed; treated like one EndTag - */ - - /* Get the length of the first resource template */ - - Status = AcpiUtGetResourceEndTag (Operand0, &EndTag); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Length0 = ACPI_PTR_DIFF (EndTag, Operand0->Buffer.Pointer); - - /* Get the length of the second resource template */ - - Status = AcpiUtGetResourceEndTag (Operand1, &EndTag); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Length1 = ACPI_PTR_DIFF (EndTag, Operand1->Buffer.Pointer); - - /* Combine both lengths, minimum size will be 2 for EndTag */ - - NewLength = Length0 + Length1 + sizeof (AML_RESOURCE_END_TAG); - - /* Create a new buffer object for the result (with one EndTag) */ - - ReturnDesc = AcpiUtCreateBufferObject (NewLength); - if (!ReturnDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* - * Copy the templates to the new buffer, 0 first, then 1 follows. One - * EndTag descriptor is copied from Operand1. - */ - NewBuf = ReturnDesc->Buffer.Pointer; - ACPI_MEMCPY (NewBuf, Operand0->Buffer.Pointer, Length0); - ACPI_MEMCPY (NewBuf + Length0, Operand1->Buffer.Pointer, Length1); - - /* Insert EndTag and set the checksum to zero, means "ignore checksum" */ - - NewBuf[NewLength - 1] = 0; - NewBuf[NewLength - 2] = ACPI_RESOURCE_NAME_END_TAG | 1; - - /* Return the completed resource template */ - - *ActualReturnDesc = ReturnDesc; - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExDoConcatenate - * - * PARAMETERS: Operand0 - First source object - * Operand1 - Second source object - * ActualReturnDesc - Where to place the return object - * WalkState - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Concatenate two objects OF THE SAME TYPE. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExDoConcatenate ( - ACPI_OPERAND_OBJECT *Operand0, - ACPI_OPERAND_OBJECT *Operand1, - ACPI_OPERAND_OBJECT **ActualReturnDesc, - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT *LocalOperand1 = Operand1; - ACPI_OPERAND_OBJECT *ReturnDesc; - char *NewBuf; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (ExDoConcatenate); - - - /* - * Convert the second operand if necessary. The first operand - * determines the type of the second operand, (See the Data Types - * section of the ACPI specification.) Both object types are - * guaranteed to be either Integer/String/Buffer by the operand - * resolution mechanism. - */ - switch (Operand0->Common.Type) - { - case ACPI_TYPE_INTEGER: - Status = AcpiExConvertToInteger (Operand1, &LocalOperand1, 16); - break; - - case ACPI_TYPE_STRING: - Status = AcpiExConvertToString (Operand1, &LocalOperand1, - ACPI_IMPLICIT_CONVERT_HEX); - break; - - case ACPI_TYPE_BUFFER: - Status = AcpiExConvertToBuffer (Operand1, &LocalOperand1); - break; - - default: - ACPI_ERROR ((AE_INFO, "Invalid object type: %X", - Operand0->Common.Type)); - Status = AE_AML_INTERNAL; - } - - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - /* - * Both operands are now known to be the same object type - * (Both are Integer, String, or Buffer), and we can now perform the - * concatenation. - */ - - /* - * There are three cases to handle: - * - * 1) Two Integers concatenated to produce a new Buffer - * 2) Two Strings concatenated to produce a new String - * 3) Two Buffers concatenated to produce a new Buffer - */ - switch (Operand0->Common.Type) - { - case ACPI_TYPE_INTEGER: - - /* Result of two Integers is a Buffer */ - /* Need enough buffer space for two integers */ - - ReturnDesc = AcpiUtCreateBufferObject ((ACPI_SIZE) - ACPI_MUL_2 (AcpiGbl_IntegerByteWidth)); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - NewBuf = (char *) ReturnDesc->Buffer.Pointer; - - /* Copy the first integer, LSB first */ - - ACPI_MEMCPY (NewBuf, &Operand0->Integer.Value, - AcpiGbl_IntegerByteWidth); - - /* Copy the second integer (LSB first) after the first */ - - ACPI_MEMCPY (NewBuf + AcpiGbl_IntegerByteWidth, - &LocalOperand1->Integer.Value, - AcpiGbl_IntegerByteWidth); - break; - - case ACPI_TYPE_STRING: - - /* Result of two Strings is a String */ - - ReturnDesc = AcpiUtCreateStringObject ( - ((ACPI_SIZE) Operand0->String.Length + - LocalOperand1->String.Length)); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - NewBuf = ReturnDesc->String.Pointer; - - /* Concatenate the strings */ - - ACPI_STRCPY (NewBuf, Operand0->String.Pointer); - ACPI_STRCPY (NewBuf + Operand0->String.Length, - LocalOperand1->String.Pointer); - break; - - case ACPI_TYPE_BUFFER: - - /* Result of two Buffers is a Buffer */ - - ReturnDesc = AcpiUtCreateBufferObject ( - ((ACPI_SIZE) Operand0->Buffer.Length + - LocalOperand1->Buffer.Length)); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - NewBuf = (char *) ReturnDesc->Buffer.Pointer; - - /* Concatenate the buffers */ - - ACPI_MEMCPY (NewBuf, Operand0->Buffer.Pointer, - Operand0->Buffer.Length); - ACPI_MEMCPY (NewBuf + Operand0->Buffer.Length, - LocalOperand1->Buffer.Pointer, - LocalOperand1->Buffer.Length); - break; - - default: - - /* Invalid object type, should not happen here */ - - ACPI_ERROR ((AE_INFO, "Invalid object type: %X", - Operand0->Common.Type)); - Status =AE_AML_INTERNAL; - goto Cleanup; - } - - *ActualReturnDesc = ReturnDesc; - -Cleanup: - if (LocalOperand1 != Operand1) - { - AcpiUtRemoveReference (LocalOperand1); - } - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExDoMathOp - * - * PARAMETERS: Opcode - AML opcode - * Integer0 - Integer operand #0 - * Integer1 - Integer operand #1 - * - * RETURN: Integer result of the operation - * - * DESCRIPTION: Execute a math AML opcode. The purpose of having all of the - * math functions here is to prevent a lot of pointer dereferencing - * to obtain the operands. - * - ******************************************************************************/ - -ACPI_INTEGER -AcpiExDoMathOp ( - UINT16 Opcode, - ACPI_INTEGER Integer0, - ACPI_INTEGER Integer1) -{ - - ACPI_FUNCTION_ENTRY (); - - - switch (Opcode) - { - case AML_ADD_OP: /* Add (Integer0, Integer1, Result) */ - - return (Integer0 + Integer1); - - - case AML_BIT_AND_OP: /* And (Integer0, Integer1, Result) */ - - return (Integer0 & Integer1); - - - case AML_BIT_NAND_OP: /* NAnd (Integer0, Integer1, Result) */ - - return (~(Integer0 & Integer1)); - - - case AML_BIT_OR_OP: /* Or (Integer0, Integer1, Result) */ - - return (Integer0 | Integer1); - - - case AML_BIT_NOR_OP: /* NOr (Integer0, Integer1, Result) */ - - return (~(Integer0 | Integer1)); - - - case AML_BIT_XOR_OP: /* XOr (Integer0, Integer1, Result) */ - - return (Integer0 ^ Integer1); - - - case AML_MULTIPLY_OP: /* Multiply (Integer0, Integer1, Result) */ - - return (Integer0 * Integer1); - - - case AML_SHIFT_LEFT_OP: /* ShiftLeft (Operand, ShiftCount, Result)*/ - - /* - * We need to check if the shiftcount is larger than the integer bit - * width since the behavior of this is not well-defined in the C language. - */ - if (Integer1 >= AcpiGbl_IntegerBitWidth) - { - return (0); - } - return (Integer0 << Integer1); - - - case AML_SHIFT_RIGHT_OP: /* ShiftRight (Operand, ShiftCount, Result) */ - - /* - * We need to check if the shiftcount is larger than the integer bit - * width since the behavior of this is not well-defined in the C language. - */ - if (Integer1 >= AcpiGbl_IntegerBitWidth) - { - return (0); - } - return (Integer0 >> Integer1); - - - case AML_SUBTRACT_OP: /* Subtract (Integer0, Integer1, Result) */ - - return (Integer0 - Integer1); - - default: - - return (0); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExDoLogicalNumericOp - * - * PARAMETERS: Opcode - AML opcode - * Integer0 - Integer operand #0 - * Integer1 - Integer operand #1 - * LogicalResult - TRUE/FALSE result of the operation - * - * RETURN: Status - * - * DESCRIPTION: Execute a logical "Numeric" AML opcode. For these Numeric - * operators (LAnd and LOr), both operands must be integers. - * - * Note: cleanest machine code seems to be produced by the code - * below, rather than using statements of the form: - * Result = (Integer0 && Integer1); - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExDoLogicalNumericOp ( - UINT16 Opcode, - ACPI_INTEGER Integer0, - ACPI_INTEGER Integer1, - BOOLEAN *LogicalResult) -{ - ACPI_STATUS Status = AE_OK; - BOOLEAN LocalResult = FALSE; - - - ACPI_FUNCTION_TRACE (ExDoLogicalNumericOp); - - - switch (Opcode) - { - case AML_LAND_OP: /* LAnd (Integer0, Integer1) */ - - if (Integer0 && Integer1) - { - LocalResult = TRUE; - } - break; - - case AML_LOR_OP: /* LOr (Integer0, Integer1) */ - - if (Integer0 || Integer1) - { - LocalResult = TRUE; - } - break; - - default: - Status = AE_AML_INTERNAL; - break; - } - - /* Return the logical result and status */ - - *LogicalResult = LocalResult; - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExDoLogicalOp - * - * PARAMETERS: Opcode - AML opcode - * Operand0 - operand #0 - * Operand1 - operand #1 - * LogicalResult - TRUE/FALSE result of the operation - * - * RETURN: Status - * - * DESCRIPTION: Execute a logical AML opcode. The purpose of having all of the - * functions here is to prevent a lot of pointer dereferencing - * to obtain the operands and to simplify the generation of the - * logical value. For the Numeric operators (LAnd and LOr), both - * operands must be integers. For the other logical operators, - * operands can be any combination of Integer/String/Buffer. The - * first operand determines the type to which the second operand - * will be converted. - * - * Note: cleanest machine code seems to be produced by the code - * below, rather than using statements of the form: - * Result = (Operand0 == Operand1); - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExDoLogicalOp ( - UINT16 Opcode, - ACPI_OPERAND_OBJECT *Operand0, - ACPI_OPERAND_OBJECT *Operand1, - BOOLEAN *LogicalResult) -{ - ACPI_OPERAND_OBJECT *LocalOperand1 = Operand1; - ACPI_INTEGER Integer0; - ACPI_INTEGER Integer1; - UINT32 Length0; - UINT32 Length1; - ACPI_STATUS Status = AE_OK; - BOOLEAN LocalResult = FALSE; - int Compare; - - - ACPI_FUNCTION_TRACE (ExDoLogicalOp); - - - /* - * Convert the second operand if necessary. The first operand - * determines the type of the second operand, (See the Data Types - * section of the ACPI 3.0+ specification.) Both object types are - * guaranteed to be either Integer/String/Buffer by the operand - * resolution mechanism. - */ - switch (Operand0->Common.Type) - { - case ACPI_TYPE_INTEGER: - Status = AcpiExConvertToInteger (Operand1, &LocalOperand1, 16); - break; - - case ACPI_TYPE_STRING: - Status = AcpiExConvertToString (Operand1, &LocalOperand1, - ACPI_IMPLICIT_CONVERT_HEX); - break; - - case ACPI_TYPE_BUFFER: - Status = AcpiExConvertToBuffer (Operand1, &LocalOperand1); - break; - - default: - Status = AE_AML_INTERNAL; - break; - } - - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - /* - * Two cases: 1) Both Integers, 2) Both Strings or Buffers - */ - if (Operand0->Common.Type == ACPI_TYPE_INTEGER) - { - /* - * 1) Both operands are of type integer - * Note: LocalOperand1 may have changed above - */ - Integer0 = Operand0->Integer.Value; - Integer1 = LocalOperand1->Integer.Value; - - switch (Opcode) - { - case AML_LEQUAL_OP: /* LEqual (Operand0, Operand1) */ - - if (Integer0 == Integer1) - { - LocalResult = TRUE; - } - break; - - case AML_LGREATER_OP: /* LGreater (Operand0, Operand1) */ - - if (Integer0 > Integer1) - { - LocalResult = TRUE; - } - break; - - case AML_LLESS_OP: /* LLess (Operand0, Operand1) */ - - if (Integer0 < Integer1) - { - LocalResult = TRUE; - } - break; - - default: - Status = AE_AML_INTERNAL; - break; - } - } - else - { - /* - * 2) Both operands are Strings or both are Buffers - * Note: Code below takes advantage of common Buffer/String - * object fields. LocalOperand1 may have changed above. Use - * memcmp to handle nulls in buffers. - */ - Length0 = Operand0->Buffer.Length; - Length1 = LocalOperand1->Buffer.Length; - - /* Lexicographic compare: compare the data bytes */ - - Compare = ACPI_MEMCMP (Operand0->Buffer.Pointer, - LocalOperand1->Buffer.Pointer, - (Length0 > Length1) ? Length1 : Length0); - - switch (Opcode) - { - case AML_LEQUAL_OP: /* LEqual (Operand0, Operand1) */ - - /* Length and all bytes must be equal */ - - if ((Length0 == Length1) && - (Compare == 0)) - { - /* Length and all bytes match ==> TRUE */ - - LocalResult = TRUE; - } - break; - - case AML_LGREATER_OP: /* LGreater (Operand0, Operand1) */ - - if (Compare > 0) - { - LocalResult = TRUE; - goto Cleanup; /* TRUE */ - } - if (Compare < 0) - { - goto Cleanup; /* FALSE */ - } - - /* Bytes match (to shortest length), compare lengths */ - - if (Length0 > Length1) - { - LocalResult = TRUE; - } - break; - - case AML_LLESS_OP: /* LLess (Operand0, Operand1) */ - - if (Compare > 0) - { - goto Cleanup; /* FALSE */ - } - if (Compare < 0) - { - LocalResult = TRUE; - goto Cleanup; /* TRUE */ - } - - /* Bytes match (to shortest length), compare lengths */ - - if (Length0 < Length1) - { - LocalResult = TRUE; - } - break; - - default: - Status = AE_AML_INTERNAL; - break; - } - } - -Cleanup: - - /* New object was created if implicit conversion performed - delete */ - - if (LocalOperand1 != Operand1) - { - AcpiUtRemoveReference (LocalOperand1); - } - - /* Return the logical result and status */ - - *LogicalResult = LocalResult; - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exmutex.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exmutex.c deleted file mode 100644 index 8b1bebf1e..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exmutex.c +++ /dev/null @@ -1,621 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exmutex - ASL Mutex Acquire/Release functions - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXMUTEX_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" -#include "acevents.h" - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exmutex") - -/* Local prototypes */ - -static void -AcpiExLinkMutex ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_THREAD_STATE *Thread); - - -/******************************************************************************* - * - * FUNCTION: AcpiExUnlinkMutex - * - * PARAMETERS: ObjDesc - The mutex to be unlinked - * - * RETURN: None - * - * DESCRIPTION: Remove a mutex from the "AcquiredMutex" list - * - ******************************************************************************/ - -void -AcpiExUnlinkMutex ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_THREAD_STATE *Thread = ObjDesc->Mutex.OwnerThread; - - - if (!Thread) - { - return; - } - - /* Doubly linked list */ - - if (ObjDesc->Mutex.Next) - { - (ObjDesc->Mutex.Next)->Mutex.Prev = ObjDesc->Mutex.Prev; - } - - if (ObjDesc->Mutex.Prev) - { - (ObjDesc->Mutex.Prev)->Mutex.Next = ObjDesc->Mutex.Next; - - /* - * Migrate the previous sync level associated with this mutex to the - * previous mutex on the list so that it may be preserved. This handles - * the case where several mutexes have been acquired at the same level, - * but are not released in opposite order. - */ - (ObjDesc->Mutex.Prev)->Mutex.OriginalSyncLevel = - ObjDesc->Mutex.OriginalSyncLevel; - } - else - { - Thread->AcquiredMutexList = ObjDesc->Mutex.Next; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExLinkMutex - * - * PARAMETERS: ObjDesc - The mutex to be linked - * Thread - Current executing thread object - * - * RETURN: None - * - * DESCRIPTION: Add a mutex to the "AcquiredMutex" list for this walk - * - ******************************************************************************/ - -static void -AcpiExLinkMutex ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_THREAD_STATE *Thread) -{ - ACPI_OPERAND_OBJECT *ListHead; - - - ListHead = Thread->AcquiredMutexList; - - /* This object will be the first object in the list */ - - ObjDesc->Mutex.Prev = NULL; - ObjDesc->Mutex.Next = ListHead; - - /* Update old first object to point back to this object */ - - if (ListHead) - { - ListHead->Mutex.Prev = ObjDesc; - } - - /* Update list head */ - - Thread->AcquiredMutexList = ObjDesc; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExAcquireMutexObject - * - * PARAMETERS: TimeDesc - Timeout in milliseconds - * ObjDesc - Mutex object - * Thread - Current thread state - * - * RETURN: Status - * - * DESCRIPTION: Acquire an AML mutex, low-level interface. Provides a common - * path that supports multiple acquires by the same thread. - * - * MUTEX: Interpreter must be locked - * - * NOTE: This interface is called from three places: - * 1) From AcpiExAcquireMutex, via an AML Acquire() operator - * 2) From AcpiExAcquireGlobalLock when an AML Field access requires the - * global lock - * 3) From the external interface, AcpiAcquireGlobalLock - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExAcquireMutexObject ( - UINT16 Timeout, - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_THREAD_ID ThreadId) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_PTR (ExAcquireMutexObject, ObjDesc); - - - if (!ObjDesc) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Support for multiple acquires by the owning thread */ - - if (ObjDesc->Mutex.ThreadId == ThreadId) - { - /* - * The mutex is already owned by this thread, just increment the - * acquisition depth - */ - ObjDesc->Mutex.AcquisitionDepth++; - return_ACPI_STATUS (AE_OK); - } - - /* Acquire the mutex, wait if necessary. Special case for Global Lock */ - - if (ObjDesc == AcpiGbl_GlobalLockMutex) - { - Status = AcpiEvAcquireGlobalLock (Timeout); - } - else - { - Status = AcpiExSystemWaitMutex (ObjDesc->Mutex.OsMutex, - Timeout); - } - - if (ACPI_FAILURE (Status)) - { - /* Includes failure from a timeout on TimeDesc */ - - return_ACPI_STATUS (Status); - } - - /* Acquired the mutex: update mutex object */ - - ObjDesc->Mutex.ThreadId = ThreadId; - ObjDesc->Mutex.AcquisitionDepth = 1; - ObjDesc->Mutex.OriginalSyncLevel = 0; - ObjDesc->Mutex.OwnerThread = NULL; /* Used only for AML Acquire() */ - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExAcquireMutex - * - * PARAMETERS: TimeDesc - Timeout integer - * ObjDesc - Mutex object - * WalkState - Current method execution state - * - * RETURN: Status - * - * DESCRIPTION: Acquire an AML mutex - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExAcquireMutex ( - ACPI_OPERAND_OBJECT *TimeDesc, - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_PTR (ExAcquireMutex, ObjDesc); - - - if (!ObjDesc) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Must have a valid thread ID */ - - if (!WalkState->Thread) - { - ACPI_ERROR ((AE_INFO, "Cannot acquire Mutex [%4.4s], null thread info", - AcpiUtGetNodeName (ObjDesc->Mutex.Node))); - return_ACPI_STATUS (AE_AML_INTERNAL); - } - - /* - * Current sync level must be less than or equal to the sync level of the - * mutex. This mechanism provides some deadlock prevention - */ - if (WalkState->Thread->CurrentSyncLevel > ObjDesc->Mutex.SyncLevel) - { - ACPI_ERROR ((AE_INFO, - "Cannot acquire Mutex [%4.4s], current SyncLevel is too large (%d)", - AcpiUtGetNodeName (ObjDesc->Mutex.Node), - WalkState->Thread->CurrentSyncLevel)); - return_ACPI_STATUS (AE_AML_MUTEX_ORDER); - } - - Status = AcpiExAcquireMutexObject ((UINT16) TimeDesc->Integer.Value, - ObjDesc, WalkState->Thread->ThreadId); - if (ACPI_SUCCESS (Status) && ObjDesc->Mutex.AcquisitionDepth == 1) - { - /* Save Thread object, original/current sync levels */ - - ObjDesc->Mutex.OwnerThread = WalkState->Thread; - ObjDesc->Mutex.OriginalSyncLevel = WalkState->Thread->CurrentSyncLevel; - WalkState->Thread->CurrentSyncLevel = ObjDesc->Mutex.SyncLevel; - - /* Link the mutex to the current thread for force-unlock at method exit */ - - AcpiExLinkMutex (ObjDesc, WalkState->Thread); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExReleaseMutexObject - * - * PARAMETERS: ObjDesc - The object descriptor for this op - * - * RETURN: Status - * - * DESCRIPTION: Release a previously acquired Mutex, low level interface. - * Provides a common path that supports multiple releases (after - * previous multiple acquires) by the same thread. - * - * MUTEX: Interpreter must be locked - * - * NOTE: This interface is called from three places: - * 1) From AcpiExReleaseMutex, via an AML Acquire() operator - * 2) From AcpiExReleaseGlobalLock when an AML Field access requires the - * global lock - * 3) From the external interface, AcpiReleaseGlobalLock - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExReleaseMutexObject ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (ExReleaseMutexObject); - - - if (ObjDesc->Mutex.AcquisitionDepth == 0) - { - return (AE_NOT_ACQUIRED); - } - - /* Match multiple Acquires with multiple Releases */ - - ObjDesc->Mutex.AcquisitionDepth--; - if (ObjDesc->Mutex.AcquisitionDepth != 0) - { - /* Just decrement the depth and return */ - - return_ACPI_STATUS (AE_OK); - } - - if (ObjDesc->Mutex.OwnerThread) - { - /* Unlink the mutex from the owner's list */ - - AcpiExUnlinkMutex (ObjDesc); - ObjDesc->Mutex.OwnerThread = NULL; - } - - /* Release the mutex, special case for Global Lock */ - - if (ObjDesc == AcpiGbl_GlobalLockMutex) - { - Status = AcpiEvReleaseGlobalLock (); - } - else - { - AcpiOsReleaseMutex (ObjDesc->Mutex.OsMutex); - } - - /* Clear mutex info */ - - ObjDesc->Mutex.ThreadId = 0; - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExReleaseMutex - * - * PARAMETERS: ObjDesc - The object descriptor for this op - * WalkState - Current method execution state - * - * RETURN: Status - * - * DESCRIPTION: Release a previously acquired Mutex. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExReleaseMutex ( - ACPI_OPERAND_OBJECT *ObjDesc, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status = AE_OK; - UINT8 PreviousSyncLevel; - - - ACPI_FUNCTION_TRACE (ExReleaseMutex); - - - if (!ObjDesc) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* The mutex must have been previously acquired in order to release it */ - - if (!ObjDesc->Mutex.OwnerThread) - { - ACPI_ERROR ((AE_INFO, "Cannot release Mutex [%4.4s], not acquired", - AcpiUtGetNodeName (ObjDesc->Mutex.Node))); - return_ACPI_STATUS (AE_AML_MUTEX_NOT_ACQUIRED); - } - - /* Must have a valid thread ID */ - - if (!WalkState->Thread) - { - ACPI_ERROR ((AE_INFO, "Cannot release Mutex [%4.4s], null thread info", - AcpiUtGetNodeName (ObjDesc->Mutex.Node))); - return_ACPI_STATUS (AE_AML_INTERNAL); - } - - /* - * The Mutex is owned, but this thread must be the owner. - * Special case for Global Lock, any thread can release - */ - if ((ObjDesc->Mutex.OwnerThread->ThreadId != WalkState->Thread->ThreadId) && - (ObjDesc != AcpiGbl_GlobalLockMutex)) - { - ACPI_ERROR ((AE_INFO, - "Thread %p cannot release Mutex [%4.4s] acquired by thread %p", - ACPI_CAST_PTR (void, WalkState->Thread->ThreadId), - AcpiUtGetNodeName (ObjDesc->Mutex.Node), - ACPI_CAST_PTR (void, ObjDesc->Mutex.OwnerThread->ThreadId))); - return_ACPI_STATUS (AE_AML_NOT_OWNER); - } - - /* - * The sync level of the mutex must be equal to the current sync level. In - * other words, the current level means that at least one mutex at that - * level is currently being held. Attempting to release a mutex of a - * different level can only mean that the mutex ordering rule is being - * violated. This behavior is clarified in ACPI 4.0 specification. - */ - if (ObjDesc->Mutex.SyncLevel != WalkState->Thread->CurrentSyncLevel) - { - ACPI_ERROR ((AE_INFO, - "Cannot release Mutex [%4.4s], SyncLevel mismatch: mutex %d current %d", - AcpiUtGetNodeName (ObjDesc->Mutex.Node), - ObjDesc->Mutex.SyncLevel, WalkState->Thread->CurrentSyncLevel)); - return_ACPI_STATUS (AE_AML_MUTEX_ORDER); - } - - /* - * Get the previous SyncLevel from the head of the acquired mutex list. - * This handles the case where several mutexes at the same level have been - * acquired, but are not released in reverse order. - */ - PreviousSyncLevel = - WalkState->Thread->AcquiredMutexList->Mutex.OriginalSyncLevel; - - Status = AcpiExReleaseMutexObject (ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - if (ObjDesc->Mutex.AcquisitionDepth == 0) - { - /* Restore the previous SyncLevel */ - - WalkState->Thread->CurrentSyncLevel = PreviousSyncLevel; - } - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExReleaseAllMutexes - * - * PARAMETERS: Thread - Current executing thread object - * - * RETURN: Status - * - * DESCRIPTION: Release all mutexes held by this thread - * - * NOTE: This function is called as the thread is exiting the interpreter. - * Mutexes are not released when an individual control method is exited, but - * only when the parent thread actually exits the interpreter. This allows one - * method to acquire a mutex, and a different method to release it, as long as - * this is performed underneath a single parent control method. - * - ******************************************************************************/ - -void -AcpiExReleaseAllMutexes ( - ACPI_THREAD_STATE *Thread) -{ - ACPI_OPERAND_OBJECT *Next = Thread->AcquiredMutexList; - ACPI_OPERAND_OBJECT *ObjDesc; - - - ACPI_FUNCTION_ENTRY (); - - - /* Traverse the list of owned mutexes, releasing each one */ - - while (Next) - { - ObjDesc = Next; - Next = ObjDesc->Mutex.Next; - - ObjDesc->Mutex.Prev = NULL; - ObjDesc->Mutex.Next = NULL; - ObjDesc->Mutex.AcquisitionDepth = 0; - - /* Release the mutex, special case for Global Lock */ - - if (ObjDesc == AcpiGbl_GlobalLockMutex) - { - /* Ignore errors */ - - (void) AcpiEvReleaseGlobalLock (); - } - else - { - AcpiOsReleaseMutex (ObjDesc->Mutex.OsMutex); - } - - /* Mark mutex unowned */ - - ObjDesc->Mutex.OwnerThread = NULL; - ObjDesc->Mutex.ThreadId = 0; - - /* Update Thread SyncLevel (Last mutex is the important one) */ - - Thread->CurrentSyncLevel = ObjDesc->Mutex.OriginalSyncLevel; - } -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exnames.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exnames.c deleted file mode 100644 index 89fa2d487..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exnames.c +++ /dev/null @@ -1,560 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exnames - interpreter/scanner name load/execute - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXNAMES_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" -#include "amlcode.h" - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exnames") - -/* Local prototypes */ - -static char * -AcpiExAllocateNameString ( - UINT32 PrefixCount, - UINT32 NumNameSegs); - -static ACPI_STATUS -AcpiExNameSegment ( - UINT8 **InAmlAddress, - char *NameString); - - -/******************************************************************************* - * - * FUNCTION: AcpiExAllocateNameString - * - * PARAMETERS: PrefixCount - Count of parent levels. Special cases: - * (-1)==root, 0==none - * NumNameSegs - count of 4-character name segments - * - * RETURN: A pointer to the allocated string segment. This segment must - * be deleted by the caller. - * - * DESCRIPTION: Allocate a buffer for a name string. Ensure allocated name - * string is long enough, and set up prefix if any. - * - ******************************************************************************/ - -static char * -AcpiExAllocateNameString ( - UINT32 PrefixCount, - UINT32 NumNameSegs) -{ - char *TempPtr; - char *NameString; - UINT32 SizeNeeded; - - ACPI_FUNCTION_TRACE (ExAllocateNameString); - - - /* - * Allow room for all \ and ^ prefixes, all segments and a MultiNamePrefix. - * Also, one byte for the null terminator. - * This may actually be somewhat longer than needed. - */ - if (PrefixCount == ACPI_UINT32_MAX) - { - /* Special case for root */ - - SizeNeeded = 1 + (ACPI_NAME_SIZE * NumNameSegs) + 2 + 1; - } - else - { - SizeNeeded = PrefixCount + (ACPI_NAME_SIZE * NumNameSegs) + 2 + 1; - } - - /* - * Allocate a buffer for the name. - * This buffer must be deleted by the caller! - */ - NameString = ACPI_ALLOCATE (SizeNeeded); - if (!NameString) - { - ACPI_ERROR ((AE_INFO, - "Could not allocate size %d", SizeNeeded)); - return_PTR (NULL); - } - - TempPtr = NameString; - - /* Set up Root or Parent prefixes if needed */ - - if (PrefixCount == ACPI_UINT32_MAX) - { - *TempPtr++ = AML_ROOT_PREFIX; - } - else - { - while (PrefixCount--) - { - *TempPtr++ = AML_PARENT_PREFIX; - } - } - - - /* Set up Dual or Multi prefixes if needed */ - - if (NumNameSegs > 2) - { - /* Set up multi prefixes */ - - *TempPtr++ = AML_MULTI_NAME_PREFIX_OP; - *TempPtr++ = (char) NumNameSegs; - } - else if (2 == NumNameSegs) - { - /* Set up dual prefixes */ - - *TempPtr++ = AML_DUAL_NAME_PREFIX; - } - - /* - * Terminate string following prefixes. AcpiExNameSegment() will - * append the segment(s) - */ - *TempPtr = 0; - - return_PTR (NameString); -} - -/******************************************************************************* - * - * FUNCTION: AcpiExNameSegment - * - * PARAMETERS: InAmlAddress - Pointer to the name in the AML code - * NameString - Where to return the name. The name is appended - * to any existing string to form a namepath - * - * RETURN: Status - * - * DESCRIPTION: Extract an ACPI name (4 bytes) from the AML byte stream - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiExNameSegment ( - UINT8 **InAmlAddress, - char *NameString) -{ - char *AmlAddress = (void *) *InAmlAddress; - ACPI_STATUS Status = AE_OK; - UINT32 Index; - char CharBuf[5]; - - - ACPI_FUNCTION_TRACE (ExNameSegment); - - - /* - * If first character is a digit, then we know that we aren't looking at a - * valid name segment - */ - CharBuf[0] = *AmlAddress; - - if ('0' <= CharBuf[0] && CharBuf[0] <= '9') - { - ACPI_ERROR ((AE_INFO, "Invalid leading digit: %c", CharBuf[0])); - return_ACPI_STATUS (AE_CTRL_PENDING); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "Bytes from stream:\n")); - - for (Index = 0; - (Index < ACPI_NAME_SIZE) && (AcpiUtValidAcpiChar (*AmlAddress, 0)); - Index++) - { - CharBuf[Index] = *AmlAddress++; - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "%c\n", CharBuf[Index])); - } - - - /* Valid name segment */ - - if (Index == 4) - { - /* Found 4 valid characters */ - - CharBuf[4] = '\0'; - - if (NameString) - { - ACPI_STRCAT (NameString, CharBuf); - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Appended to - %s\n", NameString)); - } - else - { - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "No Name string - %s\n", CharBuf)); - } - } - else if (Index == 0) - { - /* - * First character was not a valid name character, - * so we are looking at something other than a name. - */ - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Leading character is not alpha: %02Xh (not a name)\n", - CharBuf[0])); - Status = AE_CTRL_PENDING; - } - else - { - /* - * Segment started with one or more valid characters, but fewer than - * the required 4 - */ - Status = AE_AML_BAD_NAME; - ACPI_ERROR ((AE_INFO, - "Bad character %02x in name, at %p", - *AmlAddress, AmlAddress)); - } - - *InAmlAddress = ACPI_CAST_PTR (UINT8, AmlAddress); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExGetNameString - * - * PARAMETERS: DataType - Object type to be associated with this - * name - * InAmlAddress - Pointer to the namestring in the AML code - * OutNameString - Where the namestring is returned - * OutNameLength - Length of the returned string - * - * RETURN: Status, namestring and length - * - * DESCRIPTION: Extract a full namepath from the AML byte stream, - * including any prefixes. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExGetNameString ( - ACPI_OBJECT_TYPE DataType, - UINT8 *InAmlAddress, - char **OutNameString, - UINT32 *OutNameLength) -{ - ACPI_STATUS Status = AE_OK; - UINT8 *AmlAddress = InAmlAddress; - char *NameString = NULL; - UINT32 NumSegments; - UINT32 PrefixCount = 0; - BOOLEAN HasPrefix = FALSE; - - - ACPI_FUNCTION_TRACE_PTR (ExGetNameString, AmlAddress); - - - if (ACPI_TYPE_LOCAL_REGION_FIELD == DataType || - ACPI_TYPE_LOCAL_BANK_FIELD == DataType || - ACPI_TYPE_LOCAL_INDEX_FIELD == DataType) - { - /* Disallow prefixes for types associated with FieldUnit names */ - - NameString = AcpiExAllocateNameString (0, 1); - if (!NameString) - { - Status = AE_NO_MEMORY; - } - else - { - Status = AcpiExNameSegment (&AmlAddress, NameString); - } - } - else - { - /* - * DataType is not a field name. - * Examine first character of name for root or parent prefix operators - */ - switch (*AmlAddress) - { - case AML_ROOT_PREFIX: - - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "RootPrefix(\\) at %p\n", - AmlAddress)); - - /* - * Remember that we have a RootPrefix -- - * see comment in AcpiExAllocateNameString() - */ - AmlAddress++; - PrefixCount = ACPI_UINT32_MAX; - HasPrefix = TRUE; - break; - - - case AML_PARENT_PREFIX: - - /* Increment past possibly multiple parent prefixes */ - - do - { - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "ParentPrefix (^) at %p\n", - AmlAddress)); - - AmlAddress++; - PrefixCount++; - - } while (*AmlAddress == AML_PARENT_PREFIX); - - HasPrefix = TRUE; - break; - - - default: - - /* Not a prefix character */ - - break; - } - - /* Examine first character of name for name segment prefix operator */ - - switch (*AmlAddress) - { - case AML_DUAL_NAME_PREFIX: - - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "DualNamePrefix at %p\n", - AmlAddress)); - - AmlAddress++; - NameString = AcpiExAllocateNameString (PrefixCount, 2); - if (!NameString) - { - Status = AE_NO_MEMORY; - break; - } - - /* Indicate that we processed a prefix */ - - HasPrefix = TRUE; - - Status = AcpiExNameSegment (&AmlAddress, NameString); - if (ACPI_SUCCESS (Status)) - { - Status = AcpiExNameSegment (&AmlAddress, NameString); - } - break; - - - case AML_MULTI_NAME_PREFIX_OP: - - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "MultiNamePrefix at %p\n", - AmlAddress)); - - /* Fetch count of segments remaining in name path */ - - AmlAddress++; - NumSegments = *AmlAddress; - - NameString = AcpiExAllocateNameString (PrefixCount, NumSegments); - if (!NameString) - { - Status = AE_NO_MEMORY; - break; - } - - /* Indicate that we processed a prefix */ - - AmlAddress++; - HasPrefix = TRUE; - - while (NumSegments && - (Status = AcpiExNameSegment (&AmlAddress, NameString)) == - AE_OK) - { - NumSegments--; - } - - break; - - - case 0: - - /* NullName valid as of 8-12-98 ASL/AML Grammar Update */ - - if (PrefixCount == ACPI_UINT32_MAX) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "NameSeg is \"\\\" followed by NULL\n")); - } - - /* Consume the NULL byte */ - - AmlAddress++; - NameString = AcpiExAllocateNameString (PrefixCount, 0); - if (!NameString) - { - Status = AE_NO_MEMORY; - break; - } - - break; - - - default: - - /* Name segment string */ - - NameString = AcpiExAllocateNameString (PrefixCount, 1); - if (!NameString) - { - Status = AE_NO_MEMORY; - break; - } - - Status = AcpiExNameSegment (&AmlAddress, NameString); - break; - } - } - - if (AE_CTRL_PENDING == Status && HasPrefix) - { - /* Ran out of segments after processing a prefix */ - - ACPI_ERROR ((AE_INFO, - "Malformed Name at %p", NameString)); - Status = AE_AML_BAD_NAME; - } - - if (ACPI_FAILURE (Status)) - { - if (NameString) - { - ACPI_FREE (NameString); - } - return_ACPI_STATUS (Status); - } - - *OutNameString = NameString; - *OutNameLength = (UINT32) (AmlAddress - InAmlAddress); - - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg1.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg1.c deleted file mode 100644 index 4a90b9c95..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg1.c +++ /dev/null @@ -1,1183 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exoparg1 - AML execution - opcodes with 1 argument - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXOPARG1_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "acdispat.h" -#include "acinterp.h" -#include "amlcode.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exoparg1") - - -/*! - * Naming convention for AML interpreter execution routines. - * - * The routines that begin execution of AML opcodes are named with a common - * convention based upon the number of arguments, the number of target operands, - * and whether or not a value is returned: - * - * AcpiExOpcode_xA_yT_zR - * - * Where: - * - * xA - ARGUMENTS: The number of arguments (input operands) that are - * required for this opcode type (0 through 6 args). - * yT - TARGETS: The number of targets (output operands) that are required - * for this opcode type (0, 1, or 2 targets). - * zR - RETURN VALUE: Indicates whether this opcode type returns a value - * as the function return (0 or 1). - * - * The AcpiExOpcode* functions are called via the Dispatcher component with - * fully resolved operands. -!*/ - -/******************************************************************************* - * - * FUNCTION: AcpiExOpcode_0A_0T_1R - * - * PARAMETERS: WalkState - Current state (contains AML opcode) - * - * RETURN: Status - * - * DESCRIPTION: Execute operator with no operands, one return value - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExOpcode_0A_0T_1R ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status = AE_OK; - ACPI_OPERAND_OBJECT *ReturnDesc = NULL; - - - ACPI_FUNCTION_TRACE_STR (ExOpcode_0A_0T_1R, - AcpiPsGetOpcodeName (WalkState->Opcode)); - - - /* Examine the AML opcode */ - - switch (WalkState->Opcode) - { - case AML_TIMER_OP: /* Timer () */ - - /* Create a return object of type Integer */ - - ReturnDesc = AcpiUtCreateIntegerObject (AcpiOsGetTimer ()); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - break; - - default: /* Unknown opcode */ - - ACPI_ERROR ((AE_INFO, "Unknown AML opcode %X", - WalkState->Opcode)); - Status = AE_AML_BAD_OPCODE; - break; - } - -Cleanup: - - /* Delete return object on error */ - - if ((ACPI_FAILURE (Status)) || WalkState->ResultObj) - { - AcpiUtRemoveReference (ReturnDesc); - WalkState->ResultObj = NULL; - } - else - { - /* Save the return value */ - - WalkState->ResultObj = ReturnDesc; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExOpcode_1A_0T_0R - * - * PARAMETERS: WalkState - Current state (contains AML opcode) - * - * RETURN: Status - * - * DESCRIPTION: Execute Type 1 monadic operator with numeric operand on - * object stack - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExOpcode_1A_0T_0R ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE_STR (ExOpcode_1A_0T_0R, - AcpiPsGetOpcodeName (WalkState->Opcode)); - - - /* Examine the AML opcode */ - - switch (WalkState->Opcode) - { - case AML_RELEASE_OP: /* Release (MutexObject) */ - - Status = AcpiExReleaseMutex (Operand[0], WalkState); - break; - - - case AML_RESET_OP: /* Reset (EventObject) */ - - Status = AcpiExSystemResetEvent (Operand[0]); - break; - - - case AML_SIGNAL_OP: /* Signal (EventObject) */ - - Status = AcpiExSystemSignalEvent (Operand[0]); - break; - - - case AML_SLEEP_OP: /* Sleep (MsecTime) */ - - Status = AcpiExSystemDoSuspend (Operand[0]->Integer.Value); - break; - - - case AML_STALL_OP: /* Stall (UsecTime) */ - - Status = AcpiExSystemDoStall ((UINT32) Operand[0]->Integer.Value); - break; - - - case AML_UNLOAD_OP: /* Unload (Handle) */ - - Status = AcpiExUnloadTable (Operand[0]); - break; - - - default: /* Unknown opcode */ - - ACPI_ERROR ((AE_INFO, "Unknown AML opcode %X", - WalkState->Opcode)); - Status = AE_AML_BAD_OPCODE; - break; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExOpcode_1A_1T_0R - * - * PARAMETERS: WalkState - Current state (contains AML opcode) - * - * RETURN: Status - * - * DESCRIPTION: Execute opcode with one argument, one target, and no - * return value. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExOpcode_1A_1T_0R ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status = AE_OK; - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - - - ACPI_FUNCTION_TRACE_STR (ExOpcode_1A_1T_0R, - AcpiPsGetOpcodeName (WalkState->Opcode)); - - - /* Examine the AML opcode */ - - switch (WalkState->Opcode) - { - case AML_LOAD_OP: - - Status = AcpiExLoadOp (Operand[0], Operand[1], WalkState); - break; - - default: /* Unknown opcode */ - - ACPI_ERROR ((AE_INFO, "Unknown AML opcode %X", - WalkState->Opcode)); - Status = AE_AML_BAD_OPCODE; - goto Cleanup; - } - - -Cleanup: - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExOpcode_1A_1T_1R - * - * PARAMETERS: WalkState - Current state (contains AML opcode) - * - * RETURN: Status - * - * DESCRIPTION: Execute opcode with one argument, one target, and a - * return value. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExOpcode_1A_1T_1R ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status = AE_OK; - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - ACPI_OPERAND_OBJECT *ReturnDesc = NULL; - ACPI_OPERAND_OBJECT *ReturnDesc2 = NULL; - UINT32 Temp32; - UINT32 i; - ACPI_INTEGER PowerOfTen; - ACPI_INTEGER Digit; - - - ACPI_FUNCTION_TRACE_STR (ExOpcode_1A_1T_1R, - AcpiPsGetOpcodeName (WalkState->Opcode)); - - - /* Examine the AML opcode */ - - switch (WalkState->Opcode) - { - case AML_BIT_NOT_OP: - case AML_FIND_SET_LEFT_BIT_OP: - case AML_FIND_SET_RIGHT_BIT_OP: - case AML_FROM_BCD_OP: - case AML_TO_BCD_OP: - case AML_COND_REF_OF_OP: - - /* Create a return object of type Integer for these opcodes */ - - ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - switch (WalkState->Opcode) - { - case AML_BIT_NOT_OP: /* Not (Operand, Result) */ - - ReturnDesc->Integer.Value = ~Operand[0]->Integer.Value; - break; - - - case AML_FIND_SET_LEFT_BIT_OP: /* FindSetLeftBit (Operand, Result) */ - - ReturnDesc->Integer.Value = Operand[0]->Integer.Value; - - /* - * Acpi specification describes Integer type as a little - * endian unsigned value, so this boundary condition is valid. - */ - for (Temp32 = 0; ReturnDesc->Integer.Value && - Temp32 < ACPI_INTEGER_BIT_SIZE; ++Temp32) - { - ReturnDesc->Integer.Value >>= 1; - } - - ReturnDesc->Integer.Value = Temp32; - break; - - - case AML_FIND_SET_RIGHT_BIT_OP: /* FindSetRightBit (Operand, Result) */ - - ReturnDesc->Integer.Value = Operand[0]->Integer.Value; - - /* - * The Acpi specification describes Integer type as a little - * endian unsigned value, so this boundary condition is valid. - */ - for (Temp32 = 0; ReturnDesc->Integer.Value && - Temp32 < ACPI_INTEGER_BIT_SIZE; ++Temp32) - { - ReturnDesc->Integer.Value <<= 1; - } - - /* Since the bit position is one-based, subtract from 33 (65) */ - - ReturnDesc->Integer.Value = - Temp32 == 0 ? 0 : (ACPI_INTEGER_BIT_SIZE + 1) - Temp32; - break; - - - case AML_FROM_BCD_OP: /* FromBcd (BCDValue, Result) */ - - /* - * The 64-bit ACPI integer can hold 16 4-bit BCD characters - * (if table is 32-bit, integer can hold 8 BCD characters) - * Convert each 4-bit BCD value - */ - PowerOfTen = 1; - ReturnDesc->Integer.Value = 0; - Digit = Operand[0]->Integer.Value; - - /* Convert each BCD digit (each is one nybble wide) */ - - for (i = 0; (i < AcpiGbl_IntegerNybbleWidth) && (Digit > 0); i++) - { - /* Get the least significant 4-bit BCD digit */ - - Temp32 = ((UINT32) Digit) & 0xF; - - /* Check the range of the digit */ - - if (Temp32 > 9) - { - ACPI_ERROR ((AE_INFO, - "BCD digit too large (not decimal): 0x%X", - Temp32)); - - Status = AE_AML_NUMERIC_OVERFLOW; - goto Cleanup; - } - - /* Sum the digit into the result with the current power of 10 */ - - ReturnDesc->Integer.Value += - (((ACPI_INTEGER) Temp32) * PowerOfTen); - - /* Shift to next BCD digit */ - - Digit >>= 4; - - /* Next power of 10 */ - - PowerOfTen *= 10; - } - break; - - - case AML_TO_BCD_OP: /* ToBcd (Operand, Result) */ - - ReturnDesc->Integer.Value = 0; - Digit = Operand[0]->Integer.Value; - - /* Each BCD digit is one nybble wide */ - - for (i = 0; (i < AcpiGbl_IntegerNybbleWidth) && (Digit > 0); i++) - { - (void) AcpiUtShortDivide (Digit, 10, &Digit, &Temp32); - - /* - * Insert the BCD digit that resides in the - * remainder from above - */ - ReturnDesc->Integer.Value |= - (((ACPI_INTEGER) Temp32) << ACPI_MUL_4 (i)); - } - - /* Overflow if there is any data left in Digit */ - - if (Digit > 0) - { - ACPI_ERROR ((AE_INFO, - "Integer too large to convert to BCD: %8.8X%8.8X", - ACPI_FORMAT_UINT64 (Operand[0]->Integer.Value))); - Status = AE_AML_NUMERIC_OVERFLOW; - goto Cleanup; - } - break; - - - case AML_COND_REF_OF_OP: /* CondRefOf (SourceObject, Result) */ - - /* - * This op is a little strange because the internal return value is - * different than the return value stored in the result descriptor - * (There are really two return values) - */ - if ((ACPI_NAMESPACE_NODE *) Operand[0] == AcpiGbl_RootNode) - { - /* - * This means that the object does not exist in the namespace, - * return FALSE - */ - ReturnDesc->Integer.Value = 0; - goto Cleanup; - } - - /* Get the object reference, store it, and remove our reference */ - - Status = AcpiExGetObjectReference (Operand[0], - &ReturnDesc2, WalkState); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - Status = AcpiExStore (ReturnDesc2, Operand[1], WalkState); - AcpiUtRemoveReference (ReturnDesc2); - - /* The object exists in the namespace, return TRUE */ - - ReturnDesc->Integer.Value = ACPI_INTEGER_MAX; - goto Cleanup; - - - default: - /* No other opcodes get here */ - break; - } - break; - - - case AML_STORE_OP: /* Store (Source, Target) */ - - /* - * A store operand is typically a number, string, buffer or lvalue - * Be careful about deleting the source object, - * since the object itself may have been stored. - */ - Status = AcpiExStore (Operand[0], Operand[1], WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* It is possible that the Store already produced a return object */ - - if (!WalkState->ResultObj) - { - /* - * Normally, we would remove a reference on the Operand[0] - * parameter; But since it is being used as the internal return - * object (meaning we would normally increment it), the two - * cancel out, and we simply don't do anything. - */ - WalkState->ResultObj = Operand[0]; - WalkState->Operands[0] = NULL; /* Prevent deletion */ - } - return_ACPI_STATUS (Status); - - - /* - * ACPI 2.0 Opcodes - */ - case AML_COPY_OP: /* Copy (Source, Target) */ - - Status = AcpiUtCopyIobjectToIobject (Operand[0], &ReturnDesc, - WalkState); - break; - - - case AML_TO_DECSTRING_OP: /* ToDecimalString (Data, Result) */ - - Status = AcpiExConvertToString (Operand[0], &ReturnDesc, - ACPI_EXPLICIT_CONVERT_DECIMAL); - if (ReturnDesc == Operand[0]) - { - /* No conversion performed, add ref to handle return value */ - AcpiUtAddReference (ReturnDesc); - } - break; - - - case AML_TO_HEXSTRING_OP: /* ToHexString (Data, Result) */ - - Status = AcpiExConvertToString (Operand[0], &ReturnDesc, - ACPI_EXPLICIT_CONVERT_HEX); - if (ReturnDesc == Operand[0]) - { - /* No conversion performed, add ref to handle return value */ - AcpiUtAddReference (ReturnDesc); - } - break; - - - case AML_TO_BUFFER_OP: /* ToBuffer (Data, Result) */ - - Status = AcpiExConvertToBuffer (Operand[0], &ReturnDesc); - if (ReturnDesc == Operand[0]) - { - /* No conversion performed, add ref to handle return value */ - AcpiUtAddReference (ReturnDesc); - } - break; - - - case AML_TO_INTEGER_OP: /* ToInteger (Data, Result) */ - - Status = AcpiExConvertToInteger (Operand[0], &ReturnDesc, - ACPI_ANY_BASE); - if (ReturnDesc == Operand[0]) - { - /* No conversion performed, add ref to handle return value */ - AcpiUtAddReference (ReturnDesc); - } - break; - - - case AML_SHIFT_LEFT_BIT_OP: /* ShiftLeftBit (Source, BitNum) */ - case AML_SHIFT_RIGHT_BIT_OP: /* ShiftRightBit (Source, BitNum) */ - - /* These are two obsolete opcodes */ - - ACPI_ERROR ((AE_INFO, - "%s is obsolete and not implemented", - AcpiPsGetOpcodeName (WalkState->Opcode))); - Status = AE_SUPPORT; - goto Cleanup; - - - default: /* Unknown opcode */ - - ACPI_ERROR ((AE_INFO, "Unknown AML opcode %X", - WalkState->Opcode)); - Status = AE_AML_BAD_OPCODE; - goto Cleanup; - } - - if (ACPI_SUCCESS (Status)) - { - /* Store the return value computed above into the target object */ - - Status = AcpiExStore (ReturnDesc, Operand[1], WalkState); - } - - -Cleanup: - - /* Delete return object on error */ - - if (ACPI_FAILURE (Status)) - { - AcpiUtRemoveReference (ReturnDesc); - } - - /* Save return object on success */ - - else if (!WalkState->ResultObj) - { - WalkState->ResultObj = ReturnDesc; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExOpcode_1A_0T_1R - * - * PARAMETERS: WalkState - Current state (contains AML opcode) - * - * RETURN: Status - * - * DESCRIPTION: Execute opcode with one argument, no target, and a return value - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExOpcode_1A_0T_1R ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - ACPI_OPERAND_OBJECT *TempDesc; - ACPI_OPERAND_OBJECT *ReturnDesc = NULL; - ACPI_STATUS Status = AE_OK; - UINT32 Type; - ACPI_INTEGER Value; - - - ACPI_FUNCTION_TRACE_STR (ExOpcode_1A_0T_1R, - AcpiPsGetOpcodeName (WalkState->Opcode)); - - - /* Examine the AML opcode */ - - switch (WalkState->Opcode) - { - case AML_LNOT_OP: /* LNot (Operand) */ - - ReturnDesc = AcpiUtCreateIntegerObject ((UINT64) 0); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* - * Set result to ONES (TRUE) if Value == 0. Note: - * ReturnDesc->Integer.Value is initially == 0 (FALSE) from above. - */ - if (!Operand[0]->Integer.Value) - { - ReturnDesc->Integer.Value = ACPI_INTEGER_MAX; - } - break; - - - case AML_DECREMENT_OP: /* Decrement (Operand) */ - case AML_INCREMENT_OP: /* Increment (Operand) */ - - /* - * Create a new integer. Can't just get the base integer and - * increment it because it may be an Arg or Field. - */ - ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* - * Since we are expecting a Reference operand, it can be either a - * NS Node or an internal object. - */ - TempDesc = Operand[0]; - if (ACPI_GET_DESCRIPTOR_TYPE (TempDesc) == ACPI_DESC_TYPE_OPERAND) - { - /* Internal reference object - prevent deletion */ - - AcpiUtAddReference (TempDesc); - } - - /* - * Convert the Reference operand to an Integer (This removes a - * reference on the Operand[0] object) - * - * NOTE: We use LNOT_OP here in order to force resolution of the - * reference operand to an actual integer. - */ - Status = AcpiExResolveOperands (AML_LNOT_OP, &TempDesc, WalkState); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "While resolving operands for [%s]", - AcpiPsGetOpcodeName (WalkState->Opcode))); - - goto Cleanup; - } - - /* - * TempDesc is now guaranteed to be an Integer object -- - * Perform the actual increment or decrement - */ - if (WalkState->Opcode == AML_INCREMENT_OP) - { - ReturnDesc->Integer.Value = TempDesc->Integer.Value +1; - } - else - { - ReturnDesc->Integer.Value = TempDesc->Integer.Value -1; - } - - /* Finished with this Integer object */ - - AcpiUtRemoveReference (TempDesc); - - /* - * Store the result back (indirectly) through the original - * Reference object - */ - Status = AcpiExStore (ReturnDesc, Operand[0], WalkState); - break; - - - case AML_TYPE_OP: /* ObjectType (SourceObject) */ - - /* - * Note: The operand is not resolved at this point because we want to - * get the associated object, not its value. For example, we don't - * want to resolve a FieldUnit to its value, we want the actual - * FieldUnit object. - */ - - /* Get the type of the base object */ - - Status = AcpiExResolveMultiple (WalkState, Operand[0], &Type, NULL); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - /* Allocate a descriptor to hold the type. */ - - ReturnDesc = AcpiUtCreateIntegerObject ((UINT64) Type); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - break; - - - case AML_SIZE_OF_OP: /* SizeOf (SourceObject) */ - - /* - * Note: The operand is not resolved at this point because we want to - * get the associated object, not its value. - */ - - /* Get the base object */ - - Status = AcpiExResolveMultiple (WalkState, - Operand[0], &Type, &TempDesc); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - /* - * The type of the base object must be integer, buffer, string, or - * package. All others are not supported. - * - * NOTE: Integer is not specifically supported by the ACPI spec, - * but is supported implicitly via implicit operand conversion. - * rather than bother with conversion, we just use the byte width - * global (4 or 8 bytes). - */ - switch (Type) - { - case ACPI_TYPE_INTEGER: - Value = AcpiGbl_IntegerByteWidth; - break; - - case ACPI_TYPE_STRING: - Value = TempDesc->String.Length; - break; - - case ACPI_TYPE_BUFFER: - - /* Buffer arguments may not be evaluated at this point */ - - Status = AcpiDsGetBufferArguments (TempDesc); - Value = TempDesc->Buffer.Length; - break; - - case ACPI_TYPE_PACKAGE: - - /* Package arguments may not be evaluated at this point */ - - Status = AcpiDsGetPackageArguments (TempDesc); - Value = TempDesc->Package.Count; - break; - - default: - ACPI_ERROR ((AE_INFO, - "Operand must be Buffer/Integer/String/Package - found type %s", - AcpiUtGetTypeName (Type))); - Status = AE_AML_OPERAND_TYPE; - goto Cleanup; - } - - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - /* - * Now that we have the size of the object, create a result - * object to hold the value - */ - ReturnDesc = AcpiUtCreateIntegerObject (Value); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - break; - - - case AML_REF_OF_OP: /* RefOf (SourceObject) */ - - Status = AcpiExGetObjectReference (Operand[0], &ReturnDesc, WalkState); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - break; - - - case AML_DEREF_OF_OP: /* DerefOf (ObjReference | String) */ - - /* Check for a method local or argument, or standalone String */ - - if (ACPI_GET_DESCRIPTOR_TYPE (Operand[0]) == ACPI_DESC_TYPE_NAMED) - { - TempDesc = AcpiNsGetAttachedObject ( - (ACPI_NAMESPACE_NODE *) Operand[0]); - if (TempDesc && - ((TempDesc->Common.Type == ACPI_TYPE_STRING) || - (TempDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE))) - { - Operand[0] = TempDesc; - AcpiUtAddReference (TempDesc); - } - else - { - Status = AE_AML_OPERAND_TYPE; - goto Cleanup; - } - } - else - { - switch ((Operand[0])->Common.Type) - { - case ACPI_TYPE_LOCAL_REFERENCE: - /* - * This is a DerefOf (LocalX | ArgX) - * - * Must resolve/dereference the local/arg reference first - */ - switch (Operand[0]->Reference.Class) - { - case ACPI_REFCLASS_LOCAL: - case ACPI_REFCLASS_ARG: - - /* Set Operand[0] to the value of the local/arg */ - - Status = AcpiDsMethodDataGetValue ( - Operand[0]->Reference.Class, - Operand[0]->Reference.Value, - WalkState, &TempDesc); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - /* - * Delete our reference to the input object and - * point to the object just retrieved - */ - AcpiUtRemoveReference (Operand[0]); - Operand[0] = TempDesc; - break; - - case ACPI_REFCLASS_REFOF: - - /* Get the object to which the reference refers */ - - TempDesc = Operand[0]->Reference.Object; - AcpiUtRemoveReference (Operand[0]); - Operand[0] = TempDesc; - break; - - default: - - /* Must be an Index op - handled below */ - break; - } - break; - - case ACPI_TYPE_STRING: - break; - - default: - Status = AE_AML_OPERAND_TYPE; - goto Cleanup; - } - } - - if (ACPI_GET_DESCRIPTOR_TYPE (Operand[0]) != ACPI_DESC_TYPE_NAMED) - { - if ((Operand[0])->Common.Type == ACPI_TYPE_STRING) - { - /* - * This is a DerefOf (String). The string is a reference - * to a named ACPI object. - * - * 1) Find the owning Node - * 2) Dereference the node to an actual object. Could be a - * Field, so we need to resolve the node to a value. - */ - Status = AcpiNsGetNode (WalkState->ScopeInfo->Scope.Node, - Operand[0]->String.Pointer, - ACPI_NS_SEARCH_PARENT, - ACPI_CAST_INDIRECT_PTR ( - ACPI_NAMESPACE_NODE, &ReturnDesc)); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - Status = AcpiExResolveNodeToValue ( - ACPI_CAST_INDIRECT_PTR ( - ACPI_NAMESPACE_NODE, &ReturnDesc), - WalkState); - goto Cleanup; - } - } - - /* Operand[0] may have changed from the code above */ - - if (ACPI_GET_DESCRIPTOR_TYPE (Operand[0]) == ACPI_DESC_TYPE_NAMED) - { - /* - * This is a DerefOf (ObjectReference) - * Get the actual object from the Node (This is the dereference). - * This case may only happen when a LocalX or ArgX is - * dereferenced above. - */ - ReturnDesc = AcpiNsGetAttachedObject ( - (ACPI_NAMESPACE_NODE *) Operand[0]); - AcpiUtAddReference (ReturnDesc); - } - else - { - /* - * This must be a reference object produced by either the - * Index() or RefOf() operator - */ - switch (Operand[0]->Reference.Class) - { - case ACPI_REFCLASS_INDEX: - - /* - * The target type for the Index operator must be - * either a Buffer or a Package - */ - switch (Operand[0]->Reference.TargetType) - { - case ACPI_TYPE_BUFFER_FIELD: - - TempDesc = Operand[0]->Reference.Object; - - /* - * Create a new object that contains one element of the - * buffer -- the element pointed to by the index. - * - * NOTE: index into a buffer is NOT a pointer to a - * sub-buffer of the main buffer, it is only a pointer to a - * single element (byte) of the buffer! - * - * Since we are returning the value of the buffer at the - * indexed location, we don't need to add an additional - * reference to the buffer itself. - */ - ReturnDesc = AcpiUtCreateIntegerObject ((UINT64) - TempDesc->Buffer.Pointer[Operand[0]->Reference.Value]); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - break; - - - case ACPI_TYPE_PACKAGE: - - /* - * Return the referenced element of the package. We must - * add another reference to the referenced object, however. - */ - ReturnDesc = *(Operand[0]->Reference.Where); - if (ReturnDesc) - { - AcpiUtAddReference (ReturnDesc); - } - break; - - - default: - - ACPI_ERROR ((AE_INFO, - "Unknown Index TargetType %X in reference object %p", - Operand[0]->Reference.TargetType, Operand[0])); - Status = AE_AML_OPERAND_TYPE; - goto Cleanup; - } - break; - - - case ACPI_REFCLASS_REFOF: - - ReturnDesc = Operand[0]->Reference.Object; - - if (ACPI_GET_DESCRIPTOR_TYPE (ReturnDesc) == - ACPI_DESC_TYPE_NAMED) - { - ReturnDesc = AcpiNsGetAttachedObject ( - (ACPI_NAMESPACE_NODE *) ReturnDesc); - } - - /* Add another reference to the object! */ - - AcpiUtAddReference (ReturnDesc); - break; - - - default: - ACPI_ERROR ((AE_INFO, - "Unknown class in reference(%p) - %2.2X", - Operand[0], Operand[0]->Reference.Class)); - - Status = AE_TYPE; - goto Cleanup; - } - } - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Unknown AML opcode %X", - WalkState->Opcode)); - Status = AE_AML_BAD_OPCODE; - goto Cleanup; - } - - -Cleanup: - - /* Delete return object on error */ - - if (ACPI_FAILURE (Status)) - { - AcpiUtRemoveReference (ReturnDesc); - } - - /* Save return object on success */ - - else - { - WalkState->ResultObj = ReturnDesc; - } - - return_ACPI_STATUS (Status); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg2.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg2.c deleted file mode 100644 index 7c42652cc..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg2.c +++ /dev/null @@ -1,741 +0,0 @@ -/****************************************************************************** - * - * Module Name: exoparg2 - AML execution - opcodes with 2 arguments - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __EXOPARG2_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "acinterp.h" -#include "acevents.h" -#include "amlcode.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exoparg2") - - -/*! - * Naming convention for AML interpreter execution routines. - * - * The routines that begin execution of AML opcodes are named with a common - * convention based upon the number of arguments, the number of target operands, - * and whether or not a value is returned: - * - * AcpiExOpcode_xA_yT_zR - * - * Where: - * - * xA - ARGUMENTS: The number of arguments (input operands) that are - * required for this opcode type (1 through 6 args). - * yT - TARGETS: The number of targets (output operands) that are required - * for this opcode type (0, 1, or 2 targets). - * zR - RETURN VALUE: Indicates whether this opcode type returns a value - * as the function return (0 or 1). - * - * The AcpiExOpcode* functions are called via the Dispatcher component with - * fully resolved operands. -!*/ - - -/******************************************************************************* - * - * FUNCTION: AcpiExOpcode_2A_0T_0R - * - * PARAMETERS: WalkState - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Execute opcode with two arguments, no target, and no return - * value. - * - * ALLOCATION: Deletes both operands - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExOpcode_2A_0T_0R ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - ACPI_NAMESPACE_NODE *Node; - UINT32 Value; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE_STR (ExOpcode_2A_0T_0R, - AcpiPsGetOpcodeName (WalkState->Opcode)); - - - /* Examine the opcode */ - - switch (WalkState->Opcode) - { - case AML_NOTIFY_OP: /* Notify (NotifyObject, NotifyValue) */ - - /* The first operand is a namespace node */ - - Node = (ACPI_NAMESPACE_NODE *) Operand[0]; - - /* Second value is the notify value */ - - Value = (UINT32) Operand[1]->Integer.Value; - - /* Are notifies allowed on this object? */ - - if (!AcpiEvIsNotifyObject (Node)) - { - ACPI_ERROR ((AE_INFO, - "Unexpected notify object type [%s]", - AcpiUtGetTypeName (Node->Type))); - - Status = AE_AML_OPERAND_TYPE; - break; - } - -#ifdef ACPI_GPE_NOTIFY_CHECK - /* - * GPE method wake/notify check. Here, we want to ensure that we - * don't receive any "DeviceWake" Notifies from a GPE _Lxx or _Exx - * GPE method during system runtime. If we do, the GPE is marked - * as "wake-only" and disabled. - * - * 1) Is the Notify() value == DeviceWake? - * 2) Is this a GPE deferred method? (An _Lxx or _Exx method) - * 3) Did the original GPE happen at system runtime? - * (versus during wake) - * - * If all three cases are true, this is a wake-only GPE that should - * be disabled at runtime. - */ - if (Value == 2) /* DeviceWake */ - { - Status = AcpiEvCheckForWakeOnlyGpe (WalkState->GpeEventInfo); - if (ACPI_FAILURE (Status)) - { - /* AE_WAKE_ONLY_GPE only error, means ignore this notify */ - - return_ACPI_STATUS (AE_OK) - } - } -#endif - - /* - * Dispatch the notify to the appropriate handler - * NOTE: the request is queued for execution after this method - * completes. The notify handlers are NOT invoked synchronously - * from this thread -- because handlers may in turn run other - * control methods. - */ - Status = AcpiEvQueueNotifyRequest (Node, Value); - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Unknown AML opcode %X", - WalkState->Opcode)); - Status = AE_AML_BAD_OPCODE; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExOpcode_2A_2T_1R - * - * PARAMETERS: WalkState - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Execute a dyadic operator (2 operands) with 2 output targets - * and one implicit return value. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExOpcode_2A_2T_1R ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - ACPI_OPERAND_OBJECT *ReturnDesc1 = NULL; - ACPI_OPERAND_OBJECT *ReturnDesc2 = NULL; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_STR (ExOpcode_2A_2T_1R, - AcpiPsGetOpcodeName (WalkState->Opcode)); - - - /* Execute the opcode */ - - switch (WalkState->Opcode) - { - case AML_DIVIDE_OP: - - /* Divide (Dividend, Divisor, RemainderResult QuotientResult) */ - - ReturnDesc1 = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); - if (!ReturnDesc1) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - ReturnDesc2 = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); - if (!ReturnDesc2) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* Quotient to ReturnDesc1, remainder to ReturnDesc2 */ - - Status = AcpiUtDivide (Operand[0]->Integer.Value, - Operand[1]->Integer.Value, - &ReturnDesc1->Integer.Value, - &ReturnDesc2->Integer.Value); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Unknown AML opcode %X", - WalkState->Opcode)); - Status = AE_AML_BAD_OPCODE; - goto Cleanup; - } - - /* Store the results to the target reference operands */ - - Status = AcpiExStore (ReturnDesc2, Operand[2], WalkState); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - Status = AcpiExStore (ReturnDesc1, Operand[3], WalkState); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - -Cleanup: - /* - * Since the remainder is not returned indirectly, remove a reference to - * it. Only the quotient is returned indirectly. - */ - AcpiUtRemoveReference (ReturnDesc2); - - if (ACPI_FAILURE (Status)) - { - /* Delete the return object */ - - AcpiUtRemoveReference (ReturnDesc1); - } - - /* Save return object (the remainder) on success */ - - else - { - WalkState->ResultObj = ReturnDesc1; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExOpcode_2A_1T_1R - * - * PARAMETERS: WalkState - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Execute opcode with two arguments, one target, and a return - * value. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExOpcode_2A_1T_1R ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - ACPI_OPERAND_OBJECT *ReturnDesc = NULL; - ACPI_INTEGER Index; - ACPI_STATUS Status = AE_OK; - ACPI_SIZE Length; - - - ACPI_FUNCTION_TRACE_STR (ExOpcode_2A_1T_1R, - AcpiPsGetOpcodeName (WalkState->Opcode)); - - - /* Execute the opcode */ - - if (WalkState->OpInfo->Flags & AML_MATH) - { - /* All simple math opcodes (add, etc.) */ - - ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - ReturnDesc->Integer.Value = AcpiExDoMathOp (WalkState->Opcode, - Operand[0]->Integer.Value, - Operand[1]->Integer.Value); - goto StoreResultToTarget; - } - - switch (WalkState->Opcode) - { - case AML_MOD_OP: /* Mod (Dividend, Divisor, RemainderResult (ACPI 2.0) */ - - ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* ReturnDesc will contain the remainder */ - - Status = AcpiUtDivide (Operand[0]->Integer.Value, - Operand[1]->Integer.Value, - NULL, - &ReturnDesc->Integer.Value); - break; - - - case AML_CONCAT_OP: /* Concatenate (Data1, Data2, Result) */ - - Status = AcpiExDoConcatenate (Operand[0], Operand[1], - &ReturnDesc, WalkState); - break; - - - case AML_TO_STRING_OP: /* ToString (Buffer, Length, Result) (ACPI 2.0) */ - - /* - * Input object is guaranteed to be a buffer at this point (it may have - * been converted.) Copy the raw buffer data to a new object of - * type String. - */ - - /* - * Get the length of the new string. It is the smallest of: - * 1) Length of the input buffer - * 2) Max length as specified in the ToString operator - * 3) Length of input buffer up to a zero byte (null terminator) - * - * NOTE: A length of zero is ok, and will create a zero-length, null - * terminated string. - */ - Length = 0; - while ((Length < Operand[0]->Buffer.Length) && - (Length < Operand[1]->Integer.Value) && - (Operand[0]->Buffer.Pointer[Length])) - { - Length++; - } - - /* Allocate a new string object */ - - ReturnDesc = AcpiUtCreateStringObject (Length); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* - * Copy the raw buffer data with no transform. - * (NULL terminated already) - */ - ACPI_MEMCPY (ReturnDesc->String.Pointer, - Operand[0]->Buffer.Pointer, Length); - break; - - - case AML_CONCAT_RES_OP: - - /* ConcatenateResTemplate (Buffer, Buffer, Result) (ACPI 2.0) */ - - Status = AcpiExConcatTemplate (Operand[0], Operand[1], - &ReturnDesc, WalkState); - break; - - - case AML_INDEX_OP: /* Index (Source Index Result) */ - - /* Create the internal return object */ - - ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_REFERENCE); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* Initialize the Index reference object */ - - Index = Operand[1]->Integer.Value; - ReturnDesc->Reference.Value = (UINT32) Index; - ReturnDesc->Reference.Class = ACPI_REFCLASS_INDEX; - - /* - * At this point, the Source operand is a String, Buffer, or Package. - * Verify that the index is within range. - */ - switch ((Operand[0])->Common.Type) - { - case ACPI_TYPE_STRING: - - if (Index >= Operand[0]->String.Length) - { - Status = AE_AML_STRING_LIMIT; - } - - ReturnDesc->Reference.TargetType = ACPI_TYPE_BUFFER_FIELD; - break; - - case ACPI_TYPE_BUFFER: - - if (Index >= Operand[0]->Buffer.Length) - { - Status = AE_AML_BUFFER_LIMIT; - } - - ReturnDesc->Reference.TargetType = ACPI_TYPE_BUFFER_FIELD; - break; - - case ACPI_TYPE_PACKAGE: - - if (Index >= Operand[0]->Package.Count) - { - Status = AE_AML_PACKAGE_LIMIT; - } - - ReturnDesc->Reference.TargetType = ACPI_TYPE_PACKAGE; - ReturnDesc->Reference.Where = &Operand[0]->Package.Elements [Index]; - break; - - default: - - Status = AE_AML_INTERNAL; - goto Cleanup; - } - - /* Failure means that the Index was beyond the end of the object */ - - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Index (%X%8.8X) is beyond end of object", - ACPI_FORMAT_UINT64 (Index))); - goto Cleanup; - } - - /* - * Save the target object and add a reference to it for the life - * of the index - */ - ReturnDesc->Reference.Object = Operand[0]; - AcpiUtAddReference (Operand[0]); - - /* Store the reference to the Target */ - - Status = AcpiExStore (ReturnDesc, Operand[2], WalkState); - - /* Return the reference */ - - WalkState->ResultObj = ReturnDesc; - goto Cleanup; - - - default: - - ACPI_ERROR ((AE_INFO, "Unknown AML opcode %X", - WalkState->Opcode)); - Status = AE_AML_BAD_OPCODE; - break; - } - - -StoreResultToTarget: - - if (ACPI_SUCCESS (Status)) - { - /* - * Store the result of the operation (which is now in ReturnDesc) into - * the Target descriptor. - */ - Status = AcpiExStore (ReturnDesc, Operand[2], WalkState); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - if (!WalkState->ResultObj) - { - WalkState->ResultObj = ReturnDesc; - } - } - - -Cleanup: - - /* Delete return object on error */ - - if (ACPI_FAILURE (Status)) - { - AcpiUtRemoveReference (ReturnDesc); - WalkState->ResultObj = NULL; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExOpcode_2A_0T_1R - * - * PARAMETERS: WalkState - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Execute opcode with 2 arguments, no target, and a return value - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExOpcode_2A_0T_1R ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - ACPI_OPERAND_OBJECT *ReturnDesc = NULL; - ACPI_STATUS Status = AE_OK; - BOOLEAN LogicalResult = FALSE; - - - ACPI_FUNCTION_TRACE_STR (ExOpcode_2A_0T_1R, - AcpiPsGetOpcodeName (WalkState->Opcode)); - - - /* Create the internal return object */ - - ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* Execute the Opcode */ - - if (WalkState->OpInfo->Flags & AML_LOGICAL_NUMERIC) - { - /* LogicalOp (Operand0, Operand1) */ - - Status = AcpiExDoLogicalNumericOp (WalkState->Opcode, - Operand[0]->Integer.Value, Operand[1]->Integer.Value, - &LogicalResult); - goto StoreLogicalResult; - } - else if (WalkState->OpInfo->Flags & AML_LOGICAL) - { - /* LogicalOp (Operand0, Operand1) */ - - Status = AcpiExDoLogicalOp (WalkState->Opcode, Operand[0], - Operand[1], &LogicalResult); - goto StoreLogicalResult; - } - - switch (WalkState->Opcode) - { - case AML_ACQUIRE_OP: /* Acquire (MutexObject, Timeout) */ - - Status = AcpiExAcquireMutex (Operand[1], Operand[0], WalkState); - if (Status == AE_TIME) - { - LogicalResult = TRUE; /* TRUE = Acquire timed out */ - Status = AE_OK; - } - break; - - - case AML_WAIT_OP: /* Wait (EventObject, Timeout) */ - - Status = AcpiExSystemWaitEvent (Operand[1], Operand[0]); - if (Status == AE_TIME) - { - LogicalResult = TRUE; /* TRUE, Wait timed out */ - Status = AE_OK; - } - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Unknown AML opcode %X", - WalkState->Opcode)); - Status = AE_AML_BAD_OPCODE; - goto Cleanup; - } - - -StoreLogicalResult: - /* - * Set return value to according to LogicalResult. logical TRUE (all ones) - * Default is FALSE (zero) - */ - if (LogicalResult) - { - ReturnDesc->Integer.Value = ACPI_INTEGER_MAX; - } - -Cleanup: - - /* Delete return object on error */ - - if (ACPI_FAILURE (Status)) - { - AcpiUtRemoveReference (ReturnDesc); - } - - /* Save return object on success */ - - else - { - WalkState->ResultObj = ReturnDesc; - } - - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg3.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg3.c deleted file mode 100644 index 591d6aceb..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg3.c +++ /dev/null @@ -1,377 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exoparg3 - AML execution - opcodes with 3 arguments - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXOPARG3_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" -#include "acparser.h" -#include "amlcode.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exoparg3") - - -/*! - * Naming convention for AML interpreter execution routines. - * - * The routines that begin execution of AML opcodes are named with a common - * convention based upon the number of arguments, the number of target operands, - * and whether or not a value is returned: - * - * AcpiExOpcode_xA_yT_zR - * - * Where: - * - * xA - ARGUMENTS: The number of arguments (input operands) that are - * required for this opcode type (1 through 6 args). - * yT - TARGETS: The number of targets (output operands) that are required - * for this opcode type (0, 1, or 2 targets). - * zR - RETURN VALUE: Indicates whether this opcode type returns a value - * as the function return (0 or 1). - * - * The AcpiExOpcode* functions are called via the Dispatcher component with - * fully resolved operands. -!*/ - - -/******************************************************************************* - * - * FUNCTION: AcpiExOpcode_3A_0T_0R - * - * PARAMETERS: WalkState - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Execute Triadic operator (3 operands) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExOpcode_3A_0T_0R ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - ACPI_SIGNAL_FATAL_INFO *Fatal; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE_STR (ExOpcode_3A_0T_0R, - AcpiPsGetOpcodeName (WalkState->Opcode)); - - - switch (WalkState->Opcode) - { - case AML_FATAL_OP: /* Fatal (FatalType FatalCode FatalArg) */ - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "FatalOp: Type %X Code %X Arg %X <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n", - (UINT32) Operand[0]->Integer.Value, - (UINT32) Operand[1]->Integer.Value, - (UINT32) Operand[2]->Integer.Value)); - - Fatal = ACPI_ALLOCATE (sizeof (ACPI_SIGNAL_FATAL_INFO)); - if (Fatal) - { - Fatal->Type = (UINT32) Operand[0]->Integer.Value; - Fatal->Code = (UINT32) Operand[1]->Integer.Value; - Fatal->Argument = (UINT32) Operand[2]->Integer.Value; - } - - /* Always signal the OS! */ - - Status = AcpiOsSignal (ACPI_SIGNAL_FATAL, Fatal); - - /* Might return while OS is shutting down, just continue */ - - ACPI_FREE (Fatal); - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Unknown AML opcode %X", - WalkState->Opcode)); - Status = AE_AML_BAD_OPCODE; - goto Cleanup; - } - - -Cleanup: - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExOpcode_3A_1T_1R - * - * PARAMETERS: WalkState - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Execute Triadic operator (3 operands) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExOpcode_3A_1T_1R ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - ACPI_OPERAND_OBJECT *ReturnDesc = NULL; - char *Buffer = NULL; - ACPI_STATUS Status = AE_OK; - ACPI_INTEGER Index; - ACPI_SIZE Length; - - - ACPI_FUNCTION_TRACE_STR (ExOpcode_3A_1T_1R, - AcpiPsGetOpcodeName (WalkState->Opcode)); - - - switch (WalkState->Opcode) - { - case AML_MID_OP: /* Mid (Source[0], Index[1], Length[2], Result[3]) */ - - /* - * Create the return object. The Source operand is guaranteed to be - * either a String or a Buffer, so just use its type. - */ - ReturnDesc = AcpiUtCreateInternalObject ( - (Operand[0])->Common.Type); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* Get the Integer values from the objects */ - - Index = Operand[1]->Integer.Value; - Length = (ACPI_SIZE) Operand[2]->Integer.Value; - - /* - * If the index is beyond the length of the String/Buffer, or if the - * requested length is zero, return a zero-length String/Buffer - */ - if (Index >= Operand[0]->String.Length) - { - Length = 0; - } - - /* Truncate request if larger than the actual String/Buffer */ - - else if ((Index + Length) > Operand[0]->String.Length) - { - Length = (ACPI_SIZE) Operand[0]->String.Length - - (ACPI_SIZE) Index; - } - - /* Strings always have a sub-pointer, not so for buffers */ - - switch ((Operand[0])->Common.Type) - { - case ACPI_TYPE_STRING: - - /* Always allocate a new buffer for the String */ - - Buffer = ACPI_ALLOCATE_ZEROED ((ACPI_SIZE) Length + 1); - if (!Buffer) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - break; - - case ACPI_TYPE_BUFFER: - - /* If the requested length is zero, don't allocate a buffer */ - - if (Length > 0) - { - /* Allocate a new buffer for the Buffer */ - - Buffer = ACPI_ALLOCATE_ZEROED (Length); - if (!Buffer) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - } - break; - - default: /* Should not happen */ - - Status = AE_AML_OPERAND_TYPE; - goto Cleanup; - } - - if (Buffer) - { - /* We have a buffer, copy the portion requested */ - - ACPI_MEMCPY (Buffer, Operand[0]->String.Pointer + Index, - Length); - } - - /* Set the length of the new String/Buffer */ - - ReturnDesc->String.Pointer = Buffer; - ReturnDesc->String.Length = (UINT32) Length; - - /* Mark buffer initialized */ - - ReturnDesc->Buffer.Flags |= AOPOBJ_DATA_VALID; - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Unknown AML opcode %X", - WalkState->Opcode)); - Status = AE_AML_BAD_OPCODE; - goto Cleanup; - } - - /* Store the result in the target */ - - Status = AcpiExStore (ReturnDesc, Operand[3], WalkState); - -Cleanup: - - /* Delete return object on error */ - - if (ACPI_FAILURE (Status) || WalkState->ResultObj) - { - AcpiUtRemoveReference (ReturnDesc); - WalkState->ResultObj = NULL; - } - - /* Set the return object and exit */ - - else - { - WalkState->ResultObj = ReturnDesc; - } - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg6.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg6.c deleted file mode 100644 index c2609471d..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exoparg6.c +++ /dev/null @@ -1,438 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exoparg6 - AML execution - opcodes with 6 arguments - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXOPARG6_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" -#include "acparser.h" -#include "amlcode.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exoparg6") - - -/*! - * Naming convention for AML interpreter execution routines. - * - * The routines that begin execution of AML opcodes are named with a common - * convention based upon the number of arguments, the number of target operands, - * and whether or not a value is returned: - * - * AcpiExOpcode_xA_yT_zR - * - * Where: - * - * xA - ARGUMENTS: The number of arguments (input operands) that are - * required for this opcode type (1 through 6 args). - * yT - TARGETS: The number of targets (output operands) that are required - * for this opcode type (0, 1, or 2 targets). - * zR - RETURN VALUE: Indicates whether this opcode type returns a value - * as the function return (0 or 1). - * - * The AcpiExOpcode* functions are called via the Dispatcher component with - * fully resolved operands. -!*/ - -/* Local prototypes */ - -static BOOLEAN -AcpiExDoMatch ( - UINT32 MatchOp, - ACPI_OPERAND_OBJECT *PackageObj, - ACPI_OPERAND_OBJECT *MatchObj); - - -/******************************************************************************* - * - * FUNCTION: AcpiExDoMatch - * - * PARAMETERS: MatchOp - The AML match operand - * PackageObj - Object from the target package - * MatchObj - Object to be matched - * - * RETURN: TRUE if the match is successful, FALSE otherwise - * - * DESCRIPTION: Implements the low-level match for the ASL Match operator. - * Package elements will be implicitly converted to the type of - * the match object (Integer/Buffer/String). - * - ******************************************************************************/ - -static BOOLEAN -AcpiExDoMatch ( - UINT32 MatchOp, - ACPI_OPERAND_OBJECT *PackageObj, - ACPI_OPERAND_OBJECT *MatchObj) -{ - BOOLEAN LogicalResult = TRUE; - ACPI_STATUS Status; - - - /* - * Note: Since the PackageObj/MatchObj ordering is opposite to that of - * the standard logical operators, we have to reverse them when we call - * DoLogicalOp in order to make the implicit conversion rules work - * correctly. However, this means we have to flip the entire equation - * also. A bit ugly perhaps, but overall, better than fussing the - * parameters around at runtime, over and over again. - * - * Below, P[i] refers to the package element, M refers to the Match object. - */ - switch (MatchOp) - { - case MATCH_MTR: - - /* Always true */ - - break; - - case MATCH_MEQ: - - /* - * True if equal: (P[i] == M) - * Change to: (M == P[i]) - */ - Status = AcpiExDoLogicalOp (AML_LEQUAL_OP, MatchObj, PackageObj, - &LogicalResult); - if (ACPI_FAILURE (Status)) - { - return (FALSE); - } - break; - - case MATCH_MLE: - - /* - * True if less than or equal: (P[i] <= M) (P[i] NotGreater than M) - * Change to: (M >= P[i]) (M NotLess than P[i]) - */ - Status = AcpiExDoLogicalOp (AML_LLESS_OP, MatchObj, PackageObj, - &LogicalResult); - if (ACPI_FAILURE (Status)) - { - return (FALSE); - } - LogicalResult = (BOOLEAN) !LogicalResult; - break; - - case MATCH_MLT: - - /* - * True if less than: (P[i] < M) - * Change to: (M > P[i]) - */ - Status = AcpiExDoLogicalOp (AML_LGREATER_OP, MatchObj, PackageObj, - &LogicalResult); - if (ACPI_FAILURE (Status)) - { - return (FALSE); - } - break; - - case MATCH_MGE: - - /* - * True if greater than or equal: (P[i] >= M) (P[i] NotLess than M) - * Change to: (M <= P[i]) (M NotGreater than P[i]) - */ - Status = AcpiExDoLogicalOp (AML_LGREATER_OP, MatchObj, PackageObj, - &LogicalResult); - if (ACPI_FAILURE (Status)) - { - return (FALSE); - } - LogicalResult = (BOOLEAN)!LogicalResult; - break; - - case MATCH_MGT: - - /* - * True if greater than: (P[i] > M) - * Change to: (M < P[i]) - */ - Status = AcpiExDoLogicalOp (AML_LLESS_OP, MatchObj, PackageObj, - &LogicalResult); - if (ACPI_FAILURE (Status)) - { - return (FALSE); - } - break; - - default: - - /* Undefined */ - - return (FALSE); - } - - return LogicalResult; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExOpcode_6A_0T_1R - * - * PARAMETERS: WalkState - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Execute opcode with 6 arguments, no target, and a return value - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExOpcode_6A_0T_1R ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; - ACPI_OPERAND_OBJECT *ReturnDesc = NULL; - ACPI_STATUS Status = AE_OK; - ACPI_INTEGER Index; - ACPI_OPERAND_OBJECT *ThisElement; - - - ACPI_FUNCTION_TRACE_STR (ExOpcode_6A_0T_1R, - AcpiPsGetOpcodeName (WalkState->Opcode)); - - - switch (WalkState->Opcode) - { - case AML_MATCH_OP: - /* - * Match (SearchPkg[0], MatchOp1[1], MatchObj1[2], - * MatchOp2[3], MatchObj2[4], StartIndex[5]) - */ - - /* Validate both Match Term Operators (MTR, MEQ, etc.) */ - - if ((Operand[1]->Integer.Value > MAX_MATCH_OPERATOR) || - (Operand[3]->Integer.Value > MAX_MATCH_OPERATOR)) - { - ACPI_ERROR ((AE_INFO, "Match operator out of range")); - Status = AE_AML_OPERAND_VALUE; - goto Cleanup; - } - - /* Get the package StartIndex, validate against the package length */ - - Index = Operand[5]->Integer.Value; - if (Index >= Operand[0]->Package.Count) - { - ACPI_ERROR ((AE_INFO, - "Index (%X%8.8X) beyond package end (%X)", - ACPI_FORMAT_UINT64 (Index), Operand[0]->Package.Count)); - Status = AE_AML_PACKAGE_LIMIT; - goto Cleanup; - } - - /* Create an integer for the return value */ - /* Default return value is ACPI_INTEGER_MAX if no match found */ - - ReturnDesc = AcpiUtCreateIntegerObject (ACPI_INTEGER_MAX); - if (!ReturnDesc) - { - Status = AE_NO_MEMORY; - goto Cleanup; - - } - - /* - * Examine each element until a match is found. Both match conditions - * must be satisfied for a match to occur. Within the loop, - * "continue" signifies that the current element does not match - * and the next should be examined. - * - * Upon finding a match, the loop will terminate via "break" at - * the bottom. If it terminates "normally", MatchValue will be - * ACPI_INTEGER_MAX (Ones) (its initial value) indicating that no - * match was found. - */ - for ( ; Index < Operand[0]->Package.Count; Index++) - { - /* Get the current package element */ - - ThisElement = Operand[0]->Package.Elements[Index]; - - /* Treat any uninitialized (NULL) elements as non-matching */ - - if (!ThisElement) - { - continue; - } - - /* - * Both match conditions must be satisfied. Execution of a continue - * (proceed to next iteration of enclosing for loop) signifies a - * non-match. - */ - if (!AcpiExDoMatch ((UINT32) Operand[1]->Integer.Value, - ThisElement, Operand[2])) - { - continue; - } - - if (!AcpiExDoMatch ((UINT32) Operand[3]->Integer.Value, - ThisElement, Operand[4])) - { - continue; - } - - /* Match found: Index is the return value */ - - ReturnDesc->Integer.Value = Index; - break; - } - break; - - - case AML_LOAD_TABLE_OP: - - Status = AcpiExLoadTableOp (WalkState, &ReturnDesc); - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Unknown AML opcode %X", - WalkState->Opcode)); - Status = AE_AML_BAD_OPCODE; - goto Cleanup; - } - - -Cleanup: - - /* Delete return object on error */ - - if (ACPI_FAILURE (Status)) - { - AcpiUtRemoveReference (ReturnDesc); - } - - /* Save return object on success */ - - else - { - WalkState->ResultObj = ReturnDesc; - } - - return_ACPI_STATUS (Status); -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exprep.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exprep.c deleted file mode 100644 index c915361e8..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exprep.c +++ /dev/null @@ -1,686 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exprep - ACPI AML (p-code) execution - field prep utilities - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXPREP_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" -#include "amlcode.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exprep") - -/* Local prototypes */ - -static UINT32 -AcpiExDecodeFieldAccess ( - ACPI_OPERAND_OBJECT *ObjDesc, - UINT8 FieldFlags, - UINT32 *ReturnByteAlignment); - - -#ifdef ACPI_UNDER_DEVELOPMENT - -static UINT32 -AcpiExGenerateAccess ( - UINT32 FieldBitOffset, - UINT32 FieldBitLength, - UINT32 RegionLength); - -/******************************************************************************* - * - * FUNCTION: AcpiExGenerateAccess - * - * PARAMETERS: FieldBitOffset - Start of field within parent region/buffer - * FieldBitLength - Length of field in bits - * RegionLength - Length of parent in bytes - * - * RETURN: Field granularity (8, 16, 32 or 64) and - * ByteAlignment (1, 2, 3, or 4) - * - * DESCRIPTION: Generate an optimal access width for fields defined with the - * AnyAcc keyword. - * - * NOTE: Need to have the RegionLength in order to check for boundary - * conditions (end-of-region). However, the RegionLength is a deferred - * operation. Therefore, to complete this implementation, the generation - * of this access width must be deferred until the region length has - * been evaluated. - * - ******************************************************************************/ - -static UINT32 -AcpiExGenerateAccess ( - UINT32 FieldBitOffset, - UINT32 FieldBitLength, - UINT32 RegionLength) -{ - UINT32 FieldByteLength; - UINT32 FieldByteOffset; - UINT32 FieldByteEndOffset; - UINT32 AccessByteWidth; - UINT32 FieldStartOffset; - UINT32 FieldEndOffset; - UINT32 MinimumAccessWidth = 0xFFFFFFFF; - UINT32 MinimumAccesses = 0xFFFFFFFF; - UINT32 Accesses; - - - ACPI_FUNCTION_TRACE (ExGenerateAccess); - - - /* Round Field start offset and length to "minimal" byte boundaries */ - - FieldByteOffset = ACPI_DIV_8 (ACPI_ROUND_DOWN (FieldBitOffset, 8)); - FieldByteEndOffset = ACPI_DIV_8 (ACPI_ROUND_UP (FieldBitLength + - FieldBitOffset, 8)); - FieldByteLength = FieldByteEndOffset - FieldByteOffset; - - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Bit length %d, Bit offset %d\n", - FieldBitLength, FieldBitOffset)); - - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Byte Length %d, Byte Offset %d, End Offset %d\n", - FieldByteLength, FieldByteOffset, FieldByteEndOffset)); - - /* - * Iterative search for the maximum access width that is both aligned - * and does not go beyond the end of the region - * - * Start at ByteAcc and work upwards to QwordAcc max. (1,2,4,8 bytes) - */ - for (AccessByteWidth = 1; AccessByteWidth <= 8; AccessByteWidth <<= 1) - { - /* - * 1) Round end offset up to next access boundary and make sure that - * this does not go beyond the end of the parent region. - * 2) When the Access width is greater than the FieldByteLength, we - * are done. (This does not optimize for the perfectly aligned - * case yet). - */ - if (ACPI_ROUND_UP (FieldByteEndOffset, AccessByteWidth) <= RegionLength) - { - FieldStartOffset = - ACPI_ROUND_DOWN (FieldByteOffset, AccessByteWidth) / - AccessByteWidth; - - FieldEndOffset = - ACPI_ROUND_UP ((FieldByteLength + FieldByteOffset), - AccessByteWidth) / AccessByteWidth; - - Accesses = FieldEndOffset - FieldStartOffset; - - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "AccessWidth %d end is within region\n", AccessByteWidth)); - - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Field Start %d, Field End %d -- requires %d accesses\n", - FieldStartOffset, FieldEndOffset, Accesses)); - - /* Single access is optimal */ - - if (Accesses <= 1) - { - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Entire field can be accessed with one operation of size %d\n", - AccessByteWidth)); - return_VALUE (AccessByteWidth); - } - - /* - * Fits in the region, but requires more than one read/write. - * try the next wider access on next iteration - */ - if (Accesses < MinimumAccesses) - { - MinimumAccesses = Accesses; - MinimumAccessWidth = AccessByteWidth; - } - } - else - { - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "AccessWidth %d end is NOT within region\n", AccessByteWidth)); - if (AccessByteWidth == 1) - { - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Field goes beyond end-of-region!\n")); - - /* Field does not fit in the region at all */ - - return_VALUE (0); - } - - /* - * This width goes beyond the end-of-region, back off to - * previous access - */ - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Backing off to previous optimal access width of %d\n", - MinimumAccessWidth)); - return_VALUE (MinimumAccessWidth); - } - } - - /* - * Could not read/write field with one operation, - * just use max access width - */ - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Cannot access field in one operation, using width 8\n")); - return_VALUE (8); -} -#endif /* ACPI_UNDER_DEVELOPMENT */ - - -/******************************************************************************* - * - * FUNCTION: AcpiExDecodeFieldAccess - * - * PARAMETERS: ObjDesc - Field object - * FieldFlags - Encoded fieldflags (contains access bits) - * ReturnByteAlignment - Where the byte alignment is returned - * - * RETURN: Field granularity (8, 16, 32 or 64) and - * ByteAlignment (1, 2, 3, or 4) - * - * DESCRIPTION: Decode the AccessType bits of a field definition. - * - ******************************************************************************/ - -static UINT32 -AcpiExDecodeFieldAccess ( - ACPI_OPERAND_OBJECT *ObjDesc, - UINT8 FieldFlags, - UINT32 *ReturnByteAlignment) -{ - UINT32 Access; - UINT32 ByteAlignment; - UINT32 BitLength; - - - ACPI_FUNCTION_TRACE (ExDecodeFieldAccess); - - - Access = (FieldFlags & AML_FIELD_ACCESS_TYPE_MASK); - - switch (Access) - { - case AML_FIELD_ACCESS_ANY: - -#ifdef ACPI_UNDER_DEVELOPMENT - ByteAlignment = - AcpiExGenerateAccess (ObjDesc->CommonField.StartFieldBitOffset, - ObjDesc->CommonField.BitLength, - 0xFFFFFFFF /* Temp until we pass RegionLength as parameter */); - BitLength = ByteAlignment * 8; -#endif - - ByteAlignment = 1; - BitLength = 8; - break; - - case AML_FIELD_ACCESS_BYTE: - case AML_FIELD_ACCESS_BUFFER: /* ACPI 2.0 (SMBus Buffer) */ - ByteAlignment = 1; - BitLength = 8; - break; - - case AML_FIELD_ACCESS_WORD: - ByteAlignment = 2; - BitLength = 16; - break; - - case AML_FIELD_ACCESS_DWORD: - ByteAlignment = 4; - BitLength = 32; - break; - - case AML_FIELD_ACCESS_QWORD: /* ACPI 2.0 */ - ByteAlignment = 8; - BitLength = 64; - break; - - default: - /* Invalid field access type */ - - ACPI_ERROR ((AE_INFO, - "Unknown field access type %X", - Access)); - return_UINT32 (0); - } - - if (ObjDesc->Common.Type == ACPI_TYPE_BUFFER_FIELD) - { - /* - * BufferField access can be on any byte boundary, so the - * ByteAlignment is always 1 byte -- regardless of any ByteAlignment - * implied by the field access type. - */ - ByteAlignment = 1; - } - - *ReturnByteAlignment = ByteAlignment; - return_UINT32 (BitLength); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExPrepCommonFieldObject - * - * PARAMETERS: ObjDesc - The field object - * FieldFlags - Access, LockRule, and UpdateRule. - * The format of a FieldFlag is described - * in the ACPI specification - * FieldAttribute - Special attributes (not used) - * FieldBitPosition - Field start position - * FieldBitLength - Field length in number of bits - * - * RETURN: Status - * - * DESCRIPTION: Initialize the areas of the field object that are common - * to the various types of fields. Note: This is very "sensitive" - * code because we are solving the general case for field - * alignment. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExPrepCommonFieldObject ( - ACPI_OPERAND_OBJECT *ObjDesc, - UINT8 FieldFlags, - UINT8 FieldAttribute, - UINT32 FieldBitPosition, - UINT32 FieldBitLength) -{ - UINT32 AccessBitWidth; - UINT32 ByteAlignment; - UINT32 NearestByteAddress; - - - ACPI_FUNCTION_TRACE (ExPrepCommonFieldObject); - - - /* - * Note: the structure being initialized is the - * ACPI_COMMON_FIELD_INFO; No structure fields outside of the common - * area are initialized by this procedure. - */ - ObjDesc->CommonField.FieldFlags = FieldFlags; - ObjDesc->CommonField.Attribute = FieldAttribute; - ObjDesc->CommonField.BitLength = FieldBitLength; - - /* - * Decode the access type so we can compute offsets. The access type gives - * two pieces of information - the width of each field access and the - * necessary ByteAlignment (address granularity) of the access. - * - * For AnyAcc, the AccessBitWidth is the largest width that is both - * necessary and possible in an attempt to access the whole field in one - * I/O operation. However, for AnyAcc, the ByteAlignment is always one - * byte. - * - * For all Buffer Fields, the ByteAlignment is always one byte. - * - * For all other access types (Byte, Word, Dword, Qword), the Bitwidth is - * the same (equivalent) as the ByteAlignment. - */ - AccessBitWidth = AcpiExDecodeFieldAccess (ObjDesc, FieldFlags, - &ByteAlignment); - if (!AccessBitWidth) - { - return_ACPI_STATUS (AE_AML_OPERAND_VALUE); - } - - /* Setup width (access granularity) fields */ - - ObjDesc->CommonField.AccessByteWidth = (UINT8) - ACPI_DIV_8 (AccessBitWidth); /* 1, 2, 4, 8 */ - - ObjDesc->CommonField.AccessBitWidth = (UINT8) AccessBitWidth; - - /* - * BaseByteOffset is the address of the start of the field within the - * region. It is the byte address of the first *datum* (field-width data - * unit) of the field. (i.e., the first datum that contains at least the - * first *bit* of the field.) - * - * Note: ByteAlignment is always either equal to the AccessBitWidth or 8 - * (Byte access), and it defines the addressing granularity of the parent - * region or buffer. - */ - NearestByteAddress = - ACPI_ROUND_BITS_DOWN_TO_BYTES (FieldBitPosition); - ObjDesc->CommonField.BaseByteOffset = (UINT32) - ACPI_ROUND_DOWN (NearestByteAddress, ByteAlignment); - - /* - * StartFieldBitOffset is the offset of the first bit of the field within - * a field datum. - */ - ObjDesc->CommonField.StartFieldBitOffset = (UINT8) - (FieldBitPosition - ACPI_MUL_8 (ObjDesc->CommonField.BaseByteOffset)); - - /* - * Does the entire field fit within a single field access element? (datum) - * (i.e., without crossing a datum boundary) - */ - if ((ObjDesc->CommonField.StartFieldBitOffset + FieldBitLength) <= - (UINT16) AccessBitWidth) - { - ObjDesc->Common.Flags |= AOPOBJ_SINGLE_DATUM; - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExPrepFieldValue - * - * PARAMETERS: Info - Contains all field creation info - * - * RETURN: Status - * - * DESCRIPTION: Construct an ACPI_OPERAND_OBJECT of type DefField and - * connect it to the parent Node. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExPrepFieldValue ( - ACPI_CREATE_FIELD_INFO *Info) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT *SecondDesc = NULL; - UINT32 Type; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (ExPrepFieldValue); - - - /* Parameter validation */ - - if (Info->FieldType != ACPI_TYPE_LOCAL_INDEX_FIELD) - { - if (!Info->RegionNode) - { - ACPI_ERROR ((AE_INFO, "Null RegionNode")); - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } - - Type = AcpiNsGetType (Info->RegionNode); - if (Type != ACPI_TYPE_REGION) - { - ACPI_ERROR ((AE_INFO, - "Needed Region, found type %X (%s)", - Type, AcpiUtGetTypeName (Type))); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - } - - /* Allocate a new field object */ - - ObjDesc = AcpiUtCreateInternalObject (Info->FieldType); - if (!ObjDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Initialize areas of the object that are common to all fields */ - - ObjDesc->CommonField.Node = Info->FieldNode; - Status = AcpiExPrepCommonFieldObject (ObjDesc, Info->FieldFlags, - Info->Attribute, Info->FieldBitPosition, Info->FieldBitLength); - if (ACPI_FAILURE (Status)) - { - AcpiUtDeleteObjectDesc (ObjDesc); - return_ACPI_STATUS (Status); - } - - /* Initialize areas of the object that are specific to the field type */ - - switch (Info->FieldType) - { - case ACPI_TYPE_LOCAL_REGION_FIELD: - - ObjDesc->Field.RegionObj = AcpiNsGetAttachedObject (Info->RegionNode); - - /* An additional reference for the container */ - - AcpiUtAddReference (ObjDesc->Field.RegionObj); - - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "RegionField: BitOff %X, Off %X, Gran %X, Region %p\n", - ObjDesc->Field.StartFieldBitOffset, ObjDesc->Field.BaseByteOffset, - ObjDesc->Field.AccessByteWidth, ObjDesc->Field.RegionObj)); - break; - - - case ACPI_TYPE_LOCAL_BANK_FIELD: - - ObjDesc->BankField.Value = Info->BankValue; - ObjDesc->BankField.RegionObj = AcpiNsGetAttachedObject ( - Info->RegionNode); - ObjDesc->BankField.BankObj = AcpiNsGetAttachedObject ( - Info->RegisterNode); - - /* An additional reference for the attached objects */ - - AcpiUtAddReference (ObjDesc->BankField.RegionObj); - AcpiUtAddReference (ObjDesc->BankField.BankObj); - - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Bank Field: BitOff %X, Off %X, Gran %X, Region %p, BankReg %p\n", - ObjDesc->BankField.StartFieldBitOffset, - ObjDesc->BankField.BaseByteOffset, - ObjDesc->Field.AccessByteWidth, - ObjDesc->BankField.RegionObj, - ObjDesc->BankField.BankObj)); - - /* - * Remember location in AML stream of the field unit - * opcode and operands -- since the BankValue - * operands must be evaluated. - */ - SecondDesc = ObjDesc->Common.NextObject; - SecondDesc->Extra.AmlStart = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Info->DataRegisterNode)->Named.Data; - SecondDesc->Extra.AmlLength = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Info->DataRegisterNode)->Named.Length; - - break; - - - case ACPI_TYPE_LOCAL_INDEX_FIELD: - - /* Get the Index and Data registers */ - - ObjDesc->IndexField.IndexObj = AcpiNsGetAttachedObject ( - Info->RegisterNode); - ObjDesc->IndexField.DataObj = AcpiNsGetAttachedObject ( - Info->DataRegisterNode); - - if (!ObjDesc->IndexField.DataObj || !ObjDesc->IndexField.IndexObj) - { - ACPI_ERROR ((AE_INFO, "Null Index Object during field prep")); - AcpiUtDeleteObjectDesc (ObjDesc); - return_ACPI_STATUS (AE_AML_INTERNAL); - } - - /* An additional reference for the attached objects */ - - AcpiUtAddReference (ObjDesc->IndexField.DataObj); - AcpiUtAddReference (ObjDesc->IndexField.IndexObj); - - /* - * April 2006: Changed to match MS behavior - * - * The value written to the Index register is the byte offset of the - * target field in units of the granularity of the IndexField - * - * Previously, the value was calculated as an index in terms of the - * width of the Data register, as below: - * - * ObjDesc->IndexField.Value = (UINT32) - * (Info->FieldBitPosition / ACPI_MUL_8 ( - * ObjDesc->Field.AccessByteWidth)); - * - * February 2006: Tried value as a byte offset: - * ObjDesc->IndexField.Value = (UINT32) - * ACPI_DIV_8 (Info->FieldBitPosition); - */ - ObjDesc->IndexField.Value = (UINT32) ACPI_ROUND_DOWN ( - ACPI_DIV_8 (Info->FieldBitPosition), - ObjDesc->IndexField.AccessByteWidth); - - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "IndexField: BitOff %X, Off %X, Value %X, Gran %X, Index %p, Data %p\n", - ObjDesc->IndexField.StartFieldBitOffset, - ObjDesc->IndexField.BaseByteOffset, - ObjDesc->IndexField.Value, - ObjDesc->Field.AccessByteWidth, - ObjDesc->IndexField.IndexObj, - ObjDesc->IndexField.DataObj)); - break; - - default: - /* No other types should get here */ - break; - } - - /* - * Store the constructed descriptor (ObjDesc) into the parent Node, - * preserving the current type of that NamedObj. - */ - Status = AcpiNsAttachObject (Info->FieldNode, ObjDesc, - AcpiNsGetType (Info->FieldNode)); - - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Set NamedObj %p [%4.4s], ObjDesc %p\n", - Info->FieldNode, AcpiUtGetNodeName (Info->FieldNode), ObjDesc)); - - /* Remove local reference to the object */ - - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exregion.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exregion.c deleted file mode 100644 index 5a37be259..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exregion.c +++ /dev/null @@ -1,630 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exregion - ACPI default OpRegion (address space) handlers - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __EXREGION_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exregion") - - -/******************************************************************************* - * - * FUNCTION: AcpiExSystemMemorySpaceHandler - * - * PARAMETERS: Function - Read or Write operation - * Address - Where in the space to read or write - * BitWidth - Field width in bits (8, 16, or 32) - * Value - Pointer to in or out value - * HandlerContext - Pointer to Handler's context - * RegionContext - Pointer to context specific to the - * accessed region - * - * RETURN: Status - * - * DESCRIPTION: Handler for the System Memory address space (Op Region) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExSystemMemorySpaceHandler ( - UINT32 Function, - ACPI_PHYSICAL_ADDRESS Address, - UINT32 BitWidth, - ACPI_INTEGER *Value, - void *HandlerContext, - void *RegionContext) -{ - ACPI_STATUS Status = AE_OK; - void *LogicalAddrPtr = NULL; - ACPI_MEM_SPACE_CONTEXT *MemInfo = RegionContext; - UINT32 Length; - ACPI_SIZE MapLength; - ACPI_SIZE PageBoundaryMapLength; -#ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED - UINT32 Remainder; -#endif - - - ACPI_FUNCTION_TRACE (ExSystemMemorySpaceHandler); - - - /* Validate and translate the bit width */ - - switch (BitWidth) - { - case 8: - Length = 1; - break; - - case 16: - Length = 2; - break; - - case 32: - Length = 4; - break; - - case 64: - Length = 8; - break; - - default: - ACPI_ERROR ((AE_INFO, "Invalid SystemMemory width %d", - BitWidth)); - return_ACPI_STATUS (AE_AML_OPERAND_VALUE); - } - -#ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED - /* - * Hardware does not support non-aligned data transfers, we must verify - * the request. - */ - (void) AcpiUtShortDivide ((ACPI_INTEGER) Address, Length, NULL, &Remainder); - if (Remainder != 0) - { - return_ACPI_STATUS (AE_AML_ALIGNMENT); - } -#endif - - /* - * Does the request fit into the cached memory mapping? - * Is 1) Address below the current mapping? OR - * 2) Address beyond the current mapping? - */ - if ((Address < MemInfo->MappedPhysicalAddress) || - (((ACPI_INTEGER) Address + Length) > - ((ACPI_INTEGER) - MemInfo->MappedPhysicalAddress + MemInfo->MappedLength))) - { - /* - * The request cannot be resolved by the current memory mapping; - * Delete the existing mapping and create a new one. - */ - if (MemInfo->MappedLength) - { - /* Valid mapping, delete it */ - - AcpiOsUnmapMemory (MemInfo->MappedLogicalAddress, - MemInfo->MappedLength); - } - - /* - * October 2009: Attempt to map from the requested address to the - * end of the region. However, we will never map more than one - * page, nor will we cross a page boundary. - */ - MapLength = (ACPI_SIZE) - ((MemInfo->Address + MemInfo->Length) - Address); - - /* - * If mapping the entire remaining portion of the region will cross - * a page boundary, just map up to the page boundary, do not cross. - * On some systems, crossing a page boundary while mapping regions - * can cause warnings if the pages have different attributes - * due to resource management. - * - * This has the added benefit of constraining a single mapping to - * one page, which is similar to the original code that used a 4k - * maximum window. - */ - PageBoundaryMapLength = - ACPI_ROUND_UP (Address, ACPI_DEFAULT_PAGE_SIZE) - Address; - if (PageBoundaryMapLength == 0) - { - PageBoundaryMapLength = ACPI_DEFAULT_PAGE_SIZE; - } - - if (MapLength > PageBoundaryMapLength) - { - MapLength = PageBoundaryMapLength; - } - - /* Create a new mapping starting at the address given */ - - MemInfo->MappedLogicalAddress = AcpiOsMapMemory ( - (ACPI_PHYSICAL_ADDRESS) Address, MapLength); - if (!MemInfo->MappedLogicalAddress) - { - ACPI_ERROR ((AE_INFO, - "Could not map memory at %8.8X%8.8X, size %X", - ACPI_FORMAT_NATIVE_UINT (Address), (UINT32) MapLength)); - MemInfo->MappedLength = 0; - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Save the physical address and mapping size */ - - MemInfo->MappedPhysicalAddress = Address; - MemInfo->MappedLength = MapLength; - } - - /* - * Generate a logical pointer corresponding to the address we want to - * access - */ - LogicalAddrPtr = MemInfo->MappedLogicalAddress + - ((ACPI_INTEGER) Address - (ACPI_INTEGER) MemInfo->MappedPhysicalAddress); - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "System-Memory (width %d) R/W %d Address=%8.8X%8.8X\n", - BitWidth, Function, ACPI_FORMAT_NATIVE_UINT (Address))); - - /* - * Perform the memory read or write - * - * Note: For machines that do not support non-aligned transfers, the target - * address was checked for alignment above. We do not attempt to break the - * transfer up into smaller (byte-size) chunks because the AML specifically - * asked for a transfer width that the hardware may require. - */ - switch (Function) - { - case ACPI_READ: - - *Value = 0; - switch (BitWidth) - { - case 8: - *Value = (ACPI_INTEGER) ACPI_GET8 (LogicalAddrPtr); - break; - - case 16: - *Value = (ACPI_INTEGER) ACPI_GET16 (LogicalAddrPtr); - break; - - case 32: - *Value = (ACPI_INTEGER) ACPI_GET32 (LogicalAddrPtr); - break; - - case 64: - *Value = (ACPI_INTEGER) ACPI_GET64 (LogicalAddrPtr); - break; - - default: - /* BitWidth was already validated */ - break; - } - break; - - case ACPI_WRITE: - - switch (BitWidth) - { - case 8: - ACPI_SET8 (LogicalAddrPtr) = (UINT8) *Value; - break; - - case 16: - ACPI_SET16 (LogicalAddrPtr) = (UINT16) *Value; - break; - - case 32: - ACPI_SET32 ( LogicalAddrPtr) = (UINT32) *Value; - break; - - case 64: - ACPI_SET64 (LogicalAddrPtr) = (UINT64) *Value; - break; - - default: - /* BitWidth was already validated */ - break; - } - break; - - default: - Status = AE_BAD_PARAMETER; - break; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExSystemIoSpaceHandler - * - * PARAMETERS: Function - Read or Write operation - * Address - Where in the space to read or write - * BitWidth - Field width in bits (8, 16, or 32) - * Value - Pointer to in or out value - * HandlerContext - Pointer to Handler's context - * RegionContext - Pointer to context specific to the - * accessed region - * - * RETURN: Status - * - * DESCRIPTION: Handler for the System IO address space (Op Region) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExSystemIoSpaceHandler ( - UINT32 Function, - ACPI_PHYSICAL_ADDRESS Address, - UINT32 BitWidth, - ACPI_INTEGER *Value, - void *HandlerContext, - void *RegionContext) -{ - ACPI_STATUS Status = AE_OK; - UINT32 Value32; - - - ACPI_FUNCTION_TRACE (ExSystemIoSpaceHandler); - - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "System-IO (width %d) R/W %d Address=%8.8X%8.8X\n", - BitWidth, Function, ACPI_FORMAT_NATIVE_UINT (Address))); - - /* Decode the function parameter */ - - switch (Function) - { - case ACPI_READ: - - Status = AcpiHwReadPort ((ACPI_IO_ADDRESS) Address, - &Value32, BitWidth); - *Value = Value32; - break; - - case ACPI_WRITE: - - Status = AcpiHwWritePort ((ACPI_IO_ADDRESS) Address, - (UINT32) *Value, BitWidth); - break; - - default: - Status = AE_BAD_PARAMETER; - break; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExPciConfigSpaceHandler - * - * PARAMETERS: Function - Read or Write operation - * Address - Where in the space to read or write - * BitWidth - Field width in bits (8, 16, or 32) - * Value - Pointer to in or out value - * HandlerContext - Pointer to Handler's context - * RegionContext - Pointer to context specific to the - * accessed region - * - * RETURN: Status - * - * DESCRIPTION: Handler for the PCI Config address space (Op Region) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExPciConfigSpaceHandler ( - UINT32 Function, - ACPI_PHYSICAL_ADDRESS Address, - UINT32 BitWidth, - ACPI_INTEGER *Value, - void *HandlerContext, - void *RegionContext) -{ - ACPI_STATUS Status = AE_OK; - ACPI_PCI_ID *PciId; - UINT16 PciRegister; - - - ACPI_FUNCTION_TRACE (ExPciConfigSpaceHandler); - - - /* - * The arguments to AcpiOs(Read|Write)PciConfiguration are: - * - * PciSegment is the PCI bus segment range 0-31 - * PciBus is the PCI bus number range 0-255 - * PciDevice is the PCI device number range 0-31 - * PciFunction is the PCI device function number - * PciRegister is the Config space register range 0-255 bytes - * - * Value - input value for write, output address for read - * - */ - PciId = (ACPI_PCI_ID *) RegionContext; - PciRegister = (UINT16) (UINT32) Address; - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Pci-Config %d (%d) Seg(%04x) Bus(%04x) Dev(%04x) Func(%04x) Reg(%04x)\n", - Function, BitWidth, PciId->Segment, PciId->Bus, PciId->Device, - PciId->Function, PciRegister)); - - switch (Function) - { - case ACPI_READ: - - *Value = 0; - Status = AcpiOsReadPciConfiguration (PciId, PciRegister, - Value, BitWidth); - break; - - case ACPI_WRITE: - - Status = AcpiOsWritePciConfiguration (PciId, PciRegister, - *Value, BitWidth); - break; - - default: - - Status = AE_BAD_PARAMETER; - break; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExCmosSpaceHandler - * - * PARAMETERS: Function - Read or Write operation - * Address - Where in the space to read or write - * BitWidth - Field width in bits (8, 16, or 32) - * Value - Pointer to in or out value - * HandlerContext - Pointer to Handler's context - * RegionContext - Pointer to context specific to the - * accessed region - * - * RETURN: Status - * - * DESCRIPTION: Handler for the CMOS address space (Op Region) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExCmosSpaceHandler ( - UINT32 Function, - ACPI_PHYSICAL_ADDRESS Address, - UINT32 BitWidth, - ACPI_INTEGER *Value, - void *HandlerContext, - void *RegionContext) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (ExCmosSpaceHandler); - - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExPciBarSpaceHandler - * - * PARAMETERS: Function - Read or Write operation - * Address - Where in the space to read or write - * BitWidth - Field width in bits (8, 16, or 32) - * Value - Pointer to in or out value - * HandlerContext - Pointer to Handler's context - * RegionContext - Pointer to context specific to the - * accessed region - * - * RETURN: Status - * - * DESCRIPTION: Handler for the PCI BarTarget address space (Op Region) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExPciBarSpaceHandler ( - UINT32 Function, - ACPI_PHYSICAL_ADDRESS Address, - UINT32 BitWidth, - ACPI_INTEGER *Value, - void *HandlerContext, - void *RegionContext) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (ExPciBarSpaceHandler); - - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExDataTableSpaceHandler - * - * PARAMETERS: Function - Read or Write operation - * Address - Where in the space to read or write - * BitWidth - Field width in bits (8, 16, or 32) - * Value - Pointer to in or out value - * HandlerContext - Pointer to Handler's context - * RegionContext - Pointer to context specific to the - * accessed region - * - * RETURN: Status - * - * DESCRIPTION: Handler for the Data Table address space (Op Region) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExDataTableSpaceHandler ( - UINT32 Function, - ACPI_PHYSICAL_ADDRESS Address, - UINT32 BitWidth, - ACPI_INTEGER *Value, - void *HandlerContext, - void *RegionContext) -{ - ACPI_FUNCTION_TRACE (ExDataTableSpaceHandler); - - - /* Perform the memory read or write */ - - switch (Function) - { - case ACPI_READ: - - ACPI_MEMCPY (ACPI_CAST_PTR (char, Value), ACPI_PHYSADDR_TO_PTR (Address), - ACPI_DIV_8 (BitWidth)); - break; - - case ACPI_WRITE: - default: - - return_ACPI_STATUS (AE_SUPPORT); - } - - return_ACPI_STATUS (AE_OK); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exresnte.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exresnte.c deleted file mode 100644 index 5481bc899..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exresnte.c +++ /dev/null @@ -1,374 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exresnte - AML Interpreter object resolution - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXRESNTE_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exresnte") - - -/******************************************************************************* - * - * FUNCTION: AcpiExResolveNodeToValue - * - * PARAMETERS: ObjectPtr - Pointer to a location that contains - * a pointer to a NS node, and will receive a - * pointer to the resolved object. - * WalkState - Current state. Valid only if executing AML - * code. NULL if simply resolving an object - * - * RETURN: Status - * - * DESCRIPTION: Resolve a Namespace node to a valued object - * - * Note: for some of the data types, the pointer attached to the Node - * can be either a pointer to an actual internal object or a pointer into the - * AML stream itself. These types are currently: - * - * ACPI_TYPE_INTEGER - * ACPI_TYPE_STRING - * ACPI_TYPE_BUFFER - * ACPI_TYPE_MUTEX - * ACPI_TYPE_PACKAGE - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExResolveNodeToValue ( - ACPI_NAMESPACE_NODE **ObjectPtr, - ACPI_WALK_STATE *WalkState) - -{ - ACPI_STATUS Status = AE_OK; - ACPI_OPERAND_OBJECT *SourceDesc; - ACPI_OPERAND_OBJECT *ObjDesc = NULL; - ACPI_NAMESPACE_NODE *Node; - ACPI_OBJECT_TYPE EntryType; - - - ACPI_FUNCTION_TRACE (ExResolveNodeToValue); - - - /* - * The stack pointer points to a ACPI_NAMESPACE_NODE (Node). Get the - * object that is attached to the Node. - */ - Node = *ObjectPtr; - SourceDesc = AcpiNsGetAttachedObject (Node); - EntryType = AcpiNsGetType ((ACPI_HANDLE) Node); - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Entry=%p SourceDesc=%p [%s]\n", - Node, SourceDesc, AcpiUtGetTypeName (EntryType))); - - if ((EntryType == ACPI_TYPE_LOCAL_ALIAS) || - (EntryType == ACPI_TYPE_LOCAL_METHOD_ALIAS)) - { - /* There is always exactly one level of indirection */ - - Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Node->Object); - SourceDesc = AcpiNsGetAttachedObject (Node); - EntryType = AcpiNsGetType ((ACPI_HANDLE) Node); - *ObjectPtr = Node; - } - - /* - * Several object types require no further processing: - * 1) Device/Thermal objects don't have a "real" subobject, return the Node - * 2) Method locals and arguments have a pseudo-Node - * 3) 10/2007: Added method type to assist with Package construction. - */ - if ((EntryType == ACPI_TYPE_DEVICE) || - (EntryType == ACPI_TYPE_THERMAL) || - (EntryType == ACPI_TYPE_METHOD) || - (Node->Flags & (ANOBJ_METHOD_ARG | ANOBJ_METHOD_LOCAL))) - { - return_ACPI_STATUS (AE_OK); - } - - if (!SourceDesc) - { - ACPI_ERROR ((AE_INFO, "No object attached to node %p", - Node)); - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } - - /* - * Action is based on the type of the Node, which indicates the type - * of the attached object or pointer - */ - switch (EntryType) - { - case ACPI_TYPE_PACKAGE: - - if (SourceDesc->Common.Type != ACPI_TYPE_PACKAGE) - { - ACPI_ERROR ((AE_INFO, "Object not a Package, type %s", - AcpiUtGetObjectTypeName (SourceDesc))); - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - Status = AcpiDsGetPackageArguments (SourceDesc); - if (ACPI_SUCCESS (Status)) - { - /* Return an additional reference to the object */ - - ObjDesc = SourceDesc; - AcpiUtAddReference (ObjDesc); - } - break; - - - case ACPI_TYPE_BUFFER: - - if (SourceDesc->Common.Type != ACPI_TYPE_BUFFER) - { - ACPI_ERROR ((AE_INFO, "Object not a Buffer, type %s", - AcpiUtGetObjectTypeName (SourceDesc))); - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - Status = AcpiDsGetBufferArguments (SourceDesc); - if (ACPI_SUCCESS (Status)) - { - /* Return an additional reference to the object */ - - ObjDesc = SourceDesc; - AcpiUtAddReference (ObjDesc); - } - break; - - - case ACPI_TYPE_STRING: - - if (SourceDesc->Common.Type != ACPI_TYPE_STRING) - { - ACPI_ERROR ((AE_INFO, "Object not a String, type %s", - AcpiUtGetObjectTypeName (SourceDesc))); - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - /* Return an additional reference to the object */ - - ObjDesc = SourceDesc; - AcpiUtAddReference (ObjDesc); - break; - - - case ACPI_TYPE_INTEGER: - - if (SourceDesc->Common.Type != ACPI_TYPE_INTEGER) - { - ACPI_ERROR ((AE_INFO, "Object not a Integer, type %s", - AcpiUtGetObjectTypeName (SourceDesc))); - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - /* Return an additional reference to the object */ - - ObjDesc = SourceDesc; - AcpiUtAddReference (ObjDesc); - break; - - - case ACPI_TYPE_BUFFER_FIELD: - case ACPI_TYPE_LOCAL_REGION_FIELD: - case ACPI_TYPE_LOCAL_BANK_FIELD: - case ACPI_TYPE_LOCAL_INDEX_FIELD: - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "FieldRead Node=%p SourceDesc=%p Type=%X\n", - Node, SourceDesc, EntryType)); - - Status = AcpiExReadDataFromField (WalkState, SourceDesc, &ObjDesc); - break; - - /* For these objects, just return the object attached to the Node */ - - case ACPI_TYPE_MUTEX: - case ACPI_TYPE_POWER: - case ACPI_TYPE_PROCESSOR: - case ACPI_TYPE_EVENT: - case ACPI_TYPE_REGION: - - /* Return an additional reference to the object */ - - ObjDesc = SourceDesc; - AcpiUtAddReference (ObjDesc); - break; - - /* TYPE_ANY is untyped, and thus there is no object associated with it */ - - case ACPI_TYPE_ANY: - - ACPI_ERROR ((AE_INFO, - "Untyped entry %p, no attached object!", Node)); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); /* Cannot be AE_TYPE */ - - - case ACPI_TYPE_LOCAL_REFERENCE: - - switch (SourceDesc->Reference.Class) - { - case ACPI_REFCLASS_TABLE: /* This is a DdbHandle */ - case ACPI_REFCLASS_REFOF: - case ACPI_REFCLASS_INDEX: - - /* Return an additional reference to the object */ - - ObjDesc = SourceDesc; - AcpiUtAddReference (ObjDesc); - break; - - default: - /* No named references are allowed here */ - - ACPI_ERROR ((AE_INFO, - "Unsupported Reference type %X", - SourceDesc->Reference.Class)); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - break; - - - default: - - /* Default case is for unknown types */ - - ACPI_ERROR ((AE_INFO, - "Node %p - Unknown object type %X", - Node, EntryType)); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - - } /* switch (EntryType) */ - - - /* Return the object descriptor */ - - *ObjectPtr = (void *) ObjDesc; - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exresolv.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exresolv.c deleted file mode 100644 index a3c8ab9b5..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exresolv.c +++ /dev/null @@ -1,652 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exresolv - AML Interpreter object resolution - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXRESOLV_C__ - -#include "acpi.h" -#include "accommon.h" -#include "amlcode.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exresolv") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiExResolveObjectToValue ( - ACPI_OPERAND_OBJECT **StackPtr, - ACPI_WALK_STATE *WalkState); - - -/******************************************************************************* - * - * FUNCTION: AcpiExResolveToValue - * - * PARAMETERS: **StackPtr - Points to entry on ObjStack, which can - * be either an (ACPI_OPERAND_OBJECT *) - * or an ACPI_HANDLE. - * WalkState - Current method state - * - * RETURN: Status - * - * DESCRIPTION: Convert Reference objects to values - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExResolveToValue ( - ACPI_OPERAND_OBJECT **StackPtr, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_PTR (ExResolveToValue, StackPtr); - - - if (!StackPtr || !*StackPtr) - { - ACPI_ERROR ((AE_INFO, "Internal - null pointer")); - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } - - /* - * The entity pointed to by the StackPtr can be either - * 1) A valid ACPI_OPERAND_OBJECT, or - * 2) A ACPI_NAMESPACE_NODE (NamedObj) - */ - if (ACPI_GET_DESCRIPTOR_TYPE (*StackPtr) == ACPI_DESC_TYPE_OPERAND) - { - Status = AcpiExResolveObjectToValue (StackPtr, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - if (!*StackPtr) - { - ACPI_ERROR ((AE_INFO, "Internal - null pointer")); - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } - } - - /* - * Object on the stack may have changed if AcpiExResolveObjectToValue() - * was called (i.e., we can't use an _else_ here.) - */ - if (ACPI_GET_DESCRIPTOR_TYPE (*StackPtr) == ACPI_DESC_TYPE_NAMED) - { - Status = AcpiExResolveNodeToValue ( - ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE, StackPtr), - WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Resolved object %p\n", *StackPtr)); - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExResolveObjectToValue - * - * PARAMETERS: StackPtr - Pointer to an internal object - * WalkState - Current method state - * - * RETURN: Status - * - * DESCRIPTION: Retrieve the value from an internal object. The Reference type - * uses the associated AML opcode to determine the value. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiExResolveObjectToValue ( - ACPI_OPERAND_OBJECT **StackPtr, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status = AE_OK; - ACPI_OPERAND_OBJECT *StackDesc; - ACPI_OPERAND_OBJECT *ObjDesc = NULL; - UINT8 RefType; - - - ACPI_FUNCTION_TRACE (ExResolveObjectToValue); - - - StackDesc = *StackPtr; - - /* This is an ACPI_OPERAND_OBJECT */ - - switch (StackDesc->Common.Type) - { - case ACPI_TYPE_LOCAL_REFERENCE: - - RefType = StackDesc->Reference.Class; - - switch (RefType) - { - case ACPI_REFCLASS_LOCAL: - case ACPI_REFCLASS_ARG: - - /* - * Get the local from the method's state info - * Note: this increments the local's object reference count - */ - Status = AcpiDsMethodDataGetValue (RefType, - StackDesc->Reference.Value, WalkState, &ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Arg/Local %X] ValueObj is %p\n", - StackDesc->Reference.Value, ObjDesc)); - - /* - * Now we can delete the original Reference Object and - * replace it with the resolved value - */ - AcpiUtRemoveReference (StackDesc); - *StackPtr = ObjDesc; - break; - - - case ACPI_REFCLASS_INDEX: - - switch (StackDesc->Reference.TargetType) - { - case ACPI_TYPE_BUFFER_FIELD: - - /* Just return - do not dereference */ - break; - - - case ACPI_TYPE_PACKAGE: - - /* If method call or CopyObject - do not dereference */ - - if ((WalkState->Opcode == AML_INT_METHODCALL_OP) || - (WalkState->Opcode == AML_COPY_OP)) - { - break; - } - - /* Otherwise, dereference the PackageIndex to a package element */ - - ObjDesc = *StackDesc->Reference.Where; - if (ObjDesc) - { - /* - * Valid object descriptor, copy pointer to return value - * (i.e., dereference the package index) - * Delete the ref object, increment the returned object - */ - AcpiUtRemoveReference (StackDesc); - AcpiUtAddReference (ObjDesc); - *StackPtr = ObjDesc; - } - else - { - /* - * A NULL object descriptor means an uninitialized element of - * the package, can't dereference it - */ - ACPI_ERROR ((AE_INFO, - "Attempt to dereference an Index to NULL package element Idx=%p", - StackDesc)); - Status = AE_AML_UNINITIALIZED_ELEMENT; - } - break; - - - default: - - /* Invalid reference object */ - - ACPI_ERROR ((AE_INFO, - "Unknown TargetType %X in Index/Reference object %p", - StackDesc->Reference.TargetType, StackDesc)); - Status = AE_AML_INTERNAL; - break; - } - break; - - - case ACPI_REFCLASS_REFOF: - case ACPI_REFCLASS_DEBUG: - case ACPI_REFCLASS_TABLE: - - /* Just leave the object as-is, do not dereference */ - - break; - - case ACPI_REFCLASS_NAME: /* Reference to a named object */ - - /* Dereference the name */ - - if ((StackDesc->Reference.Node->Type == ACPI_TYPE_DEVICE) || - (StackDesc->Reference.Node->Type == ACPI_TYPE_THERMAL)) - { - /* These node types do not have 'real' subobjects */ - - *StackPtr = (void *) StackDesc->Reference.Node; - } - else - { - /* Get the object pointed to by the namespace node */ - - *StackPtr = (StackDesc->Reference.Node)->Object; - AcpiUtAddReference (*StackPtr); - } - - AcpiUtRemoveReference (StackDesc); - break; - - default: - - ACPI_ERROR ((AE_INFO, - "Unknown Reference type %X in %p", RefType, StackDesc)); - Status = AE_AML_INTERNAL; - break; - } - break; - - - case ACPI_TYPE_BUFFER: - - Status = AcpiDsGetBufferArguments (StackDesc); - break; - - - case ACPI_TYPE_PACKAGE: - - Status = AcpiDsGetPackageArguments (StackDesc); - break; - - - case ACPI_TYPE_BUFFER_FIELD: - case ACPI_TYPE_LOCAL_REGION_FIELD: - case ACPI_TYPE_LOCAL_BANK_FIELD: - case ACPI_TYPE_LOCAL_INDEX_FIELD: - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "FieldRead SourceDesc=%p Type=%X\n", - StackDesc, StackDesc->Common.Type)); - - Status = AcpiExReadDataFromField (WalkState, StackDesc, &ObjDesc); - - /* Remove a reference to the original operand, then override */ - - AcpiUtRemoveReference (*StackPtr); - *StackPtr = (void *) ObjDesc; - break; - - default: - break; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExResolveMultiple - * - * PARAMETERS: WalkState - Current state (contains AML opcode) - * Operand - Starting point for resolution - * ReturnType - Where the object type is returned - * ReturnDesc - Where the resolved object is returned - * - * RETURN: Status - * - * DESCRIPTION: Return the base object and type. Traverse a reference list if - * necessary to get to the base object. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExResolveMultiple ( - ACPI_WALK_STATE *WalkState, - ACPI_OPERAND_OBJECT *Operand, - ACPI_OBJECT_TYPE *ReturnType, - ACPI_OPERAND_OBJECT **ReturnDesc) -{ - ACPI_OPERAND_OBJECT *ObjDesc = (void *) Operand; - ACPI_NAMESPACE_NODE *Node; - ACPI_OBJECT_TYPE Type; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiExResolveMultiple); - - - /* Operand can be either a namespace node or an operand descriptor */ - - switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc)) - { - case ACPI_DESC_TYPE_OPERAND: - Type = ObjDesc->Common.Type; - break; - - case ACPI_DESC_TYPE_NAMED: - Type = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type; - ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) ObjDesc); - - /* If we had an Alias node, use the attached object for type info */ - - if (Type == ACPI_TYPE_LOCAL_ALIAS) - { - Type = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type; - ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) ObjDesc); - } - break; - - default: - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - /* If type is anything other than a reference, we are done */ - - if (Type != ACPI_TYPE_LOCAL_REFERENCE) - { - goto Exit; - } - - /* - * For reference objects created via the RefOf, Index, or Load/LoadTable - * operators, we need to get to the base object (as per the ACPI - * specification of the ObjectType and SizeOf operators). This means - * traversing the list of possibly many nested references. - */ - while (ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) - { - switch (ObjDesc->Reference.Class) - { - case ACPI_REFCLASS_REFOF: - case ACPI_REFCLASS_NAME: - - /* Dereference the reference pointer */ - - if (ObjDesc->Reference.Class == ACPI_REFCLASS_REFOF) - { - Node = ObjDesc->Reference.Object; - } - else /* AML_INT_NAMEPATH_OP */ - { - Node = ObjDesc->Reference.Node; - } - - /* All "References" point to a NS node */ - - if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED) - { - ACPI_ERROR ((AE_INFO, - "Not a NS node %p [%s]", - Node, AcpiUtGetDescriptorName (Node))); - return_ACPI_STATUS (AE_AML_INTERNAL); - } - - /* Get the attached object */ - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (!ObjDesc) - { - /* No object, use the NS node type */ - - Type = AcpiNsGetType (Node); - goto Exit; - } - - /* Check for circular references */ - - if (ObjDesc == Operand) - { - return_ACPI_STATUS (AE_AML_CIRCULAR_REFERENCE); - } - break; - - - case ACPI_REFCLASS_INDEX: - - /* Get the type of this reference (index into another object) */ - - Type = ObjDesc->Reference.TargetType; - if (Type != ACPI_TYPE_PACKAGE) - { - goto Exit; - } - - /* - * The main object is a package, we want to get the type - * of the individual package element that is referenced by - * the index. - * - * This could of course in turn be another reference object. - */ - ObjDesc = *(ObjDesc->Reference.Where); - if (!ObjDesc) - { - /* NULL package elements are allowed */ - - Type = 0; /* Uninitialized */ - goto Exit; - } - break; - - - case ACPI_REFCLASS_TABLE: - - Type = ACPI_TYPE_DDB_HANDLE; - goto Exit; - - - case ACPI_REFCLASS_LOCAL: - case ACPI_REFCLASS_ARG: - - if (ReturnDesc) - { - Status = AcpiDsMethodDataGetValue (ObjDesc->Reference.Class, - ObjDesc->Reference.Value, WalkState, &ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - AcpiUtRemoveReference (ObjDesc); - } - else - { - Status = AcpiDsMethodDataGetNode (ObjDesc->Reference.Class, - ObjDesc->Reference.Value, WalkState, &Node); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ObjDesc = AcpiNsGetAttachedObject (Node); - if (!ObjDesc) - { - Type = ACPI_TYPE_ANY; - goto Exit; - } - } - break; - - - case ACPI_REFCLASS_DEBUG: - - /* The Debug Object is of type "DebugObject" */ - - Type = ACPI_TYPE_DEBUG_OBJECT; - goto Exit; - - - default: - - ACPI_ERROR ((AE_INFO, - "Unknown Reference Class %2.2X", ObjDesc->Reference.Class)); - return_ACPI_STATUS (AE_AML_INTERNAL); - } - } - - /* - * Now we are guaranteed to have an object that has not been created - * via the RefOf or Index operators. - */ - Type = ObjDesc->Common.Type; - - -Exit: - /* Convert internal types to external types */ - - switch (Type) - { - case ACPI_TYPE_LOCAL_REGION_FIELD: - case ACPI_TYPE_LOCAL_BANK_FIELD: - case ACPI_TYPE_LOCAL_INDEX_FIELD: - - Type = ACPI_TYPE_FIELD_UNIT; - break; - - case ACPI_TYPE_LOCAL_SCOPE: - - /* Per ACPI Specification, Scope is untyped */ - - Type = ACPI_TYPE_ANY; - break; - - default: - /* No change to Type required */ - break; - } - - *ReturnType = Type; - if (ReturnDesc) - { - *ReturnDesc = ObjDesc; - } - return_ACPI_STATUS (AE_OK); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exresop.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exresop.c deleted file mode 100644 index ecc63f613..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exresop.c +++ /dev/null @@ -1,810 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exresop - AML Interpreter operand/object resolution - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXRESOP_C__ - -#include "acpi.h" -#include "accommon.h" -#include "amlcode.h" -#include "acparser.h" -#include "acinterp.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exresop") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiExCheckObjectType ( - ACPI_OBJECT_TYPE TypeNeeded, - ACPI_OBJECT_TYPE ThisType, - void *Object); - - -/******************************************************************************* - * - * FUNCTION: AcpiExCheckObjectType - * - * PARAMETERS: TypeNeeded Object type needed - * ThisType Actual object type - * Object Object pointer - * - * RETURN: Status - * - * DESCRIPTION: Check required type against actual type - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiExCheckObjectType ( - ACPI_OBJECT_TYPE TypeNeeded, - ACPI_OBJECT_TYPE ThisType, - void *Object) -{ - ACPI_FUNCTION_ENTRY (); - - - if (TypeNeeded == ACPI_TYPE_ANY) - { - /* All types OK, so we don't perform any typechecks */ - - return (AE_OK); - } - - if (TypeNeeded == ACPI_TYPE_LOCAL_REFERENCE) - { - /* - * Allow the AML "Constant" opcodes (Zero, One, etc.) to be reference - * objects and thus allow them to be targets. (As per the ACPI - * specification, a store to a constant is a noop.) - */ - if ((ThisType == ACPI_TYPE_INTEGER) && - (((ACPI_OPERAND_OBJECT *) Object)->Common.Flags & AOPOBJ_AML_CONSTANT)) - { - return (AE_OK); - } - } - - if (TypeNeeded != ThisType) - { - ACPI_ERROR ((AE_INFO, - "Needed type [%s], found [%s] %p", - AcpiUtGetTypeName (TypeNeeded), - AcpiUtGetTypeName (ThisType), Object)); - - return (AE_AML_OPERAND_TYPE); - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExResolveOperands - * - * PARAMETERS: Opcode - Opcode being interpreted - * StackPtr - Pointer to the operand stack to be - * resolved - * WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Convert multiple input operands to the types required by the - * target operator. - * - * Each 5-bit group in ArgTypes represents one required - * operand and indicates the required Type. The corresponding operand - * will be converted to the required type if possible, otherwise we - * abort with an exception. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExResolveOperands ( - UINT16 Opcode, - ACPI_OPERAND_OBJECT **StackPtr, - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status = AE_OK; - UINT8 ObjectType; - UINT32 ArgTypes; - const ACPI_OPCODE_INFO *OpInfo; - UINT32 ThisArgType; - ACPI_OBJECT_TYPE TypeNeeded; - UINT16 TargetOp = 0; - - - ACPI_FUNCTION_TRACE_U32 (ExResolveOperands, Opcode); - - - OpInfo = AcpiPsGetOpcodeInfo (Opcode); - if (OpInfo->Class == AML_CLASS_UNKNOWN) - { - return_ACPI_STATUS (AE_AML_BAD_OPCODE); - } - - ArgTypes = OpInfo->RuntimeArgs; - if (ArgTypes == ARGI_INVALID_OPCODE) - { - ACPI_ERROR ((AE_INFO, "Unknown AML opcode %X", - Opcode)); - - return_ACPI_STATUS (AE_AML_INTERNAL); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Opcode %X [%s] RequiredOperandTypes=%8.8X\n", - Opcode, OpInfo->Name, ArgTypes)); - - /* - * Normal exit is with (ArgTypes == 0) at end of argument list. - * Function will return an exception from within the loop upon - * finding an entry which is not (or cannot be converted - * to) the required type; if stack underflows; or upon - * finding a NULL stack entry (which should not happen). - */ - while (GET_CURRENT_ARG_TYPE (ArgTypes)) - { - if (!StackPtr || !*StackPtr) - { - ACPI_ERROR ((AE_INFO, "Null stack entry at %p", - StackPtr)); - - return_ACPI_STATUS (AE_AML_INTERNAL); - } - - /* Extract useful items */ - - ObjDesc = *StackPtr; - - /* Decode the descriptor type */ - - switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc)) - { - case ACPI_DESC_TYPE_NAMED: - - /* Namespace Node */ - - ObjectType = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type; - - /* - * Resolve an alias object. The construction of these objects - * guarantees that there is only one level of alias indirection; - * thus, the attached object is always the aliased namespace node - */ - if (ObjectType == ACPI_TYPE_LOCAL_ALIAS) - { - ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) ObjDesc); - *StackPtr = ObjDesc; - ObjectType = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type; - } - break; - - - case ACPI_DESC_TYPE_OPERAND: - - /* ACPI internal object */ - - ObjectType = ObjDesc->Common.Type; - - /* Check for bad ACPI_OBJECT_TYPE */ - - if (!AcpiUtValidObjectType (ObjectType)) - { - ACPI_ERROR ((AE_INFO, - "Bad operand object type [%X]", ObjectType)); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - if (ObjectType == (UINT8) ACPI_TYPE_LOCAL_REFERENCE) - { - /* Validate the Reference */ - - switch (ObjDesc->Reference.Class) - { - case ACPI_REFCLASS_DEBUG: - - TargetOp = AML_DEBUG_OP; - - /*lint -fallthrough */ - - case ACPI_REFCLASS_ARG: - case ACPI_REFCLASS_LOCAL: - case ACPI_REFCLASS_INDEX: - case ACPI_REFCLASS_REFOF: - case ACPI_REFCLASS_TABLE: /* DdbHandle from LOAD_OP or LOAD_TABLE_OP */ - case ACPI_REFCLASS_NAME: /* Reference to a named object */ - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Operand is a Reference, Class [%s] %2.2X\n", - AcpiUtGetReferenceName (ObjDesc), - ObjDesc->Reference.Class)); - break; - - default: - - ACPI_ERROR ((AE_INFO, - "Unknown Reference Class %2.2X in %p", - ObjDesc->Reference.Class, ObjDesc)); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - } - break; - - - default: - - /* Invalid descriptor */ - - ACPI_ERROR ((AE_INFO, "Invalid descriptor %p [%s]", - ObjDesc, AcpiUtGetDescriptorName (ObjDesc))); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - /* Get one argument type, point to the next */ - - ThisArgType = GET_CURRENT_ARG_TYPE (ArgTypes); - INCREMENT_ARG_LIST (ArgTypes); - - /* - * Handle cases where the object does not need to be - * resolved to a value - */ - switch (ThisArgType) - { - case ARGI_REF_OR_STRING: /* Can be a String or Reference */ - - if ((ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND) && - (ObjDesc->Common.Type == ACPI_TYPE_STRING)) - { - /* - * String found - the string references a named object and - * must be resolved to a node - */ - goto NextOperand; - } - - /* - * Else not a string - fall through to the normal Reference - * case below - */ - /*lint -fallthrough */ - - case ARGI_REFERENCE: /* References: */ - case ARGI_INTEGER_REF: - case ARGI_OBJECT_REF: - case ARGI_DEVICE_REF: - case ARGI_TARGETREF: /* Allows implicit conversion rules before store */ - case ARGI_FIXED_TARGET: /* No implicit conversion before store to target */ - case ARGI_SIMPLE_TARGET: /* Name, Local, or Arg - no implicit conversion */ - - /* - * Need an operand of type ACPI_TYPE_LOCAL_REFERENCE - * A Namespace Node is OK as-is - */ - if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED) - { - goto NextOperand; - } - - Status = AcpiExCheckObjectType (ACPI_TYPE_LOCAL_REFERENCE, - ObjectType, ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - goto NextOperand; - - - case ARGI_DATAREFOBJ: /* Store operator only */ - - /* - * We don't want to resolve IndexOp reference objects during - * a store because this would be an implicit DeRefOf operation. - * Instead, we just want to store the reference object. - * -- All others must be resolved below. - */ - if ((Opcode == AML_STORE_OP) && - ((*StackPtr)->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) && - ((*StackPtr)->Reference.Class == ACPI_REFCLASS_INDEX)) - { - goto NextOperand; - } - break; - - default: - /* All cases covered above */ - break; - } - - /* - * Resolve this object to a value - */ - Status = AcpiExResolveToValue (StackPtr, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Get the resolved object */ - - ObjDesc = *StackPtr; - - /* - * Check the resulting object (value) type - */ - switch (ThisArgType) - { - /* - * For the simple cases, only one type of resolved object - * is allowed - */ - case ARGI_MUTEX: - - /* Need an operand of type ACPI_TYPE_MUTEX */ - - TypeNeeded = ACPI_TYPE_MUTEX; - break; - - case ARGI_EVENT: - - /* Need an operand of type ACPI_TYPE_EVENT */ - - TypeNeeded = ACPI_TYPE_EVENT; - break; - - case ARGI_PACKAGE: /* Package */ - - /* Need an operand of type ACPI_TYPE_PACKAGE */ - - TypeNeeded = ACPI_TYPE_PACKAGE; - break; - - case ARGI_ANYTYPE: - - /* Any operand type will do */ - - TypeNeeded = ACPI_TYPE_ANY; - break; - - case ARGI_DDBHANDLE: - - /* Need an operand of type ACPI_TYPE_DDB_HANDLE */ - - TypeNeeded = ACPI_TYPE_LOCAL_REFERENCE; - break; - - - /* - * The more complex cases allow multiple resolved object types - */ - case ARGI_INTEGER: - - /* - * Need an operand of type ACPI_TYPE_INTEGER, - * But we can implicitly convert from a STRING or BUFFER - * Aka - "Implicit Source Operand Conversion" - */ - Status = AcpiExConvertToInteger (ObjDesc, StackPtr, 16); - if (ACPI_FAILURE (Status)) - { - if (Status == AE_TYPE) - { - ACPI_ERROR ((AE_INFO, - "Needed [Integer/String/Buffer], found [%s] %p", - AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - return_ACPI_STATUS (Status); - } - - if (ObjDesc != *StackPtr) - { - AcpiUtRemoveReference (ObjDesc); - } - goto NextOperand; - - - case ARGI_BUFFER: - - /* - * Need an operand of type ACPI_TYPE_BUFFER, - * But we can implicitly convert from a STRING or INTEGER - * Aka - "Implicit Source Operand Conversion" - */ - Status = AcpiExConvertToBuffer (ObjDesc, StackPtr); - if (ACPI_FAILURE (Status)) - { - if (Status == AE_TYPE) - { - ACPI_ERROR ((AE_INFO, - "Needed [Integer/String/Buffer], found [%s] %p", - AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - return_ACPI_STATUS (Status); - } - - if (ObjDesc != *StackPtr) - { - AcpiUtRemoveReference (ObjDesc); - } - goto NextOperand; - - - case ARGI_STRING: - - /* - * Need an operand of type ACPI_TYPE_STRING, - * But we can implicitly convert from a BUFFER or INTEGER - * Aka - "Implicit Source Operand Conversion" - */ - Status = AcpiExConvertToString (ObjDesc, StackPtr, - ACPI_IMPLICIT_CONVERT_HEX); - if (ACPI_FAILURE (Status)) - { - if (Status == AE_TYPE) - { - ACPI_ERROR ((AE_INFO, - "Needed [Integer/String/Buffer], found [%s] %p", - AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - return_ACPI_STATUS (Status); - } - - if (ObjDesc != *StackPtr) - { - AcpiUtRemoveReference (ObjDesc); - } - goto NextOperand; - - - case ARGI_COMPUTEDATA: - - /* Need an operand of type INTEGER, STRING or BUFFER */ - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_INTEGER: - case ACPI_TYPE_STRING: - case ACPI_TYPE_BUFFER: - - /* Valid operand */ - break; - - default: - ACPI_ERROR ((AE_INFO, - "Needed [Integer/String/Buffer], found [%s] %p", - AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - goto NextOperand; - - - case ARGI_BUFFER_OR_STRING: - - /* Need an operand of type STRING or BUFFER */ - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_STRING: - case ACPI_TYPE_BUFFER: - - /* Valid operand */ - break; - - case ACPI_TYPE_INTEGER: - - /* Highest priority conversion is to type Buffer */ - - Status = AcpiExConvertToBuffer (ObjDesc, StackPtr); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - if (ObjDesc != *StackPtr) - { - AcpiUtRemoveReference (ObjDesc); - } - break; - - default: - ACPI_ERROR ((AE_INFO, - "Needed [Integer/String/Buffer], found [%s] %p", - AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - goto NextOperand; - - - case ARGI_DATAOBJECT: - /* - * ARGI_DATAOBJECT is only used by the SizeOf operator. - * Need a buffer, string, package, or RefOf reference. - * - * The only reference allowed here is a direct reference to - * a namespace node. - */ - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_PACKAGE: - case ACPI_TYPE_STRING: - case ACPI_TYPE_BUFFER: - case ACPI_TYPE_LOCAL_REFERENCE: - - /* Valid operand */ - break; - - default: - ACPI_ERROR ((AE_INFO, - "Needed [Buffer/String/Package/Reference], found [%s] %p", - AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - goto NextOperand; - - - case ARGI_COMPLEXOBJ: - - /* Need a buffer or package or (ACPI 2.0) String */ - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_PACKAGE: - case ACPI_TYPE_STRING: - case ACPI_TYPE_BUFFER: - - /* Valid operand */ - break; - - default: - ACPI_ERROR ((AE_INFO, - "Needed [Buffer/String/Package], found [%s] %p", - AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - goto NextOperand; - - - case ARGI_REGION_OR_BUFFER: /* Used by Load() only */ - - /* Need an operand of type REGION or a BUFFER (which could be a resolved region field) */ - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_BUFFER: - case ACPI_TYPE_REGION: - - /* Valid operand */ - break; - - default: - ACPI_ERROR ((AE_INFO, - "Needed [Region/Buffer], found [%s] %p", - AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - goto NextOperand; - - - case ARGI_DATAREFOBJ: - - /* Used by the Store() operator only */ - - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_INTEGER: - case ACPI_TYPE_PACKAGE: - case ACPI_TYPE_STRING: - case ACPI_TYPE_BUFFER: - case ACPI_TYPE_BUFFER_FIELD: - case ACPI_TYPE_LOCAL_REFERENCE: - case ACPI_TYPE_LOCAL_REGION_FIELD: - case ACPI_TYPE_LOCAL_BANK_FIELD: - case ACPI_TYPE_LOCAL_INDEX_FIELD: - case ACPI_TYPE_DDB_HANDLE: - - /* Valid operand */ - break; - - default: - - if (AcpiGbl_EnableInterpreterSlack) - { - /* - * Enable original behavior of Store(), allowing any and all - * objects as the source operand. The ACPI spec does not - * allow this, however. - */ - break; - } - - if (TargetOp == AML_DEBUG_OP) - { - /* Allow store of any object to the Debug object */ - - break; - } - - ACPI_ERROR ((AE_INFO, - "Needed Integer/Buffer/String/Package/Ref/Ddb], found [%s] %p", - AcpiUtGetObjectTypeName (ObjDesc), ObjDesc)); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - goto NextOperand; - - - default: - - /* Unknown type */ - - ACPI_ERROR ((AE_INFO, - "Internal - Unknown ARGI (required operand) type %X", - ThisArgType)); - - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* - * Make sure that the original object was resolved to the - * required object type (Simple cases only). - */ - Status = AcpiExCheckObjectType (TypeNeeded, - (*StackPtr)->Common.Type, *StackPtr); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - -NextOperand: - /* - * If more operands needed, decrement StackPtr to point - * to next operand on stack - */ - if (GET_CURRENT_ARG_TYPE (ArgTypes)) - { - StackPtr--; - } - } - - ACPI_DUMP_OPERANDS (WalkState->Operands, - AcpiPsGetOpcodeName (Opcode), WalkState->NumOperands); - - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exstore.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exstore.c deleted file mode 100644 index 8ec8a23cf..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exstore.c +++ /dev/null @@ -1,822 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exstore - AML Interpreter object store support - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXSTORE_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acdispat.h" -#include "acinterp.h" -#include "amlcode.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exstore") - -/* Local prototypes */ - -static void -AcpiExDoDebugObject ( - ACPI_OPERAND_OBJECT *SourceDesc, - UINT32 Level, - UINT32 Index); - -static ACPI_STATUS -AcpiExStoreObjectToIndex ( - ACPI_OPERAND_OBJECT *ValDesc, - ACPI_OPERAND_OBJECT *DestDesc, - ACPI_WALK_STATE *WalkState); - - -/******************************************************************************* - * - * FUNCTION: AcpiExDoDebugObject - * - * PARAMETERS: SourceDesc - Value to be stored - * Level - Indentation level (used for packages) - * Index - Current package element, zero if not pkg - * - * RETURN: None - * - * DESCRIPTION: Handles stores to the Debug Object. - * - ******************************************************************************/ - -static void -AcpiExDoDebugObject ( - ACPI_OPERAND_OBJECT *SourceDesc, - UINT32 Level, - UINT32 Index) -{ - UINT32 i; - - - ACPI_FUNCTION_TRACE_PTR (ExDoDebugObject, SourceDesc); - - - /* Print line header as long as we are not in the middle of an object display */ - - if (!((Level > 0) && Index == 0)) - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[ACPI Debug] %*s", - Level, " ")); - } - - /* Display index for package output only */ - - if (Index > 0) - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, - "(%.2u) ", Index -1)); - } - - if (!SourceDesc) - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[Null Object]\n")); - return_VOID; - } - - if (ACPI_GET_DESCRIPTOR_TYPE (SourceDesc) == ACPI_DESC_TYPE_OPERAND) - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "%s ", - AcpiUtGetObjectTypeName (SourceDesc))); - - if (!AcpiUtValidInternalObject (SourceDesc)) - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, - "%p, Invalid Internal Object!\n", SourceDesc)); - return_VOID; - } - } - else if (ACPI_GET_DESCRIPTOR_TYPE (SourceDesc) == ACPI_DESC_TYPE_NAMED) - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "%s: %p\n", - AcpiUtGetTypeName (((ACPI_NAMESPACE_NODE *) SourceDesc)->Type), - SourceDesc)); - return_VOID; - } - else - { - return_VOID; - } - - /* SourceDesc is of type ACPI_DESC_TYPE_OPERAND */ - - switch (SourceDesc->Common.Type) - { - case ACPI_TYPE_INTEGER: - - /* Output correct integer width */ - - if (AcpiGbl_IntegerByteWidth == 4) - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "0x%8.8X\n", - (UINT32) SourceDesc->Integer.Value)); - } - else - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "0x%8.8X%8.8X\n", - ACPI_FORMAT_UINT64 (SourceDesc->Integer.Value))); - } - break; - - case ACPI_TYPE_BUFFER: - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[0x%.2X]\n", - (UINT32) SourceDesc->Buffer.Length)); - ACPI_DUMP_BUFFER (SourceDesc->Buffer.Pointer, - (SourceDesc->Buffer.Length < 256) ? SourceDesc->Buffer.Length : 256); - break; - - case ACPI_TYPE_STRING: - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[0x%.2X] \"%s\"\n", - SourceDesc->String.Length, SourceDesc->String.Pointer)); - break; - - case ACPI_TYPE_PACKAGE: - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[Contains 0x%.2X Elements]\n", - SourceDesc->Package.Count)); - - /* Output the entire contents of the package */ - - for (i = 0; i < SourceDesc->Package.Count; i++) - { - AcpiExDoDebugObject (SourceDesc->Package.Elements[i], - Level+4, i+1); - } - break; - - case ACPI_TYPE_LOCAL_REFERENCE: - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[%s] ", - AcpiUtGetReferenceName (SourceDesc))); - - /* Decode the reference */ - - switch (SourceDesc->Reference.Class) - { - case ACPI_REFCLASS_INDEX: - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "0x%X\n", - SourceDesc->Reference.Value)); - break; - - case ACPI_REFCLASS_TABLE: - - /* Case for DdbHandle */ - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "Table Index 0x%X\n", - SourceDesc->Reference.Value)); - return; - - default: - break; - } - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, " ")); - - /* Check for valid node first, then valid object */ - - if (SourceDesc->Reference.Node) - { - if (ACPI_GET_DESCRIPTOR_TYPE (SourceDesc->Reference.Node) != - ACPI_DESC_TYPE_NAMED) - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, - " %p - Not a valid namespace node\n", - SourceDesc->Reference.Node)); - } - else - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "Node %p [%4.4s] ", - SourceDesc->Reference.Node, (SourceDesc->Reference.Node)->Name.Ascii)); - - switch ((SourceDesc->Reference.Node)->Type) - { - /* These types have no attached object */ - - case ACPI_TYPE_DEVICE: - AcpiOsPrintf ("Device\n"); - break; - - case ACPI_TYPE_THERMAL: - AcpiOsPrintf ("Thermal Zone\n"); - break; - - default: - AcpiExDoDebugObject ((SourceDesc->Reference.Node)->Object, - Level+4, 0); - break; - } - } - } - else if (SourceDesc->Reference.Object) - { - if (ACPI_GET_DESCRIPTOR_TYPE (SourceDesc->Reference.Object) == - ACPI_DESC_TYPE_NAMED) - { - AcpiExDoDebugObject (((ACPI_NAMESPACE_NODE *) - SourceDesc->Reference.Object)->Object, - Level+4, 0); - } - else - { - AcpiExDoDebugObject (SourceDesc->Reference.Object, Level+4, 0); - } - } - break; - - default: - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "%p\n", - SourceDesc)); - break; - } - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "\n")); - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExStore - * - * PARAMETERS: *SourceDesc - Value to be stored - * *DestDesc - Where to store it. Must be an NS node - * or an ACPI_OPERAND_OBJECT of type - * Reference; - * WalkState - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Store the value described by SourceDesc into the location - * described by DestDesc. Called by various interpreter - * functions to store the result of an operation into - * the destination operand -- not just simply the actual "Store" - * ASL operator. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExStore ( - ACPI_OPERAND_OBJECT *SourceDesc, - ACPI_OPERAND_OBJECT *DestDesc, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status = AE_OK; - ACPI_OPERAND_OBJECT *RefDesc = DestDesc; - - - ACPI_FUNCTION_TRACE_PTR (ExStore, DestDesc); - - - /* Validate parameters */ - - if (!SourceDesc || !DestDesc) - { - ACPI_ERROR ((AE_INFO, "Null parameter")); - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } - - /* DestDesc can be either a namespace node or an ACPI object */ - - if (ACPI_GET_DESCRIPTOR_TYPE (DestDesc) == ACPI_DESC_TYPE_NAMED) - { - /* - * Dest is a namespace node, - * Storing an object into a Named node. - */ - Status = AcpiExStoreObjectToNode (SourceDesc, - (ACPI_NAMESPACE_NODE *) DestDesc, WalkState, - ACPI_IMPLICIT_CONVERSION); - - return_ACPI_STATUS (Status); - } - - /* Destination object must be a Reference or a Constant object */ - - switch (DestDesc->Common.Type) - { - case ACPI_TYPE_LOCAL_REFERENCE: - break; - - case ACPI_TYPE_INTEGER: - - /* Allow stores to Constants -- a Noop as per ACPI spec */ - - if (DestDesc->Common.Flags & AOPOBJ_AML_CONSTANT) - { - return_ACPI_STATUS (AE_OK); - } - - /*lint -fallthrough */ - - default: - - /* Destination is not a Reference object */ - - ACPI_ERROR ((AE_INFO, - "Target is not a Reference or Constant object - %s [%p]", - AcpiUtGetObjectTypeName (DestDesc), DestDesc)); - - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - /* - * Examine the Reference class. These cases are handled: - * - * 1) Store to Name (Change the object associated with a name) - * 2) Store to an indexed area of a Buffer or Package - * 3) Store to a Method Local or Arg - * 4) Store to the debug object - */ - switch (RefDesc->Reference.Class) - { - case ACPI_REFCLASS_REFOF: - - /* Storing an object into a Name "container" */ - - Status = AcpiExStoreObjectToNode (SourceDesc, - RefDesc->Reference.Object, - WalkState, ACPI_IMPLICIT_CONVERSION); - break; - - - case ACPI_REFCLASS_INDEX: - - /* Storing to an Index (pointer into a packager or buffer) */ - - Status = AcpiExStoreObjectToIndex (SourceDesc, RefDesc, WalkState); - break; - - - case ACPI_REFCLASS_LOCAL: - case ACPI_REFCLASS_ARG: - - /* Store to a method local/arg */ - - Status = AcpiDsStoreObjectToLocal (RefDesc->Reference.Class, - RefDesc->Reference.Value, SourceDesc, WalkState); - break; - - - case ACPI_REFCLASS_DEBUG: - - /* - * Storing to the Debug object causes the value stored to be - * displayed and otherwise has no effect -- see ACPI Specification - */ - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "**** Write to Debug Object: Object %p %s ****:\n\n", - SourceDesc, AcpiUtGetObjectTypeName (SourceDesc))); - - AcpiExDoDebugObject (SourceDesc, 0, 0); - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Unknown Reference Class %2.2X", - RefDesc->Reference.Class)); - ACPI_DUMP_ENTRY (RefDesc, ACPI_LV_INFO); - - Status = AE_AML_INTERNAL; - break; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExStoreObjectToIndex - * - * PARAMETERS: *SourceDesc - Value to be stored - * *DestDesc - Named object to receive the value - * WalkState - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Store the object to indexed Buffer or Package element - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiExStoreObjectToIndex ( - ACPI_OPERAND_OBJECT *SourceDesc, - ACPI_OPERAND_OBJECT *IndexDesc, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status = AE_OK; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT *NewDesc; - UINT8 Value = 0; - UINT32 i; - - - ACPI_FUNCTION_TRACE (ExStoreObjectToIndex); - - - /* - * Destination must be a reference pointer, and - * must point to either a buffer or a package - */ - switch (IndexDesc->Reference.TargetType) - { - case ACPI_TYPE_PACKAGE: - /* - * Storing to a package element. Copy the object and replace - * any existing object with the new object. No implicit - * conversion is performed. - * - * The object at *(IndexDesc->Reference.Where) is the - * element within the package that is to be modified. - * The parent package object is at IndexDesc->Reference.Object - */ - ObjDesc = *(IndexDesc->Reference.Where); - - if (SourceDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE && - SourceDesc->Reference.Class == ACPI_REFCLASS_TABLE) - { - /* This is a DDBHandle, just add a reference to it */ - - AcpiUtAddReference (SourceDesc); - NewDesc = SourceDesc; - } - else - { - /* Normal object, copy it */ - - Status = AcpiUtCopyIobjectToIobject (SourceDesc, &NewDesc, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - if (ObjDesc) - { - /* Decrement reference count by the ref count of the parent package */ - - for (i = 0; - i < ((ACPI_OPERAND_OBJECT *) - IndexDesc->Reference.Object)->Common.ReferenceCount; - i++) - { - AcpiUtRemoveReference (ObjDesc); - } - } - - *(IndexDesc->Reference.Where) = NewDesc; - - /* Increment ref count by the ref count of the parent package-1 */ - - for (i = 1; - i < ((ACPI_OPERAND_OBJECT *) - IndexDesc->Reference.Object)->Common.ReferenceCount; - i++) - { - AcpiUtAddReference (NewDesc); - } - - break; - - - case ACPI_TYPE_BUFFER_FIELD: - - /* - * Store into a Buffer or String (not actually a real BufferField) - * at a location defined by an Index. - * - * The first 8-bit element of the source object is written to the - * 8-bit Buffer location defined by the Index destination object, - * according to the ACPI 2.0 specification. - */ - - /* - * Make sure the target is a Buffer or String. An error should - * not happen here, since the ReferenceObject was constructed - * by the INDEX_OP code. - */ - ObjDesc = IndexDesc->Reference.Object; - if ((ObjDesc->Common.Type != ACPI_TYPE_BUFFER) && - (ObjDesc->Common.Type != ACPI_TYPE_STRING)) - { - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - /* - * The assignment of the individual elements will be slightly - * different for each source type. - */ - switch (SourceDesc->Common.Type) - { - case ACPI_TYPE_INTEGER: - - /* Use the least-significant byte of the integer */ - - Value = (UINT8) (SourceDesc->Integer.Value); - break; - - case ACPI_TYPE_BUFFER: - case ACPI_TYPE_STRING: - - /* Note: Takes advantage of common string/buffer fields */ - - Value = SourceDesc->Buffer.Pointer[0]; - break; - - default: - - /* All other types are invalid */ - - ACPI_ERROR ((AE_INFO, - "Source must be Integer/Buffer/String type, not %s", - AcpiUtGetObjectTypeName (SourceDesc))); - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - /* Store the source value into the target buffer byte */ - - ObjDesc->Buffer.Pointer[IndexDesc->Reference.Value] = Value; - break; - - - default: - ACPI_ERROR ((AE_INFO, - "Target is not a Package or BufferField")); - Status = AE_AML_OPERAND_TYPE; - break; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExStoreObjectToNode - * - * PARAMETERS: SourceDesc - Value to be stored - * Node - Named object to receive the value - * WalkState - Current walk state - * ImplicitConversion - Perform implicit conversion (yes/no) - * - * RETURN: Status - * - * DESCRIPTION: Store the object to the named object. - * - * The Assignment of an object to a named object is handled here - * The value passed in will replace the current value (if any) - * with the input value. - * - * When storing into an object the data is converted to the - * target object type then stored in the object. This means - * that the target object type (for an initialized target) will - * not be changed by a store operation. - * - * Assumes parameters are already validated. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExStoreObjectToNode ( - ACPI_OPERAND_OBJECT *SourceDesc, - ACPI_NAMESPACE_NODE *Node, - ACPI_WALK_STATE *WalkState, - UINT8 ImplicitConversion) -{ - ACPI_STATUS Status = AE_OK; - ACPI_OPERAND_OBJECT *TargetDesc; - ACPI_OPERAND_OBJECT *NewDesc; - ACPI_OBJECT_TYPE TargetType; - - - ACPI_FUNCTION_TRACE_PTR (ExStoreObjectToNode, SourceDesc); - - - /* Get current type of the node, and object attached to Node */ - - TargetType = AcpiNsGetType (Node); - TargetDesc = AcpiNsGetAttachedObject (Node); - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Storing %p(%s) into node %p(%s)\n", - SourceDesc, AcpiUtGetObjectTypeName (SourceDesc), - Node, AcpiUtGetTypeName (TargetType))); - - /* - * Resolve the source object to an actual value - * (If it is a reference object) - */ - Status = AcpiExResolveObject (&SourceDesc, TargetType, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* If no implicit conversion, drop into the default case below */ - - if ((!ImplicitConversion) || - ((WalkState->Opcode == AML_COPY_OP) && - (TargetType != ACPI_TYPE_LOCAL_REGION_FIELD) && - (TargetType != ACPI_TYPE_LOCAL_BANK_FIELD) && - (TargetType != ACPI_TYPE_LOCAL_INDEX_FIELD))) - { - /* - * Force execution of default (no implicit conversion). Note: - * CopyObject does not perform an implicit conversion, as per the ACPI - * spec -- except in case of region/bank/index fields -- because these - * objects must retain their original type permanently. - */ - TargetType = ACPI_TYPE_ANY; - } - - /* Do the actual store operation */ - - switch (TargetType) - { - case ACPI_TYPE_BUFFER_FIELD: - case ACPI_TYPE_LOCAL_REGION_FIELD: - case ACPI_TYPE_LOCAL_BANK_FIELD: - case ACPI_TYPE_LOCAL_INDEX_FIELD: - - /* For fields, copy the source data to the target field. */ - - Status = AcpiExWriteDataToField (SourceDesc, TargetDesc, - &WalkState->ResultObj); - break; - - - case ACPI_TYPE_INTEGER: - case ACPI_TYPE_STRING: - case ACPI_TYPE_BUFFER: - - /* - * These target types are all of type Integer/String/Buffer, and - * therefore support implicit conversion before the store. - * - * Copy and/or convert the source object to a new target object - */ - Status = AcpiExStoreObjectToObject (SourceDesc, TargetDesc, - &NewDesc, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - if (NewDesc != TargetDesc) - { - /* - * Store the new NewDesc as the new value of the Name, and set - * the Name's type to that of the value being stored in it. - * SourceDesc reference count is incremented by AttachObject. - * - * Note: This may change the type of the node if an explicit store - * has been performed such that the node/object type has been - * changed. - */ - Status = AcpiNsAttachObject (Node, NewDesc, NewDesc->Common.Type); - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Store %s into %s via Convert/Attach\n", - AcpiUtGetObjectTypeName (SourceDesc), - AcpiUtGetObjectTypeName (NewDesc))); - } - break; - - - default: - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Storing %s (%p) directly into node (%p) with no implicit conversion\n", - AcpiUtGetObjectTypeName (SourceDesc), SourceDesc, Node)); - - /* No conversions for all other types. Just attach the source object */ - - Status = AcpiNsAttachObject (Node, SourceDesc, - SourceDesc->Common.Type); - break; - } - - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exstoren.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exstoren.c deleted file mode 100644 index 0810560d3..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exstoren.c +++ /dev/null @@ -1,386 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exstoren - AML Interpreter object store support, - * Store to Node (namespace object) - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXSTOREN_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" -#include "amlcode.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exstoren") - - -/******************************************************************************* - * - * FUNCTION: AcpiExResolveObject - * - * PARAMETERS: SourceDescPtr - Pointer to the source object - * TargetType - Current type of the target - * WalkState - Current walk state - * - * RETURN: Status, resolved object in SourceDescPtr. - * - * DESCRIPTION: Resolve an object. If the object is a reference, dereference - * it and return the actual object in the SourceDescPtr. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExResolveObject ( - ACPI_OPERAND_OBJECT **SourceDescPtr, - ACPI_OBJECT_TYPE TargetType, - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT *SourceDesc = *SourceDescPtr; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (ExResolveObject); - - - /* Ensure we have a Target that can be stored to */ - - switch (TargetType) - { - case ACPI_TYPE_BUFFER_FIELD: - case ACPI_TYPE_LOCAL_REGION_FIELD: - case ACPI_TYPE_LOCAL_BANK_FIELD: - case ACPI_TYPE_LOCAL_INDEX_FIELD: - /* - * These cases all require only Integers or values that - * can be converted to Integers (Strings or Buffers) - */ - - case ACPI_TYPE_INTEGER: - case ACPI_TYPE_STRING: - case ACPI_TYPE_BUFFER: - - /* - * Stores into a Field/Region or into a Integer/Buffer/String - * are all essentially the same. This case handles the - * "interchangeable" types Integer, String, and Buffer. - */ - if (SourceDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) - { - /* Resolve a reference object first */ - - Status = AcpiExResolveToValue (SourceDescPtr, WalkState); - if (ACPI_FAILURE (Status)) - { - break; - } - } - - /* For CopyObject, no further validation necessary */ - - if (WalkState->Opcode == AML_COPY_OP) - { - break; - } - - /* Must have a Integer, Buffer, or String */ - - if ((SourceDesc->Common.Type != ACPI_TYPE_INTEGER) && - (SourceDesc->Common.Type != ACPI_TYPE_BUFFER) && - (SourceDesc->Common.Type != ACPI_TYPE_STRING) && - !((SourceDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) && - (SourceDesc->Reference.Class== ACPI_REFCLASS_TABLE))) - { - /* Conversion successful but still not a valid type */ - - ACPI_ERROR ((AE_INFO, - "Cannot assign type %s to %s (must be type Int/Str/Buf)", - AcpiUtGetObjectTypeName (SourceDesc), - AcpiUtGetTypeName (TargetType))); - Status = AE_AML_OPERAND_TYPE; - } - break; - - - case ACPI_TYPE_LOCAL_ALIAS: - case ACPI_TYPE_LOCAL_METHOD_ALIAS: - - /* - * All aliases should have been resolved earlier, during the - * operand resolution phase. - */ - ACPI_ERROR ((AE_INFO, "Store into an unresolved Alias object")); - Status = AE_AML_INTERNAL; - break; - - - case ACPI_TYPE_PACKAGE: - default: - - /* - * All other types than Alias and the various Fields come here, - * including the untyped case - ACPI_TYPE_ANY. - */ - break; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExStoreObjectToObject - * - * PARAMETERS: SourceDesc - Object to store - * DestDesc - Object to receive a copy of the source - * NewDesc - New object if DestDesc is obsoleted - * WalkState - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: "Store" an object to another object. This may include - * converting the source type to the target type (implicit - * conversion), and a copy of the value of the source to - * the target. - * - * The Assignment of an object to another (not named) object - * is handled here. - * The Source passed in will replace the current value (if any) - * with the input value. - * - * When storing into an object the data is converted to the - * target object type then stored in the object. This means - * that the target object type (for an initialized target) will - * not be changed by a store operation. - * - * This module allows destination types of Number, String, - * Buffer, and Package. - * - * Assumes parameters are already validated. NOTE: SourceDesc - * resolution (from a reference object) must be performed by - * the caller if necessary. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExStoreObjectToObject ( - ACPI_OPERAND_OBJECT *SourceDesc, - ACPI_OPERAND_OBJECT *DestDesc, - ACPI_OPERAND_OBJECT **NewDesc, - ACPI_WALK_STATE *WalkState) -{ - ACPI_OPERAND_OBJECT *ActualSrcDesc; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE_PTR (ExStoreObjectToObject, SourceDesc); - - - ActualSrcDesc = SourceDesc; - if (!DestDesc) - { - /* - * There is no destination object (An uninitialized node or - * package element), so we can simply copy the source object - * creating a new destination object - */ - Status = AcpiUtCopyIobjectToIobject (ActualSrcDesc, NewDesc, WalkState); - return_ACPI_STATUS (Status); - } - - if (SourceDesc->Common.Type != DestDesc->Common.Type) - { - /* - * The source type does not match the type of the destination. - * Perform the "implicit conversion" of the source to the current type - * of the target as per the ACPI specification. - * - * If no conversion performed, ActualSrcDesc = SourceDesc. - * Otherwise, ActualSrcDesc is a temporary object to hold the - * converted object. - */ - Status = AcpiExConvertToTargetType (DestDesc->Common.Type, - SourceDesc, &ActualSrcDesc, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - if (SourceDesc == ActualSrcDesc) - { - /* - * No conversion was performed. Return the SourceDesc as the - * new object. - */ - *NewDesc = SourceDesc; - return_ACPI_STATUS (AE_OK); - } - } - - /* - * We now have two objects of identical types, and we can perform a - * copy of the *value* of the source object. - */ - switch (DestDesc->Common.Type) - { - case ACPI_TYPE_INTEGER: - - DestDesc->Integer.Value = ActualSrcDesc->Integer.Value; - - /* Truncate value if we are executing from a 32-bit ACPI table */ - - AcpiExTruncateFor32bitTable (DestDesc); - break; - - case ACPI_TYPE_STRING: - - Status = AcpiExStoreStringToString (ActualSrcDesc, DestDesc); - break; - - case ACPI_TYPE_BUFFER: - - Status = AcpiExStoreBufferToBuffer (ActualSrcDesc, DestDesc); - break; - - case ACPI_TYPE_PACKAGE: - - Status = AcpiUtCopyIobjectToIobject (ActualSrcDesc, &DestDesc, - WalkState); - break; - - default: - /* - * All other types come here. - */ - ACPI_WARNING ((AE_INFO, "Store into type %s not implemented", - AcpiUtGetObjectTypeName (DestDesc))); - - Status = AE_NOT_IMPLEMENTED; - break; - } - - if (ActualSrcDesc != SourceDesc) - { - /* Delete the intermediate (temporary) source object */ - - AcpiUtRemoveReference (ActualSrcDesc); - } - - *NewDesc = DestDesc; - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exstorob.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exstorob.c deleted file mode 100644 index b2f125d01..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exstorob.c +++ /dev/null @@ -1,316 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exstorob - AML Interpreter object store support, store to object - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXSTOROB_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" - - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exstorob") - - -/******************************************************************************* - * - * FUNCTION: AcpiExStoreBufferToBuffer - * - * PARAMETERS: SourceDesc - Source object to copy - * TargetDesc - Destination object of the copy - * - * RETURN: Status - * - * DESCRIPTION: Copy a buffer object to another buffer object. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExStoreBufferToBuffer ( - ACPI_OPERAND_OBJECT *SourceDesc, - ACPI_OPERAND_OBJECT *TargetDesc) -{ - UINT32 Length; - UINT8 *Buffer; - - - ACPI_FUNCTION_TRACE_PTR (ExStoreBufferToBuffer, SourceDesc); - - - /* If Source and Target are the same, just return */ - - if (SourceDesc == TargetDesc) - { - return_ACPI_STATUS (AE_OK); - } - - /* We know that SourceDesc is a buffer by now */ - - Buffer = ACPI_CAST_PTR (UINT8, SourceDesc->Buffer.Pointer); - Length = SourceDesc->Buffer.Length; - - /* - * If target is a buffer of length zero or is a static buffer, - * allocate a new buffer of the proper length - */ - if ((TargetDesc->Buffer.Length == 0) || - (TargetDesc->Common.Flags & AOPOBJ_STATIC_POINTER)) - { - TargetDesc->Buffer.Pointer = ACPI_ALLOCATE (Length); - if (!TargetDesc->Buffer.Pointer) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - TargetDesc->Buffer.Length = Length; - } - - /* Copy source buffer to target buffer */ - - if (Length <= TargetDesc->Buffer.Length) - { - /* Clear existing buffer and copy in the new one */ - - ACPI_MEMSET (TargetDesc->Buffer.Pointer, 0, TargetDesc->Buffer.Length); - ACPI_MEMCPY (TargetDesc->Buffer.Pointer, Buffer, Length); - -#ifdef ACPI_OBSOLETE_BEHAVIOR - /* - * NOTE: ACPI versions up to 3.0 specified that the buffer must be - * truncated if the string is smaller than the buffer. However, "other" - * implementations of ACPI never did this and thus became the defacto - * standard. ACPI 3.0A changes this behavior such that the buffer - * is no longer truncated. - */ - - /* - * OBSOLETE BEHAVIOR: - * If the original source was a string, we must truncate the buffer, - * according to the ACPI spec. Integer-to-Buffer and Buffer-to-Buffer - * copy must not truncate the original buffer. - */ - if (OriginalSrcType == ACPI_TYPE_STRING) - { - /* Set the new length of the target */ - - TargetDesc->Buffer.Length = Length; - } -#endif - } - else - { - /* Truncate the source, copy only what will fit */ - - ACPI_MEMCPY (TargetDesc->Buffer.Pointer, Buffer, - TargetDesc->Buffer.Length); - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Truncating source buffer from %X to %X\n", - Length, TargetDesc->Buffer.Length)); - } - - /* Copy flags */ - - TargetDesc->Buffer.Flags = SourceDesc->Buffer.Flags; - TargetDesc->Common.Flags &= ~AOPOBJ_STATIC_POINTER; - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExStoreStringToString - * - * PARAMETERS: SourceDesc - Source object to copy - * TargetDesc - Destination object of the copy - * - * RETURN: Status - * - * DESCRIPTION: Copy a String object to another String object - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExStoreStringToString ( - ACPI_OPERAND_OBJECT *SourceDesc, - ACPI_OPERAND_OBJECT *TargetDesc) -{ - UINT32 Length; - UINT8 *Buffer; - - - ACPI_FUNCTION_TRACE_PTR (ExStoreStringToString, SourceDesc); - - - /* If Source and Target are the same, just return */ - - if (SourceDesc == TargetDesc) - { - return_ACPI_STATUS (AE_OK); - } - - /* We know that SourceDesc is a string by now */ - - Buffer = ACPI_CAST_PTR (UINT8, SourceDesc->String.Pointer); - Length = SourceDesc->String.Length; - - /* - * Replace existing string value if it will fit and the string - * pointer is not a static pointer (part of an ACPI table) - */ - if ((Length < TargetDesc->String.Length) && - (!(TargetDesc->Common.Flags & AOPOBJ_STATIC_POINTER))) - { - /* - * String will fit in existing non-static buffer. - * Clear old string and copy in the new one - */ - ACPI_MEMSET (TargetDesc->String.Pointer, 0, - (ACPI_SIZE) TargetDesc->String.Length + 1); - ACPI_MEMCPY (TargetDesc->String.Pointer, Buffer, Length); - } - else - { - /* - * Free the current buffer, then allocate a new buffer - * large enough to hold the value - */ - if (TargetDesc->String.Pointer && - (!(TargetDesc->Common.Flags & AOPOBJ_STATIC_POINTER))) - { - /* Only free if not a pointer into the DSDT */ - - ACPI_FREE (TargetDesc->String.Pointer); - } - - TargetDesc->String.Pointer = ACPI_ALLOCATE_ZEROED ( - (ACPI_SIZE) Length + 1); - if (!TargetDesc->String.Pointer) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - TargetDesc->Common.Flags &= ~AOPOBJ_STATIC_POINTER; - ACPI_MEMCPY (TargetDesc->String.Pointer, Buffer, Length); - } - - /* Set the new target length */ - - TargetDesc->String.Length = Length; - return_ACPI_STATUS (AE_OK); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exsystem.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exsystem.c deleted file mode 100644 index 19674606a..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exsystem.c +++ /dev/null @@ -1,418 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exsystem - Interface to OS services - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXSYSTEM_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exsystem") - - -/******************************************************************************* - * - * FUNCTION: AcpiExSystemWaitSemaphore - * - * PARAMETERS: Semaphore - Semaphore to wait on - * Timeout - Max time to wait - * - * RETURN: Status - * - * DESCRIPTION: Implements a semaphore wait with a check to see if the - * semaphore is available immediately. If it is not, the - * interpreter is released before waiting. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExSystemWaitSemaphore ( - ACPI_SEMAPHORE Semaphore, - UINT16 Timeout) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (ExSystemWaitSemaphore); - - - Status = AcpiOsWaitSemaphore (Semaphore, 1, ACPI_DO_NOT_WAIT); - if (ACPI_SUCCESS (Status)) - { - return_ACPI_STATUS (Status); - } - - if (Status == AE_TIME) - { - /* We must wait, so unlock the interpreter */ - - AcpiExRelinquishInterpreter (); - - Status = AcpiOsWaitSemaphore (Semaphore, 1, Timeout); - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "*** Thread awake after blocking, %s\n", - AcpiFormatException (Status))); - - /* Reacquire the interpreter */ - - AcpiExReacquireInterpreter (); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExSystemWaitMutex - * - * PARAMETERS: Mutex - Mutex to wait on - * Timeout - Max time to wait - * - * RETURN: Status - * - * DESCRIPTION: Implements a mutex wait with a check to see if the - * mutex is available immediately. If it is not, the - * interpreter is released before waiting. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExSystemWaitMutex ( - ACPI_MUTEX Mutex, - UINT16 Timeout) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (ExSystemWaitMutex); - - - Status = AcpiOsAcquireMutex (Mutex, ACPI_DO_NOT_WAIT); - if (ACPI_SUCCESS (Status)) - { - return_ACPI_STATUS (Status); - } - - if (Status == AE_TIME) - { - /* We must wait, so unlock the interpreter */ - - AcpiExRelinquishInterpreter (); - - Status = AcpiOsAcquireMutex (Mutex, Timeout); - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "*** Thread awake after blocking, %s\n", - AcpiFormatException (Status))); - - /* Reacquire the interpreter */ - - AcpiExReacquireInterpreter (); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExSystemDoStall - * - * PARAMETERS: HowLong - The amount of time to stall, - * in microseconds - * - * RETURN: Status - * - * DESCRIPTION: Suspend running thread for specified amount of time. - * Note: ACPI specification requires that Stall() does not - * relinquish the processor, and delays longer than 100 usec - * should use Sleep() instead. We allow stalls up to 255 usec - * for compatibility with other interpreters and existing BIOSs. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExSystemDoStall ( - UINT32 HowLong) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_ENTRY (); - - - if (HowLong > 255) /* 255 microseconds */ - { - /* - * Longer than 255 usec, this is an error - * - * (ACPI specifies 100 usec as max, but this gives some slack in - * order to support existing BIOSs) - */ - ACPI_ERROR ((AE_INFO, "Time parameter is too large (%d)", - HowLong)); - Status = AE_AML_OPERAND_VALUE; - } - else - { - AcpiOsStall (HowLong); - } - - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExSystemDoSuspend - * - * PARAMETERS: HowLong - The amount of time to suspend, - * in milliseconds - * - * RETURN: None - * - * DESCRIPTION: Suspend running thread for specified amount of time. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExSystemDoSuspend ( - ACPI_INTEGER HowLong) -{ - ACPI_FUNCTION_ENTRY (); - - - /* Since this thread will sleep, we must release the interpreter */ - - AcpiExRelinquishInterpreter (); - - AcpiOsSleep (HowLong); - - /* And now we must get the interpreter again */ - - AcpiExReacquireInterpreter (); - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExSystemSignalEvent - * - * PARAMETERS: ObjDesc - The object descriptor for this op - * - * RETURN: Status - * - * DESCRIPTION: Provides an access point to perform synchronization operations - * within the AML. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExSystemSignalEvent ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (ExSystemSignalEvent); - - - if (ObjDesc) - { - Status = AcpiOsSignalSemaphore (ObjDesc->Event.OsSemaphore, 1); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExSystemWaitEvent - * - * PARAMETERS: TimeDesc - The 'time to delay' object descriptor - * ObjDesc - The object descriptor for this op - * - * RETURN: Status - * - * DESCRIPTION: Provides an access point to perform synchronization operations - * within the AML. This operation is a request to wait for an - * event. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExSystemWaitEvent ( - ACPI_OPERAND_OBJECT *TimeDesc, - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (ExSystemWaitEvent); - - - if (ObjDesc) - { - Status = AcpiExSystemWaitSemaphore (ObjDesc->Event.OsSemaphore, - (UINT16) TimeDesc->Integer.Value); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExSystemResetEvent - * - * PARAMETERS: ObjDesc - The object descriptor for this op - * - * RETURN: Status - * - * DESCRIPTION: Reset an event to a known state. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiExSystemResetEvent ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_STATUS Status = AE_OK; - ACPI_SEMAPHORE TempSemaphore; - - - ACPI_FUNCTION_ENTRY (); - - - /* - * We are going to simply delete the existing semaphore and - * create a new one! - */ - Status = AcpiOsCreateSemaphore (ACPI_NO_UNIT_LIMIT, 0, &TempSemaphore); - if (ACPI_SUCCESS (Status)) - { - (void) AcpiOsDeleteSemaphore (ObjDesc->Event.OsSemaphore); - ObjDesc->Event.OsSemaphore = TempSemaphore; - } - - return (Status); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exutils.c b/l4/pkg/acpica/lib-acpi/src/acpica/executer/exutils.c deleted file mode 100644 index 1f5e861b6..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/executer/exutils.c +++ /dev/null @@ -1,574 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exutils - interpreter/scanner utilities - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __EXUTILS_C__ - -/* - * DEFINE_AML_GLOBALS is tested in amlcode.h - * to determine whether certain global names should be "defined" or only - * "declared" in the current compilation. This enhances maintainability - * by enabling a single header file to embody all knowledge of the names - * in question. - * - * Exactly one module of any executable should #define DEFINE_GLOBALS - * before #including the header files which use this convention. The - * names in question will be defined and initialized in that module, - * and declared as extern in all other modules which #include those - * header files. - */ - -#define DEFINE_AML_GLOBALS - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" -#include "amlcode.h" - -#define _COMPONENT ACPI_EXECUTER - ACPI_MODULE_NAME ("exutils") - -/* Local prototypes */ - -static UINT32 -AcpiExDigitsNeeded ( - ACPI_INTEGER Value, - UINT32 Base); - - -#ifndef ACPI_NO_METHOD_EXECUTION -/******************************************************************************* - * - * FUNCTION: AcpiExEnterInterpreter - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Enter the interpreter execution region. Failure to enter - * the interpreter region is a fatal system error. Used in - * conjunction with ExitInterpreter. - * - ******************************************************************************/ - -void -AcpiExEnterInterpreter ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (ExEnterInterpreter); - - - Status = AcpiUtAcquireMutex (ACPI_MTX_INTERPRETER); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR ((AE_INFO, "Could not acquire AML Interpreter mutex")); - } - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExReacquireInterpreter - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Reacquire the interpreter execution region from within the - * interpreter code. Failure to enter the interpreter region is a - * fatal system error. Used in conjuction with - * RelinquishInterpreter - * - ******************************************************************************/ - -void -AcpiExReacquireInterpreter ( - void) -{ - ACPI_FUNCTION_TRACE (ExReacquireInterpreter); - - - /* - * If the global serialized flag is set, do not release the interpreter, - * since it was not actually released by AcpiExRelinquishInterpreter. - * This forces the interpreter to be single threaded. - */ - if (!AcpiGbl_AllMethodsSerialized) - { - AcpiExEnterInterpreter (); - } - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExExitInterpreter - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Exit the interpreter execution region. This is the top level - * routine used to exit the interpreter when all processing has - * been completed. - * - ******************************************************************************/ - -void -AcpiExExitInterpreter ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (ExExitInterpreter); - - - Status = AcpiUtReleaseMutex (ACPI_MTX_INTERPRETER); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR ((AE_INFO, "Could not release AML Interpreter mutex")); - } - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExRelinquishInterpreter - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Exit the interpreter execution region, from within the - * interpreter - before attempting an operation that will possibly - * block the running thread. - * - * Cases where the interpreter is unlocked internally - * 1) Method to be blocked on a Sleep() AML opcode - * 2) Method to be blocked on an Acquire() AML opcode - * 3) Method to be blocked on a Wait() AML opcode - * 4) Method to be blocked to acquire the global lock - * 5) Method to be blocked waiting to execute a serialized control method - * that is currently executing - * 6) About to invoke a user-installed opregion handler - * - ******************************************************************************/ - -void -AcpiExRelinquishInterpreter ( - void) -{ - ACPI_FUNCTION_TRACE (ExRelinquishInterpreter); - - - /* - * If the global serialized flag is set, do not release the interpreter. - * This forces the interpreter to be single threaded. - */ - if (!AcpiGbl_AllMethodsSerialized) - { - AcpiExExitInterpreter (); - } - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExTruncateFor32bitTable - * - * PARAMETERS: ObjDesc - Object to be truncated - * - * RETURN: none - * - * DESCRIPTION: Truncate an ACPI Integer to 32 bits if the execution mode is - * 32-bit, as determined by the revision of the DSDT. - * - ******************************************************************************/ - -void -AcpiExTruncateFor32bitTable ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - - ACPI_FUNCTION_ENTRY (); - - - /* - * Object must be a valid number and we must be executing - * a control method. NS node could be there for AML_INT_NAMEPATH_OP. - */ - if ((!ObjDesc) || - (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) || - (ObjDesc->Common.Type != ACPI_TYPE_INTEGER)) - { - return; - } - - if (AcpiGbl_IntegerByteWidth == 4) - { - /* - * We are running a method that exists in a 32-bit ACPI table. - * Truncate the value to 32 bits by zeroing out the upper 32-bit field - */ - ObjDesc->Integer.Value &= (ACPI_INTEGER) ACPI_UINT32_MAX; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExAcquireGlobalLock - * - * PARAMETERS: FieldFlags - Flags with Lock rule: - * AlwaysLock or NeverLock - * - * RETURN: None - * - * DESCRIPTION: Obtain the ACPI hardware Global Lock, only if the field - * flags specifiy that it is to be obtained before field access. - * - ******************************************************************************/ - -void -AcpiExAcquireGlobalLock ( - UINT32 FieldFlags) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (ExAcquireGlobalLock); - - - /* Only use the lock if the AlwaysLock bit is set */ - - if (!(FieldFlags & AML_FIELD_LOCK_RULE_MASK)) - { - return_VOID; - } - - /* Attempt to get the global lock, wait forever */ - - Status = AcpiExAcquireMutexObject (ACPI_WAIT_FOREVER, - AcpiGbl_GlobalLockMutex, AcpiOsGetThreadId ()); - - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not acquire Global Lock")); - } - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExReleaseGlobalLock - * - * PARAMETERS: FieldFlags - Flags with Lock rule: - * AlwaysLock or NeverLock - * - * RETURN: None - * - * DESCRIPTION: Release the ACPI hardware Global Lock - * - ******************************************************************************/ - -void -AcpiExReleaseGlobalLock ( - UINT32 FieldFlags) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (ExReleaseGlobalLock); - - - /* Only use the lock if the AlwaysLock bit is set */ - - if (!(FieldFlags & AML_FIELD_LOCK_RULE_MASK)) - { - return_VOID; - } - - /* Release the global lock */ - - Status = AcpiExReleaseMutexObject (AcpiGbl_GlobalLockMutex); - if (ACPI_FAILURE (Status)) - { - /* Report the error, but there isn't much else we can do */ - - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not release Global Lock")); - } - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExDigitsNeeded - * - * PARAMETERS: Value - Value to be represented - * Base - Base of representation - * - * RETURN: The number of digits. - * - * DESCRIPTION: Calculate the number of digits needed to represent the Value - * in the given Base (Radix) - * - ******************************************************************************/ - -static UINT32 -AcpiExDigitsNeeded ( - ACPI_INTEGER Value, - UINT32 Base) -{ - UINT32 NumDigits; - ACPI_INTEGER CurrentValue; - - - ACPI_FUNCTION_TRACE (ExDigitsNeeded); - - - /* ACPI_INTEGER is unsigned, so we don't worry about a '-' prefix */ - - if (Value == 0) - { - return_UINT32 (1); - } - - CurrentValue = Value; - NumDigits = 0; - - /* Count the digits in the requested base */ - - while (CurrentValue) - { - (void) AcpiUtShortDivide (CurrentValue, Base, &CurrentValue, NULL); - NumDigits++; - } - - return_UINT32 (NumDigits); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExEisaIdToString - * - * PARAMETERS: CompressedId - EISAID to be converted - * OutString - Where to put the converted string (8 bytes) - * - * RETURN: None - * - * DESCRIPTION: Convert a numeric EISAID to string representation. Return - * buffer must be large enough to hold the string. The string - * returned is always exactly of length ACPI_EISAID_STRING_SIZE - * (includes null terminator). The EISAID is always 32 bits. - * - ******************************************************************************/ - -void -AcpiExEisaIdToString ( - char *OutString, - ACPI_INTEGER CompressedId) -{ - UINT32 SwappedId; - - - ACPI_FUNCTION_ENTRY (); - - - /* The EISAID should be a 32-bit integer */ - - if (CompressedId > ACPI_UINT32_MAX) - { - ACPI_WARNING ((AE_INFO, - "Expected EISAID is larger than 32 bits: 0x%8.8X%8.8X, truncating", - ACPI_FORMAT_UINT64 (CompressedId))); - } - - /* Swap ID to big-endian to get contiguous bits */ - - SwappedId = AcpiUtDwordByteSwap ((UINT32) CompressedId); - - /* First 3 bytes are uppercase letters. Next 4 bytes are hexadecimal */ - - OutString[0] = (char) (0x40 + (((unsigned long) SwappedId >> 26) & 0x1F)); - OutString[1] = (char) (0x40 + ((SwappedId >> 21) & 0x1F)); - OutString[2] = (char) (0x40 + ((SwappedId >> 16) & 0x1F)); - OutString[3] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) SwappedId, 12); - OutString[4] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) SwappedId, 8); - OutString[5] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) SwappedId, 4); - OutString[6] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) SwappedId, 0); - OutString[7] = 0; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiExIntegerToString - * - * PARAMETERS: OutString - Where to put the converted string. At least - * 21 bytes are needed to hold the largest - * possible 64-bit integer. - * Value - Value to be converted - * - * RETURN: None, string - * - * DESCRIPTION: Convert a 64-bit integer to decimal string representation. - * Assumes string buffer is large enough to hold the string. The - * largest string is (ACPI_MAX64_DECIMAL_DIGITS + 1). - * - ******************************************************************************/ - -void -AcpiExIntegerToString ( - char *OutString, - ACPI_INTEGER Value) -{ - UINT32 Count; - UINT32 DigitsNeeded; - UINT32 Remainder; - - - ACPI_FUNCTION_ENTRY (); - - - DigitsNeeded = AcpiExDigitsNeeded (Value, 10); - OutString[DigitsNeeded] = 0; - - for (Count = DigitsNeeded; Count > 0; Count--) - { - (void) AcpiUtShortDivide (Value, 10, &Value, &Remainder); - OutString[Count-1] = (char) ('0' + Remainder);\ - } -} - -#endif diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/files.lnt b/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/files.lnt deleted file mode 100644 index ac0a36e79..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/files.lnt +++ /dev/null @@ -1,15 +0,0 @@ -// -// Basic ACPICA components -// -..\..\source\components\debugger\*.c -..\..\source\components\disassembler\*.c -..\..\source\components\dispatcher\*.c -..\..\source\components\events\*.c -..\..\source\components\executer\*.c -..\..\source\components\hardware\*.c -..\..\source\components\namespace\*.c -..\..\source\components\parser\*.c -..\..\source\components\resources\*.c -..\..\source\components\tables\*.c -..\..\source\components\utilities\*.c - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/lint.bat b/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/lint.bat deleted file mode 100644 index 18fde838d..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/lint.bat +++ /dev/null @@ -1,16 +0,0 @@ -del LintOut.txt -echo Begin 64-bit lint >> LintOut.txt - -"C:\Program Files\Lint\Lint-nt" +v std64.lnt +os(LintOut.txt) files.lnt - -echo 64-bit lint completed >> LintOut.txt -echo -------------------------------------------- >> LintOut.txt -echo Begin 32-bit lint >> LintOut.txt - -"C:\Program Files\Lint\Lint-nt" +v std32.lnt +os(LintOut.txt) files.lnt - -echo 32-bit lint completed >> LintOut.txt -@echo off -echo --- -echo Output placed in LintOut.txt - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/lset.bat b/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/lset.bat deleted file mode 100644 index 9f7de30eb..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/lset.bat +++ /dev/null @@ -1 +0,0 @@ -set path=%PATH%;$G diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/options.lnt b/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/options.lnt deleted file mode 100644 index 1dfd97b02..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/options.lnt +++ /dev/null @@ -1,82 +0,0 @@ -// Please note -- this is a representative set of error suppression -// options. Please adjust to suit your own policies -// See manual (chapter LIVING WITH LINT) -// for further details. - --i"..\..\source\include" --i"..\..\source\include\platform" - -/* Global options */ - --A // ANSI C only -+fie // Enum is integer --dACPI_USE_DO_WHILE_0 --dACPI_DEBUG_OUTPUT -//-dACPI_APPLICATION --dACPI_DEBUGGER --dACPI_DISASSEMBLER --dACPI_ENABLE_OBJECT_CACHE --dACPI_DBG_TRACK_ALLOCATIONS --dACPI_USE_LOCAL_CACHE --dACPI_CACHE_T=ACPI_MEMORY_LIST --d_LINT=1 - --printf(4, AcpiUtDebugPrint, AcpiUtDebugPrintRaw) --printf(1, AcpiOsPrintf, AcpiOsVprintf) - -/* Macro exceptions */ - --emacro( (413), ACPI_OFFSET ) // use of NULL pointer creates a stir --emacro( (413), ACPI_TO_INTEGER ) // use of NULL pointer creates a stir --emacro( (413), ACPI_TO_POINTER ) // use of NULL pointer creates a stir --emacro( (413), ACPI_ADD_PTR ) // use of NULL pointer creates a stir --emacro( (413), ACPI_PTR_DIFF ) // use of NULL pointer creates a stir --emacro( (413), ACPI_FADT_OFFSET ) // use of NULL pointer creates a stir --emacro( (413), ASL_RESDESC_OFFSET ) // use of NULL pointer creates a stir --emacro( (662), ACPI_ADD_PTR ) // allow pointer overrun for dynamic structs --emacro( (797), ACPI_ADD_PTR ) // allow pointer overrun for dynamic structs - --emacro( 826, ACPI_NEXT_RESOURCE) // Pointer cast --emacro( 826, ACPI_MOVE_UNALIGNED16_TO_16) // Pointer cast --emacro( 826, ACPI_MOVE_UNALIGNED16_TO_32) // Pointer cast --emacro( 826, ACPI_MOVE_UNALIGNED32_TO_32) // Pointer cast --emacro( 826, ACPI_MOVE_32_TO_32) // Pointer cast --emacro( 950, ACPI_INTERNAL_VAR_XFACE) // Uses non-ANSI --emacro( 950, ACPI_SYSTEM_XFACE) // Uses non-ANSI --emacro( 826, ACPI_CAST_PTR) // Pointer cast --emacro( 826, ACPI_ADD_PTR) // Pointer cast --emacro( 826, ACPI_LODWORD) // Pointer cast --emacro( 826, ACPI_HIDWORD) // Pointer cast - -/* Symbol exceptions */ - --esym( 528, _AcpiModuleName) // Symbol not always used, but always present --esym( 550, CurrentSp) // Used to track stack use --esym( 789, CurrentSp) // Used to track stack use --esym( 534, AcpiDmDumpName) // Return value not always used --esym( 534, AcpiDmCommaIfListMember) // Return value not always used - -// Suppress warning about redefinition during lint of multiple modules --esym(767,_COMPONENT) - - -/* Symbol exceptions for generation of iASL compiler */ - --esym( 534, TrWalkParseTree) // Return value not always used --esym( 534, AslCompilerparse) // Return value not always used --esym( 534, OpcSetOptimalIntegerSize) // Return value not always used --esym( 534, AslCompilererror) // Return value not always used - -/* Global exceptions */ - --e716 // Allow while(1) --e717 // Allow do..while(0) --e801 // Allow judicious use of goto without incurring complaint --e818 // Don't make suggestions about const to avoid "const" pollution --e715 // Ignore non-referenced formal parameters --e750 // Ignore non-referenced local macros (_MODULE_NAME, _COMPONENT, etc.) --e834 // - followed by + is "confusing" NOT. --e820 // Allow Boolean test of a parenthesized assignment --e778 // Allow constant expressions to evaluate to zero --e662 // Allow "pointer overrun" for dynamic structures --e831 \ No newline at end of file diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/readme.txt b/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/readme.txt deleted file mode 100644 index 3f427ad6b..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/readme.txt +++ /dev/null @@ -1,14 +0,0 @@ - -Lint files for PC-Lint (FlexLint) by Gimpel Software, Inc. - -These are the configuration and option files used to lint the -ACPI-CA software. - -lset.bat - adds lint directory to the command line search path -lint.bat - lint batch file for 32 and 64 bit lint -std16.lnt - 16-bit options -std32.lnt - 32-bit options -std64.lnt - 64-bit options -options.lnt - common options -others - windows/dos compiler option files - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/std16.lnt b/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/std16.lnt deleted file mode 100644 index c3a116a6e..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/std16.lnt +++ /dev/null @@ -1,16 +0,0 @@ -// Microsoft C and Visual C++ 4.x, -mL -si2 -spN2 -spF4, lib-win.lnt -// Standard lint options - - -c:\acpi\generate\lint\co-msc40.lnt -//c:\acpi\generate\lint\lib-win.lnt - --dMSDOS --dACPI_MACHINE_WIDTH=16 -//-d_MSC_VER - --e747 // Compiler supports parameter conversions - - -options.lnt -mL -si2 -spN2 -spF4 -sl4 - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/std32.lnt b/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/std32.lnt deleted file mode 100644 index 37e5c36be..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/std32.lnt +++ /dev/null @@ -1,14 +0,0 @@ -// Generic Compilers, -si4 -sp4 -// Standard lint options - --dACPI_MACHINE_WIDTH=32 --dWIN32=1 --d_MSC_VER=1 -+fll // enable long long -+rw(__asm) // enable in-line assembly --esym( 950, __asm) - // Used to track stack use --si4 -sp4 - -co.lnt -options.lnt diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/std64.lnt b/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/std64.lnt deleted file mode 100644 index 441c9756a..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/generate/lint/std64.lnt +++ /dev/null @@ -1,18 +0,0 @@ -// Generic Compilers, -si4 -sl4 -sp8 -// Standard lint options - --dACPI_MACHINE_WIDTH=64 - --e747 // Compiler supports parameter conversions --e46 // Compiler supports bitfields other than int --d_IA64 --dWIN64 --d_WIN64 --d_MAC -+fll // enable long long - --si4 -sl4 -sp8 -sll8 - -co.lnt -options.lnt - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwacpi.c b/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwacpi.c deleted file mode 100644 index 6b6d90ee0..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwacpi.c +++ /dev/null @@ -1,278 +0,0 @@ - -/****************************************************************************** - * - * Module Name: hwacpi - ACPI Hardware Initialization/Mode Interface - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __HWACPI_C__ - -#include "acpi.h" -#include "accommon.h" - - -#define _COMPONENT ACPI_HARDWARE - ACPI_MODULE_NAME ("hwacpi") - - -/****************************************************************************** - * - * FUNCTION: AcpiHwSetMode - * - * PARAMETERS: Mode - SYS_MODE_ACPI or SYS_MODE_LEGACY - * - * RETURN: Status - * - * DESCRIPTION: Transitions the system into the requested mode. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwSetMode ( - UINT32 Mode) -{ - - ACPI_STATUS Status; - UINT32 Retry; - - - ACPI_FUNCTION_TRACE (HwSetMode); - - /* - * ACPI 2.0 clarified that if SMI_CMD in FADT is zero, - * system does not support mode transition. - */ - if (!AcpiGbl_FADT.SmiCommand) - { - ACPI_ERROR ((AE_INFO, "No SMI_CMD in FADT, mode transition failed")); - return_ACPI_STATUS (AE_NO_HARDWARE_RESPONSE); - } - - /* - * ACPI 2.0 clarified the meaning of ACPI_ENABLE and ACPI_DISABLE - * in FADT: If it is zero, enabling or disabling is not supported. - * As old systems may have used zero for mode transition, - * we make sure both the numbers are zero to determine these - * transitions are not supported. - */ - if (!AcpiGbl_FADT.AcpiEnable && !AcpiGbl_FADT.AcpiDisable) - { - ACPI_ERROR ((AE_INFO, - "No ACPI mode transition supported in this system " - "(enable/disable both zero)")); - return_ACPI_STATUS (AE_OK); - } - - switch (Mode) - { - case ACPI_SYS_MODE_ACPI: - - /* BIOS should have disabled ALL fixed and GP events */ - - Status = AcpiHwWritePort (AcpiGbl_FADT.SmiCommand, - (UINT32) AcpiGbl_FADT.AcpiEnable, 8); - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Attempting to enable ACPI mode\n")); - break; - - case ACPI_SYS_MODE_LEGACY: - - /* - * BIOS should clear all fixed status bits and restore fixed event - * enable bits to default - */ - Status = AcpiHwWritePort (AcpiGbl_FADT.SmiCommand, - (UINT32) AcpiGbl_FADT.AcpiDisable, 8); - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Attempting to enable Legacy (non-ACPI) mode\n")); - break; - - default: - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not write ACPI mode change")); - return_ACPI_STATUS (Status); - } - - /* - * Some hardware takes a LONG time to switch modes. Give them 3 sec to - * do so, but allow faster systems to proceed more quickly. - */ - Retry = 3000; - while (Retry) - { - if (AcpiHwGetMode() == Mode) - { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Mode %X successfully enabled\n", - Mode)); - return_ACPI_STATUS (AE_OK); - } - AcpiOsStall(1000); - Retry--; - } - - ACPI_ERROR ((AE_INFO, "Hardware did not change modes")); - return_ACPI_STATUS (AE_NO_HARDWARE_RESPONSE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiHwGetMode - * - * PARAMETERS: none - * - * RETURN: SYS_MODE_ACPI or SYS_MODE_LEGACY - * - * DESCRIPTION: Return current operating state of system. Determined by - * querying the SCI_EN bit. - * - ******************************************************************************/ - -UINT32 -AcpiHwGetMode ( - void) -{ - ACPI_STATUS Status; - UINT32 Value; - - - ACPI_FUNCTION_TRACE (HwGetMode); - - - /* - * ACPI 2.0 clarified that if SMI_CMD in FADT is zero, - * system does not support mode transition. - */ - if (!AcpiGbl_FADT.SmiCommand) - { - return_UINT32 (ACPI_SYS_MODE_ACPI); - } - - Status = AcpiReadBitRegister (ACPI_BITREG_SCI_ENABLE, &Value); - if (ACPI_FAILURE (Status)) - { - return_UINT32 (ACPI_SYS_MODE_LEGACY); - } - - if (Value) - { - return_UINT32 (ACPI_SYS_MODE_ACPI); - } - else - { - return_UINT32 (ACPI_SYS_MODE_LEGACY); - } -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwgpe.c b/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwgpe.c deleted file mode 100644 index a45603d9d..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwgpe.c +++ /dev/null @@ -1,597 +0,0 @@ - -/****************************************************************************** - * - * Module Name: hwgpe - Low level GPE enable/disable/clear functions - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#include "acpi.h" -#include "accommon.h" -#include "acevents.h" - -#define _COMPONENT ACPI_HARDWARE - ACPI_MODULE_NAME ("hwgpe") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiHwEnableWakeupGpeBlock ( - ACPI_GPE_XRUPT_INFO *GpeXruptInfo, - ACPI_GPE_BLOCK_INFO *GpeBlock, - void *Context); - - -/****************************************************************************** - * - * FUNCTION: AcpiHwLowDisableGpe - * - * PARAMETERS: GpeEventInfo - Info block for the GPE to be disabled - * - * RETURN: Status - * - * DESCRIPTION: Disable a single GPE in the enable register. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwLowDisableGpe ( - ACPI_GPE_EVENT_INFO *GpeEventInfo) -{ - ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; - ACPI_STATUS Status; - UINT32 EnableMask; - - - /* Get the info block for the entire GPE register */ - - GpeRegisterInfo = GpeEventInfo->RegisterInfo; - if (!GpeRegisterInfo) - { - return (AE_NOT_EXIST); - } - - /* Get current value of the enable register that contains this GPE */ - - Status = AcpiHwRead (&EnableMask, &GpeRegisterInfo->EnableAddress); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Clear just the bit that corresponds to this GPE */ - - ACPI_CLEAR_BIT (EnableMask, ((UINT32) 1 << - (GpeEventInfo->GpeNumber - GpeRegisterInfo->BaseGpeNumber))); - - - /* Write the updated enable mask */ - - Status = AcpiHwWrite (EnableMask, &GpeRegisterInfo->EnableAddress); - return (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwWriteGpeEnableReg - * - * PARAMETERS: GpeEventInfo - Info block for the GPE to be enabled - * - * RETURN: Status - * - * DESCRIPTION: Write a GPE enable register. Note: The bit for this GPE must - * already be cleared or set in the parent register - * EnableForRun mask. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwWriteGpeEnableReg ( - ACPI_GPE_EVENT_INFO *GpeEventInfo) -{ - ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; - ACPI_STATUS Status; - - - ACPI_FUNCTION_ENTRY (); - - - /* Get the info block for the entire GPE register */ - - GpeRegisterInfo = GpeEventInfo->RegisterInfo; - if (!GpeRegisterInfo) - { - return (AE_NOT_EXIST); - } - - /* Write the entire GPE (runtime) enable register */ - - Status = AcpiHwWrite (GpeRegisterInfo->EnableForRun, - &GpeRegisterInfo->EnableAddress); - - return (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwClearGpe - * - * PARAMETERS: GpeEventInfo - Info block for the GPE to be cleared - * - * RETURN: Status - * - * DESCRIPTION: Clear the status bit for a single GPE. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwClearGpe ( - ACPI_GPE_EVENT_INFO *GpeEventInfo) -{ - ACPI_STATUS Status; - UINT8 RegisterBit; - - - ACPI_FUNCTION_ENTRY (); - - - RegisterBit = (UINT8) (1 << - (GpeEventInfo->GpeNumber - GpeEventInfo->RegisterInfo->BaseGpeNumber)); - - /* - * Write a one to the appropriate bit in the status register to - * clear this GPE. - */ - Status = AcpiHwWrite (RegisterBit, - &GpeEventInfo->RegisterInfo->StatusAddress); - - return (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwGetGpeStatus - * - * PARAMETERS: GpeEventInfo - Info block for the GPE to queried - * EventStatus - Where the GPE status is returned - * - * RETURN: Status - * - * DESCRIPTION: Return the status of a single GPE. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwGetGpeStatus ( - ACPI_GPE_EVENT_INFO *GpeEventInfo, - ACPI_EVENT_STATUS *EventStatus) -{ - UINT32 InByte; - UINT8 RegisterBit; - ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; - ACPI_STATUS Status; - ACPI_EVENT_STATUS LocalEventStatus = 0; - - - ACPI_FUNCTION_ENTRY (); - - - if (!EventStatus) - { - return (AE_BAD_PARAMETER); - } - - /* Get the info block for the entire GPE register */ - - GpeRegisterInfo = GpeEventInfo->RegisterInfo; - - /* Get the register bitmask for this GPE */ - - RegisterBit = (UINT8) (1 << - (GpeEventInfo->GpeNumber - GpeEventInfo->RegisterInfo->BaseGpeNumber)); - - /* GPE currently enabled? (enabled for runtime?) */ - - if (RegisterBit & GpeRegisterInfo->EnableForRun) - { - LocalEventStatus |= ACPI_EVENT_FLAG_ENABLED; - } - - /* GPE enabled for wake? */ - - if (RegisterBit & GpeRegisterInfo->EnableForWake) - { - LocalEventStatus |= ACPI_EVENT_FLAG_WAKE_ENABLED; - } - - /* GPE currently active (status bit == 1)? */ - - Status = AcpiHwRead (&InByte, &GpeRegisterInfo->StatusAddress); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - - if (RegisterBit & InByte) - { - LocalEventStatus |= ACPI_EVENT_FLAG_SET; - } - - /* Set return value */ - - (*EventStatus) = LocalEventStatus; - - -UnlockAndExit: - return (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwDisableGpeBlock - * - * PARAMETERS: GpeXruptInfo - GPE Interrupt info - * GpeBlock - Gpe Block info - * - * RETURN: Status - * - * DESCRIPTION: Disable all GPEs within a single GPE block - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwDisableGpeBlock ( - ACPI_GPE_XRUPT_INFO *GpeXruptInfo, - ACPI_GPE_BLOCK_INFO *GpeBlock, - void *Context) -{ - UINT32 i; - ACPI_STATUS Status; - - - /* Examine each GPE Register within the block */ - - for (i = 0; i < GpeBlock->RegisterCount; i++) - { - /* Disable all GPEs in this register */ - - Status = AcpiHwWrite (0x00, &GpeBlock->RegisterInfo[i].EnableAddress); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwClearGpeBlock - * - * PARAMETERS: GpeXruptInfo - GPE Interrupt info - * GpeBlock - Gpe Block info - * - * RETURN: Status - * - * DESCRIPTION: Clear status bits for all GPEs within a single GPE block - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwClearGpeBlock ( - ACPI_GPE_XRUPT_INFO *GpeXruptInfo, - ACPI_GPE_BLOCK_INFO *GpeBlock, - void *Context) -{ - UINT32 i; - ACPI_STATUS Status; - - - /* Examine each GPE Register within the block */ - - for (i = 0; i < GpeBlock->RegisterCount; i++) - { - /* Clear status on all GPEs in this register */ - - Status = AcpiHwWrite (0xFF, &GpeBlock->RegisterInfo[i].StatusAddress); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwEnableRuntimeGpeBlock - * - * PARAMETERS: GpeXruptInfo - GPE Interrupt info - * GpeBlock - Gpe Block info - * - * RETURN: Status - * - * DESCRIPTION: Enable all "runtime" GPEs within a single GPE block. Includes - * combination wake/run GPEs. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwEnableRuntimeGpeBlock ( - ACPI_GPE_XRUPT_INFO *GpeXruptInfo, - ACPI_GPE_BLOCK_INFO *GpeBlock, - void *Context) -{ - UINT32 i; - ACPI_STATUS Status; - - - /* NOTE: assumes that all GPEs are currently disabled */ - - /* Examine each GPE Register within the block */ - - for (i = 0; i < GpeBlock->RegisterCount; i++) - { - if (!GpeBlock->RegisterInfo[i].EnableForRun) - { - continue; - } - - /* Enable all "runtime" GPEs in this register */ - - Status = AcpiHwWrite (GpeBlock->RegisterInfo[i].EnableForRun, - &GpeBlock->RegisterInfo[i].EnableAddress); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwEnableWakeupGpeBlock - * - * PARAMETERS: GpeXruptInfo - GPE Interrupt info - * GpeBlock - Gpe Block info - * - * RETURN: Status - * - * DESCRIPTION: Enable all "wake" GPEs within a single GPE block. Includes - * combination wake/run GPEs. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiHwEnableWakeupGpeBlock ( - ACPI_GPE_XRUPT_INFO *GpeXruptInfo, - ACPI_GPE_BLOCK_INFO *GpeBlock, - void *Context) -{ - UINT32 i; - ACPI_STATUS Status; - - - /* Examine each GPE Register within the block */ - - for (i = 0; i < GpeBlock->RegisterCount; i++) - { - if (!GpeBlock->RegisterInfo[i].EnableForWake) - { - continue; - } - - /* Enable all "wake" GPEs in this register */ - - Status = AcpiHwWrite (GpeBlock->RegisterInfo[i].EnableForWake, - &GpeBlock->RegisterInfo[i].EnableAddress); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwDisableAllGpes - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Disable and clear all GPEs in all GPE blocks - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwDisableAllGpes ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (HwDisableAllGpes); - - - Status = AcpiEvWalkGpeList (AcpiHwDisableGpeBlock, NULL); - Status = AcpiEvWalkGpeList (AcpiHwClearGpeBlock, NULL); - return_ACPI_STATUS (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwEnableAllRuntimeGpes - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Enable all "runtime" GPEs, in all GPE blocks - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwEnableAllRuntimeGpes ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (HwEnableAllRuntimeGpes); - - - Status = AcpiEvWalkGpeList (AcpiHwEnableRuntimeGpeBlock, NULL); - return_ACPI_STATUS (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwEnableAllWakeupGpes - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Enable all "wakeup" GPEs, in all GPE blocks - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwEnableAllWakeupGpes ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (HwEnableAllWakeupGpes); - - - Status = AcpiEvWalkGpeList (AcpiHwEnableWakeupGpeBlock, NULL); - return_ACPI_STATUS (Status); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwregs.c b/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwregs.c deleted file mode 100644 index 163840d7f..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwregs.c +++ /dev/null @@ -1,805 +0,0 @@ - -/******************************************************************************* - * - * Module Name: hwregs - Read/write access functions for the various ACPI - * control and status registers. - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __HWREGS_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acevents.h" - -#define _COMPONENT ACPI_HARDWARE - ACPI_MODULE_NAME ("hwregs") - - -/* Local Prototypes */ - -static ACPI_STATUS -AcpiHwReadMultiple ( - UINT32 *Value, - ACPI_GENERIC_ADDRESS *RegisterA, - ACPI_GENERIC_ADDRESS *RegisterB); - -static ACPI_STATUS -AcpiHwWriteMultiple ( - UINT32 Value, - ACPI_GENERIC_ADDRESS *RegisterA, - ACPI_GENERIC_ADDRESS *RegisterB); - - -/****************************************************************************** - * - * FUNCTION: AcpiHwValidateRegister - * - * PARAMETERS: Reg - GAS register structure - * MaxBitWidth - Max BitWidth supported (32 or 64) - * Address - Pointer to where the gas->address - * is returned - * - * RETURN: Status - * - * DESCRIPTION: Validate the contents of a GAS register. Checks the GAS - * pointer, Address, SpaceId, BitWidth, and BitOffset. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwValidateRegister ( - ACPI_GENERIC_ADDRESS *Reg, - UINT8 MaxBitWidth, - UINT64 *Address) -{ - - /* Must have a valid pointer to a GAS structure */ - - if (!Reg) - { - return (AE_BAD_PARAMETER); - } - - /* - * Copy the target address. This handles possible alignment issues. - * Address must not be null. A null address also indicates an optional - * ACPI register that is not supported, so no error message. - */ - ACPI_MOVE_64_TO_64 (Address, &Reg->Address); - if (!(*Address)) - { - return (AE_BAD_ADDRESS); - } - - /* Validate the SpaceID */ - - if ((Reg->SpaceId != ACPI_ADR_SPACE_SYSTEM_MEMORY) && - (Reg->SpaceId != ACPI_ADR_SPACE_SYSTEM_IO)) - { - ACPI_ERROR ((AE_INFO, - "Unsupported address space: 0x%X", Reg->SpaceId)); - return (AE_SUPPORT); - } - - /* Validate the BitWidth */ - - if ((Reg->BitWidth != 8) && - (Reg->BitWidth != 16) && - (Reg->BitWidth != 32) && - (Reg->BitWidth != MaxBitWidth)) - { - ACPI_ERROR ((AE_INFO, - "Unsupported register bit width: 0x%X", Reg->BitWidth)); - return (AE_SUPPORT); - } - - /* Validate the BitOffset. Just a warning for now. */ - - if (Reg->BitOffset != 0) - { - ACPI_WARNING ((AE_INFO, - "Unsupported register bit offset: 0x%X", Reg->BitOffset)); - } - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwRead - * - * PARAMETERS: Value - Where the value is returned - * Reg - GAS register structure - * - * RETURN: Status - * - * DESCRIPTION: Read from either memory or IO space. This is a 32-bit max - * version of AcpiRead, used internally since the overhead of - * 64-bit values is not needed. - * - * LIMITATIONS: - * BitWidth must be exactly 8, 16, or 32. - * SpaceID must be SystemMemory or SystemIO. - * BitOffset and AccessWidth are currently ignored, as there has - * not been a need to implement these. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwRead ( - UINT32 *Value, - ACPI_GENERIC_ADDRESS *Reg) -{ - UINT64 Address; - ACPI_STATUS Status; - - - ACPI_FUNCTION_NAME (HwRead); - - - /* Validate contents of the GAS register */ - - Status = AcpiHwValidateRegister (Reg, 32, &Address); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Initialize entire 32-bit return value to zero */ - - *Value = 0; - - /* - * Two address spaces supported: Memory or IO. PCI_Config is - * not supported here because the GAS structure is insufficient - */ - if (Reg->SpaceId == ACPI_ADR_SPACE_SYSTEM_MEMORY) - { - Status = AcpiOsReadMemory ((ACPI_PHYSICAL_ADDRESS) - Address, Value, Reg->BitWidth); - } - else /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */ - { - Status = AcpiHwReadPort ((ACPI_IO_ADDRESS) - Address, Value, Reg->BitWidth); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_IO, - "Read: %8.8X width %2d from %8.8X%8.8X (%s)\n", - *Value, Reg->BitWidth, ACPI_FORMAT_UINT64 (Address), - AcpiUtGetRegionName (Reg->SpaceId))); - - return (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwWrite - * - * PARAMETERS: Value - Value to be written - * Reg - GAS register structure - * - * RETURN: Status - * - * DESCRIPTION: Write to either memory or IO space. This is a 32-bit max - * version of AcpiWrite, used internally since the overhead of - * 64-bit values is not needed. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwWrite ( - UINT32 Value, - ACPI_GENERIC_ADDRESS *Reg) -{ - UINT64 Address; - ACPI_STATUS Status; - - - ACPI_FUNCTION_NAME (HwWrite); - - - /* Validate contents of the GAS register */ - - Status = AcpiHwValidateRegister (Reg, 32, &Address); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* - * Two address spaces supported: Memory or IO. PCI_Config is - * not supported here because the GAS structure is insufficient - */ - if (Reg->SpaceId == ACPI_ADR_SPACE_SYSTEM_MEMORY) - { - Status = AcpiOsWriteMemory ((ACPI_PHYSICAL_ADDRESS) - Address, Value, Reg->BitWidth); - } - else /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */ - { - Status = AcpiHwWritePort ((ACPI_IO_ADDRESS) - Address, Value, Reg->BitWidth); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_IO, - "Wrote: %8.8X width %2d to %8.8X%8.8X (%s)\n", - Value, Reg->BitWidth, ACPI_FORMAT_UINT64 (Address), - AcpiUtGetRegionName (Reg->SpaceId))); - - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiHwClearAcpiStatus - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Clears all fixed and general purpose status bits - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwClearAcpiStatus ( - void) -{ - ACPI_STATUS Status; - ACPI_CPU_FLAGS LockFlags = 0; - - - ACPI_FUNCTION_TRACE (HwClearAcpiStatus); - - - ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %8.8X%8.8X\n", - ACPI_BITMASK_ALL_FIXED_STATUS, - ACPI_FORMAT_UINT64 (AcpiGbl_XPm1aStatus.Address))); - - LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock); - - /* Clear the fixed events in PM1 A/B */ - - Status = AcpiHwRegisterWrite (ACPI_REGISTER_PM1_STATUS, - ACPI_BITMASK_ALL_FIXED_STATUS); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - - /* Clear the GPE Bits in all GPE registers in all GPE blocks */ - - Status = AcpiEvWalkGpeList (AcpiHwClearGpeBlock, NULL); - -UnlockAndExit: - AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiHwGetRegisterBitMask - * - * PARAMETERS: RegisterId - Index of ACPI Register to access - * - * RETURN: The bitmask to be used when accessing the register - * - * DESCRIPTION: Map RegisterId into a register bitmask. - * - ******************************************************************************/ - -ACPI_BIT_REGISTER_INFO * -AcpiHwGetBitRegisterInfo ( - UINT32 RegisterId) -{ - ACPI_FUNCTION_ENTRY (); - - - if (RegisterId > ACPI_BITREG_MAX) - { - ACPI_ERROR ((AE_INFO, "Invalid BitRegister ID: %X", RegisterId)); - return (NULL); - } - - return (&AcpiGbl_BitRegisterInfo[RegisterId]); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwWritePm1Control - * - * PARAMETERS: Pm1aControl - Value to be written to PM1A control - * Pm1bControl - Value to be written to PM1B control - * - * RETURN: Status - * - * DESCRIPTION: Write the PM1 A/B control registers. These registers are - * different than than the PM1 A/B status and enable registers - * in that different values can be written to the A/B registers. - * Most notably, the SLP_TYP bits can be different, as per the - * values returned from the _Sx predefined methods. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwWritePm1Control ( - UINT32 Pm1aControl, - UINT32 Pm1bControl) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (HwWritePm1Control); - - - Status = AcpiHwWrite (Pm1aControl, &AcpiGbl_FADT.XPm1aControlBlock); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - if (AcpiGbl_FADT.XPm1bControlBlock.Address) - { - Status = AcpiHwWrite (Pm1bControl, &AcpiGbl_FADT.XPm1bControlBlock); - } - return_ACPI_STATUS (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwRegisterRead - * - * PARAMETERS: RegisterId - ACPI Register ID - * ReturnValue - Where the register value is returned - * - * RETURN: Status and the value read. - * - * DESCRIPTION: Read from the specified ACPI register - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwRegisterRead ( - UINT32 RegisterId, - UINT32 *ReturnValue) -{ - UINT32 Value = 0; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (HwRegisterRead); - - - switch (RegisterId) - { - case ACPI_REGISTER_PM1_STATUS: /* PM1 A/B: 16-bit access each */ - - Status = AcpiHwReadMultiple (&Value, - &AcpiGbl_XPm1aStatus, - &AcpiGbl_XPm1bStatus); - break; - - - case ACPI_REGISTER_PM1_ENABLE: /* PM1 A/B: 16-bit access each */ - - Status = AcpiHwReadMultiple (&Value, - &AcpiGbl_XPm1aEnable, - &AcpiGbl_XPm1bEnable); - break; - - - case ACPI_REGISTER_PM1_CONTROL: /* PM1 A/B: 16-bit access each */ - - Status = AcpiHwReadMultiple (&Value, - &AcpiGbl_FADT.XPm1aControlBlock, - &AcpiGbl_FADT.XPm1bControlBlock); - - /* - * Zero the write-only bits. From the ACPI specification, "Hardware - * Write-Only Bits": "Upon reads to registers with write-only bits, - * software masks out all write-only bits." - */ - Value &= ~ACPI_PM1_CONTROL_WRITEONLY_BITS; - break; - - - case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */ - - Status = AcpiHwRead (&Value, &AcpiGbl_FADT.XPm2ControlBlock); - break; - - - case ACPI_REGISTER_PM_TIMER: /* 32-bit access */ - - Status = AcpiHwRead (&Value, &AcpiGbl_FADT.XPmTimerBlock); - break; - - - case ACPI_REGISTER_SMI_COMMAND_BLOCK: /* 8-bit access */ - - Status = AcpiHwReadPort (AcpiGbl_FADT.SmiCommand, &Value, 8); - break; - - - default: - ACPI_ERROR ((AE_INFO, "Unknown Register ID: %X", - RegisterId)); - Status = AE_BAD_PARAMETER; - break; - } - - if (ACPI_SUCCESS (Status)) - { - *ReturnValue = Value; - } - - return_ACPI_STATUS (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwRegisterWrite - * - * PARAMETERS: RegisterId - ACPI Register ID - * Value - The value to write - * - * RETURN: Status - * - * DESCRIPTION: Write to the specified ACPI register - * - * NOTE: In accordance with the ACPI specification, this function automatically - * preserves the value of the following bits, meaning that these bits cannot be - * changed via this interface: - * - * PM1_CONTROL[0] = SCI_EN - * PM1_CONTROL[9] - * PM1_STATUS[11] - * - * ACPI References: - * 1) Hardware Ignored Bits: When software writes to a register with ignored - * bit fields, it preserves the ignored bit fields - * 2) SCI_EN: OSPM always preserves this bit position - * - ******************************************************************************/ - -ACPI_STATUS -AcpiHwRegisterWrite ( - UINT32 RegisterId, - UINT32 Value) -{ - ACPI_STATUS Status; - UINT32 ReadValue; - - - ACPI_FUNCTION_TRACE (HwRegisterWrite); - - - switch (RegisterId) - { - case ACPI_REGISTER_PM1_STATUS: /* PM1 A/B: 16-bit access each */ - /* - * Handle the "ignored" bit in PM1 Status. According to the ACPI - * specification, ignored bits are to be preserved when writing. - * Normally, this would mean a read/modify/write sequence. However, - * preserving a bit in the status register is different. Writing a - * one clears the status, and writing a zero preserves the status. - * Therefore, we must always write zero to the ignored bit. - * - * This behavior is clarified in the ACPI 4.0 specification. - */ - Value &= ~ACPI_PM1_STATUS_PRESERVED_BITS; - - Status = AcpiHwWriteMultiple (Value, - &AcpiGbl_XPm1aStatus, - &AcpiGbl_XPm1bStatus); - break; - - - case ACPI_REGISTER_PM1_ENABLE: /* PM1 A/B: 16-bit access each */ - - Status = AcpiHwWriteMultiple (Value, - &AcpiGbl_XPm1aEnable, - &AcpiGbl_XPm1bEnable); - break; - - - case ACPI_REGISTER_PM1_CONTROL: /* PM1 A/B: 16-bit access each */ - - /* - * Perform a read first to preserve certain bits (per ACPI spec) - * Note: This includes SCI_EN, we never want to change this bit - */ - Status = AcpiHwReadMultiple (&ReadValue, - &AcpiGbl_FADT.XPm1aControlBlock, - &AcpiGbl_FADT.XPm1bControlBlock); - if (ACPI_FAILURE (Status)) - { - goto Exit; - } - - /* Insert the bits to be preserved */ - - ACPI_INSERT_BITS (Value, ACPI_PM1_CONTROL_PRESERVED_BITS, ReadValue); - - /* Now we can write the data */ - - Status = AcpiHwWriteMultiple (Value, - &AcpiGbl_FADT.XPm1aControlBlock, - &AcpiGbl_FADT.XPm1bControlBlock); - break; - - - case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */ - - /* - * For control registers, all reserved bits must be preserved, - * as per the ACPI spec. - */ - Status = AcpiHwRead (&ReadValue, &AcpiGbl_FADT.XPm2ControlBlock); - if (ACPI_FAILURE (Status)) - { - goto Exit; - } - - /* Insert the bits to be preserved */ - - ACPI_INSERT_BITS (Value, ACPI_PM2_CONTROL_PRESERVED_BITS, ReadValue); - - Status = AcpiHwWrite (Value, &AcpiGbl_FADT.XPm2ControlBlock); - break; - - - case ACPI_REGISTER_PM_TIMER: /* 32-bit access */ - - Status = AcpiHwWrite (Value, &AcpiGbl_FADT.XPmTimerBlock); - break; - - - case ACPI_REGISTER_SMI_COMMAND_BLOCK: /* 8-bit access */ - - /* SMI_CMD is currently always in IO space */ - - Status = AcpiHwWritePort (AcpiGbl_FADT.SmiCommand, Value, 8); - break; - - - default: - ACPI_ERROR ((AE_INFO, "Unknown Register ID: %X", - RegisterId)); - Status = AE_BAD_PARAMETER; - break; - } - -Exit: - return_ACPI_STATUS (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwReadMultiple - * - * PARAMETERS: Value - Where the register value is returned - * RegisterA - First ACPI register (required) - * RegisterB - Second ACPI register (optional) - * - * RETURN: Status - * - * DESCRIPTION: Read from the specified two-part ACPI register (such as PM1 A/B) - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiHwReadMultiple ( - UINT32 *Value, - ACPI_GENERIC_ADDRESS *RegisterA, - ACPI_GENERIC_ADDRESS *RegisterB) -{ - UINT32 ValueA = 0; - UINT32 ValueB = 0; - ACPI_STATUS Status; - - - /* The first register is always required */ - - Status = AcpiHwRead (&ValueA, RegisterA); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Second register is optional */ - - if (RegisterB->Address) - { - Status = AcpiHwRead (&ValueB, RegisterB); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - - /* - * OR the two return values together. No shifting or masking is necessary, - * because of how the PM1 registers are defined in the ACPI specification: - * - * "Although the bits can be split between the two register blocks (each - * register block has a unique pointer within the FADT), the bit positions - * are maintained. The register block with unimplemented bits (that is, - * those implemented in the other register block) always returns zeros, - * and writes have no side effects" - */ - *Value = (ValueA | ValueB); - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwWriteMultiple - * - * PARAMETERS: Value - The value to write - * RegisterA - First ACPI register (required) - * RegisterB - Second ACPI register (optional) - * - * RETURN: Status - * - * DESCRIPTION: Write to the specified two-part ACPI register (such as PM1 A/B) - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiHwWriteMultiple ( - UINT32 Value, - ACPI_GENERIC_ADDRESS *RegisterA, - ACPI_GENERIC_ADDRESS *RegisterB) -{ - ACPI_STATUS Status; - - - /* The first register is always required */ - - Status = AcpiHwWrite (Value, RegisterA); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* - * Second register is optional - * - * No bit shifting or clearing is necessary, because of how the PM1 - * registers are defined in the ACPI specification: - * - * "Although the bits can be split between the two register blocks (each - * register block has a unique pointer within the FADT), the bit positions - * are maintained. The register block with unimplemented bits (that is, - * those implemented in the other register block) always returns zeros, - * and writes have no side effects" - */ - if (RegisterB->Address) - { - Status = AcpiHwWrite (Value, RegisterB); - } - - return (Status); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwsleep.c b/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwsleep.c deleted file mode 100644 index fed4f1ddb..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwsleep.c +++ /dev/null @@ -1,711 +0,0 @@ - -/****************************************************************************** - * - * Name: hwsleep.c - ACPI Hardware Sleep/Wake Interface - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#include "acpi.h" -#include "accommon.h" - -#define _COMPONENT ACPI_HARDWARE - ACPI_MODULE_NAME ("hwsleep") - - -/******************************************************************************* - * - * FUNCTION: AcpiSetFirmwareWakingVector - * - * PARAMETERS: PhysicalAddress - 32-bit physical address of ACPI real mode - * entry point. - * - * RETURN: Status - * - * DESCRIPTION: Sets the 32-bit FirmwareWakingVector field of the FACS - * - ******************************************************************************/ - -ACPI_STATUS -AcpiSetFirmwareWakingVector ( - UINT32 PhysicalAddress) -{ - ACPI_FUNCTION_TRACE (AcpiSetFirmwareWakingVector); - - - /* Set the 32-bit vector */ - - AcpiGbl_FACS->FirmwareWakingVector = PhysicalAddress; - - /* Clear the 64-bit vector if it exists */ - - if ((AcpiGbl_FACS->Length > 32) && (AcpiGbl_FACS->Version >= 1)) - { - AcpiGbl_FACS->XFirmwareWakingVector = 0; - } - - return_ACPI_STATUS (AE_OK); -} - -ACPI_EXPORT_SYMBOL (AcpiSetFirmwareWakingVector) - - -#if ACPI_MACHINE_WIDTH == 64 -/******************************************************************************* - * - * FUNCTION: AcpiSetFirmwareWakingVector64 - * - * PARAMETERS: PhysicalAddress - 64-bit physical address of ACPI protected - * mode entry point. - * - * RETURN: Status - * - * DESCRIPTION: Sets the 64-bit X_FirmwareWakingVector field of the FACS, if - * it exists in the table. This function is intended for use with - * 64-bit host operating systems. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiSetFirmwareWakingVector64 ( - UINT64 PhysicalAddress) -{ - ACPI_FUNCTION_TRACE (AcpiSetFirmwareWakingVector64); - - - /* Determine if the 64-bit vector actually exists */ - - if ((AcpiGbl_FACS->Length <= 32) || (AcpiGbl_FACS->Version < 1)) - { - return_ACPI_STATUS (AE_NOT_EXIST); - } - - /* Clear 32-bit vector, set the 64-bit X_ vector */ - - AcpiGbl_FACS->FirmwareWakingVector = 0; - AcpiGbl_FACS->XFirmwareWakingVector = PhysicalAddress; - return_ACPI_STATUS (AE_OK); -} - -ACPI_EXPORT_SYMBOL (AcpiSetFirmwareWakingVector64) -#endif - -/******************************************************************************* - * - * FUNCTION: AcpiEnterSleepStatePrep - * - * PARAMETERS: SleepState - Which sleep state to enter - * - * RETURN: Status - * - * DESCRIPTION: Prepare to enter a system sleep state (see ACPI 2.0 spec p 231) - * This function must execute with interrupts enabled. - * We break sleeping into 2 stages so that OSPM can handle - * various OS-specific tasks between the two steps. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEnterSleepStatePrep ( - UINT8 SleepState) -{ - ACPI_STATUS Status; - ACPI_OBJECT_LIST ArgList; - ACPI_OBJECT Arg; - - - ACPI_FUNCTION_TRACE (AcpiEnterSleepStatePrep); - - - /* _PSW methods could be run here to enable wake-on keyboard, LAN, etc. */ - - Status = AcpiGetSleepTypeData (SleepState, - &AcpiGbl_SleepTypeA, &AcpiGbl_SleepTypeB); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Execute the _PTS method (Prepare To Sleep) */ - - ArgList.Count = 1; - ArgList.Pointer = &Arg; - Arg.Type = ACPI_TYPE_INTEGER; - Arg.Integer.Value = SleepState; - - Status = AcpiEvaluateObject (NULL, METHOD_NAME__PTS, &ArgList, NULL); - if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND) - { - return_ACPI_STATUS (Status); - } - - /* Setup the argument to the _SST method (System STatus) */ - - switch (SleepState) - { - case ACPI_STATE_S0: - Arg.Integer.Value = ACPI_SST_WORKING; - break; - - case ACPI_STATE_S1: - case ACPI_STATE_S2: - case ACPI_STATE_S3: - Arg.Integer.Value = ACPI_SST_SLEEPING; - break; - - case ACPI_STATE_S4: - Arg.Integer.Value = ACPI_SST_SLEEP_CONTEXT; - break; - - default: - Arg.Integer.Value = ACPI_SST_INDICATOR_OFF; /* Default is off */ - break; - } - - /* - * Set the system indicators to show the desired sleep state. - * _SST is an optional method (return no error if not found) - */ - Status = AcpiEvaluateObject (NULL, METHOD_NAME__SST, &ArgList, NULL); - if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND) - { - ACPI_EXCEPTION ((AE_INFO, Status, "While executing method _SST")); - } - - return_ACPI_STATUS (AE_OK); -} - -ACPI_EXPORT_SYMBOL (AcpiEnterSleepStatePrep) - - -/******************************************************************************* - * - * FUNCTION: AcpiEnterSleepState - * - * PARAMETERS: SleepState - Which sleep state to enter - * - * RETURN: Status - * - * DESCRIPTION: Enter a system sleep state - * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEnterSleepState ( - UINT8 SleepState) -{ - UINT32 Pm1aControl; - UINT32 Pm1bControl; - ACPI_BIT_REGISTER_INFO *SleepTypeRegInfo; - ACPI_BIT_REGISTER_INFO *SleepEnableRegInfo; - UINT32 InValue; - ACPI_OBJECT_LIST ArgList; - ACPI_OBJECT Arg; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiEnterSleepState); - - - if ((AcpiGbl_SleepTypeA > ACPI_SLEEP_TYPE_MAX) || - (AcpiGbl_SleepTypeB > ACPI_SLEEP_TYPE_MAX)) - { - ACPI_ERROR ((AE_INFO, "Sleep values out of range: A=%X B=%X", - AcpiGbl_SleepTypeA, AcpiGbl_SleepTypeB)); - return_ACPI_STATUS (AE_AML_OPERAND_VALUE); - } - - SleepTypeRegInfo = AcpiHwGetBitRegisterInfo (ACPI_BITREG_SLEEP_TYPE); - SleepEnableRegInfo = AcpiHwGetBitRegisterInfo (ACPI_BITREG_SLEEP_ENABLE); - - /* Clear wake status */ - - Status = AcpiWriteBitRegister (ACPI_BITREG_WAKE_STATUS, ACPI_CLEAR_STATUS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Clear all fixed and general purpose status bits */ - - Status = AcpiHwClearAcpiStatus (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - if (SleepState != ACPI_STATE_S5) - { - /* - * Disable BM arbitration. This feature is contained within an - * optional register (PM2 Control), so ignore a BAD_ADDRESS - * exception. - */ - Status = AcpiWriteBitRegister (ACPI_BITREG_ARB_DISABLE, 1); - if (ACPI_FAILURE (Status) && (Status != AE_BAD_ADDRESS)) - { - return_ACPI_STATUS (Status); - } - } - - /* - * 1) Disable/Clear all GPEs - * 2) Enable all wakeup GPEs - */ - Status = AcpiHwDisableAllGpes (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - AcpiGbl_SystemAwakeAndRunning = FALSE; - - Status = AcpiHwEnableAllWakeupGpes (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Execute the _GTS method (Going To Sleep) */ - - ArgList.Count = 1; - ArgList.Pointer = &Arg; - Arg.Type = ACPI_TYPE_INTEGER; - Arg.Integer.Value = SleepState; - - Status = AcpiEvaluateObject (NULL, METHOD_NAME__GTS, &ArgList, NULL); - if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND) - { - return_ACPI_STATUS (Status); - } - - /* Get current value of PM1A control */ - - Status = AcpiHwRegisterRead (ACPI_REGISTER_PM1_CONTROL, - &Pm1aControl); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - ACPI_DEBUG_PRINT ((ACPI_DB_INIT, - "Entering sleep state [S%d]\n", SleepState)); - - /* Clear the SLP_EN and SLP_TYP fields */ - - Pm1aControl &= ~(SleepTypeRegInfo->AccessBitMask | - SleepEnableRegInfo->AccessBitMask); - Pm1bControl = Pm1aControl; - - /* Insert the SLP_TYP bits */ - - Pm1aControl |= (AcpiGbl_SleepTypeA << SleepTypeRegInfo->BitPosition); - Pm1bControl |= (AcpiGbl_SleepTypeB << SleepTypeRegInfo->BitPosition); - - /* - * We split the writes of SLP_TYP and SLP_EN to workaround - * poorly implemented hardware. - */ - - /* Write #1: write the SLP_TYP data to the PM1 Control registers */ - - Status = AcpiHwWritePm1Control (Pm1aControl, Pm1bControl); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Insert the sleep enable (SLP_EN) bit */ - - Pm1aControl |= SleepEnableRegInfo->AccessBitMask; - Pm1bControl |= SleepEnableRegInfo->AccessBitMask; - - /* Flush caches, as per ACPI specification */ - - ACPI_FLUSH_CPU_CACHE (); - - /* Write #2: Write both SLP_TYP + SLP_EN */ - - Status = AcpiHwWritePm1Control (Pm1aControl, Pm1bControl); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - if (SleepState > ACPI_STATE_S3) - { - /* - * We wanted to sleep > S3, but it didn't happen (by virtue of the - * fact that we are still executing!) - * - * Wait ten seconds, then try again. This is to get S4/S5 to work on - * all machines. - * - * We wait so long to allow chipsets that poll this reg very slowly - * to still read the right value. Ideally, this block would go - * away entirely. - */ - AcpiOsStall (10000000); - - Status = AcpiHwRegisterWrite (ACPI_REGISTER_PM1_CONTROL, - SleepEnableRegInfo->AccessBitMask); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* Wait until we enter sleep state */ - - do - { - Status = AcpiReadBitRegister (ACPI_BITREG_WAKE_STATUS, &InValue); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Spin until we wake */ - - } while (!InValue); - - return_ACPI_STATUS (AE_OK); -} - -ACPI_EXPORT_SYMBOL (AcpiEnterSleepState) - - -/******************************************************************************* - * - * FUNCTION: AcpiEnterSleepStateS4bios - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Perform a S4 bios request. - * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEnterSleepStateS4bios ( - void) -{ - UINT32 InValue; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiEnterSleepStateS4bios); - - - /* Clear the wake status bit (PM1) */ - - Status = AcpiWriteBitRegister (ACPI_BITREG_WAKE_STATUS, ACPI_CLEAR_STATUS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Status = AcpiHwClearAcpiStatus (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * 1) Disable/Clear all GPEs - * 2) Enable all wakeup GPEs - */ - Status = AcpiHwDisableAllGpes (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - AcpiGbl_SystemAwakeAndRunning = FALSE; - - Status = AcpiHwEnableAllWakeupGpes (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ACPI_FLUSH_CPU_CACHE (); - - Status = AcpiHwWritePort (AcpiGbl_FADT.SmiCommand, - (UINT32) AcpiGbl_FADT.S4BiosRequest, 8); - - do { - AcpiOsStall(1000); - Status = AcpiReadBitRegister (ACPI_BITREG_WAKE_STATUS, &InValue); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } while (!InValue); - - return_ACPI_STATUS (AE_OK); -} - -ACPI_EXPORT_SYMBOL (AcpiEnterSleepStateS4bios) - - -/******************************************************************************* - * - * FUNCTION: AcpiLeaveSleepState - * - * PARAMETERS: SleepState - Which sleep state we just exited - * - * RETURN: Status - * - * DESCRIPTION: Perform OS-independent ACPI cleanup after a sleep - * Called with interrupts ENABLED. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiLeaveSleepState ( - UINT8 SleepState) -{ - ACPI_OBJECT_LIST ArgList; - ACPI_OBJECT Arg; - ACPI_STATUS Status; - ACPI_BIT_REGISTER_INFO *SleepTypeRegInfo; - ACPI_BIT_REGISTER_INFO *SleepEnableRegInfo; - UINT32 Pm1aControl; - UINT32 Pm1bControl; - - - ACPI_FUNCTION_TRACE (AcpiLeaveSleepState); - - - /* - * Set SLP_TYPE and SLP_EN to state S0. - * This is unclear from the ACPI Spec, but it is required - * by some machines. - */ - Status = AcpiGetSleepTypeData (ACPI_STATE_S0, - &AcpiGbl_SleepTypeA, &AcpiGbl_SleepTypeB); - if (ACPI_SUCCESS (Status)) - { - SleepTypeRegInfo = - AcpiHwGetBitRegisterInfo (ACPI_BITREG_SLEEP_TYPE); - SleepEnableRegInfo = - AcpiHwGetBitRegisterInfo (ACPI_BITREG_SLEEP_ENABLE); - - /* Get current value of PM1A control */ - - Status = AcpiHwRegisterRead (ACPI_REGISTER_PM1_CONTROL, - &Pm1aControl); - if (ACPI_SUCCESS (Status)) - { - /* Clear the SLP_EN and SLP_TYP fields */ - - Pm1aControl &= ~(SleepTypeRegInfo->AccessBitMask | - SleepEnableRegInfo->AccessBitMask); - Pm1bControl = Pm1aControl; - - /* Insert the SLP_TYP bits */ - - Pm1aControl |= (AcpiGbl_SleepTypeA << - SleepTypeRegInfo->BitPosition); - Pm1bControl |= (AcpiGbl_SleepTypeB << - SleepTypeRegInfo->BitPosition); - - /* Write the control registers and ignore any errors */ - - (void) AcpiHwWritePm1Control (Pm1aControl, Pm1bControl); - } - } - - /* Ensure EnterSleepStatePrep -> EnterSleepState ordering */ - - AcpiGbl_SleepTypeA = ACPI_SLEEP_TYPE_INVALID; - - /* Setup parameter object */ - - ArgList.Count = 1; - ArgList.Pointer = &Arg; - Arg.Type = ACPI_TYPE_INTEGER; - - /* Ignore any errors from these methods */ - - Arg.Integer.Value = ACPI_SST_WAKING; - Status = AcpiEvaluateObject (NULL, METHOD_NAME__SST, &ArgList, NULL); - if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND) - { - ACPI_EXCEPTION ((AE_INFO, Status, "During Method _SST")); - } - - Arg.Integer.Value = SleepState; - Status = AcpiEvaluateObject (NULL, METHOD_NAME__BFS, &ArgList, NULL); - if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND) - { - ACPI_EXCEPTION ((AE_INFO, Status, "During Method _BFS")); - } - - Status = AcpiEvaluateObject (NULL, METHOD_NAME__WAK, &ArgList, NULL); - if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND) - { - ACPI_EXCEPTION ((AE_INFO, Status, "During Method _WAK")); - } - /* TBD: _WAK "sometimes" returns stuff - do we want to look at it? */ - - /* - * Restore the GPEs: - * 1) Disable/Clear all GPEs - * 2) Enable all runtime GPEs - */ - Status = AcpiHwDisableAllGpes (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - AcpiGbl_SystemAwakeAndRunning = TRUE; - - Status = AcpiHwEnableAllRuntimeGpes (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Enable power button */ - - (void) AcpiWriteBitRegister( - AcpiGbl_FixedEventInfo[ACPI_EVENT_POWER_BUTTON].EnableRegisterId, - ACPI_ENABLE_EVENT); - - (void) AcpiWriteBitRegister( - AcpiGbl_FixedEventInfo[ACPI_EVENT_POWER_BUTTON].StatusRegisterId, - ACPI_CLEAR_STATUS); - - /* - * Enable BM arbitration. This feature is contained within an - * optional register (PM2 Control), so ignore a BAD_ADDRESS - * exception. - */ - Status = AcpiWriteBitRegister (ACPI_BITREG_ARB_DISABLE, 0); - if (ACPI_FAILURE (Status) && (Status != AE_BAD_ADDRESS)) - { - return_ACPI_STATUS (Status); - } - - Arg.Integer.Value = ACPI_SST_WORKING; - Status = AcpiEvaluateObject (NULL, METHOD_NAME__SST, &ArgList, NULL); - if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND) - { - ACPI_EXCEPTION ((AE_INFO, Status, "During Method _SST")); - } - - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiLeaveSleepState) - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwtimer.c b/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwtimer.c deleted file mode 100644 index f86fb7f86..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwtimer.c +++ /dev/null @@ -1,288 +0,0 @@ - -/****************************************************************************** - * - * Name: hwtimer.c - ACPI Power Management Timer Interface - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#include "acpi.h" -#include "accommon.h" - -#define _COMPONENT ACPI_HARDWARE - ACPI_MODULE_NAME ("hwtimer") - - -/****************************************************************************** - * - * FUNCTION: AcpiGetTimerResolution - * - * PARAMETERS: Resolution - Where the resolution is returned - * - * RETURN: Status and timer resolution - * - * DESCRIPTION: Obtains resolution of the ACPI PM Timer (24 or 32 bits). - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetTimerResolution ( - UINT32 *Resolution) -{ - ACPI_FUNCTION_TRACE (AcpiGetTimerResolution); - - - if (!Resolution) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - if ((AcpiGbl_FADT.Flags & ACPI_FADT_32BIT_TIMER) == 0) - { - *Resolution = 24; - } - else - { - *Resolution = 32; - } - - return_ACPI_STATUS (AE_OK); -} - -ACPI_EXPORT_SYMBOL (AcpiGetTimerResolution) - - -/****************************************************************************** - * - * FUNCTION: AcpiGetTimer - * - * PARAMETERS: Ticks - Where the timer value is returned - * - * RETURN: Status and current timer value (ticks) - * - * DESCRIPTION: Obtains current value of ACPI PM Timer (in ticks). - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetTimer ( - UINT32 *Ticks) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiGetTimer); - - - if (!Ticks) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Status = AcpiHwRead (Ticks, &AcpiGbl_FADT.XPmTimerBlock); - - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetTimer) - - -/****************************************************************************** - * - * FUNCTION: AcpiGetTimerDuration - * - * PARAMETERS: StartTicks - Starting timestamp - * EndTicks - End timestamp - * TimeElapsed - Where the elapsed time is returned - * - * RETURN: Status and TimeElapsed - * - * DESCRIPTION: Computes the time elapsed (in microseconds) between two - * PM Timer time stamps, taking into account the possibility of - * rollovers, the timer resolution, and timer frequency. - * - * The PM Timer's clock ticks at roughly 3.6 times per - * _microsecond_, and its clock continues through Cx state - * transitions (unlike many CPU timestamp counters) -- making it - * a versatile and accurate timer. - * - * Note that this function accommodates only a single timer - * rollover. Thus for 24-bit timers, this function should only - * be used for calculating durations less than ~4.6 seconds - * (~20 minutes for 32-bit timers) -- calculations below: - * - * 2**24 Ticks / 3,600,000 Ticks/Sec = 4.66 sec - * 2**32 Ticks / 3,600,000 Ticks/Sec = 1193 sec or 19.88 minutes - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetTimerDuration ( - UINT32 StartTicks, - UINT32 EndTicks, - UINT32 *TimeElapsed) -{ - ACPI_STATUS Status; - UINT32 DeltaTicks; - ACPI_INTEGER Quotient; - - - ACPI_FUNCTION_TRACE (AcpiGetTimerDuration); - - - if (!TimeElapsed) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* - * Compute Tick Delta: - * Handle (max one) timer rollovers on 24-bit versus 32-bit timers. - */ - if (StartTicks < EndTicks) - { - DeltaTicks = EndTicks - StartTicks; - } - else if (StartTicks > EndTicks) - { - if ((AcpiGbl_FADT.Flags & ACPI_FADT_32BIT_TIMER) == 0) - { - /* 24-bit Timer */ - - DeltaTicks = (((0x00FFFFFF - StartTicks) + EndTicks) & 0x00FFFFFF); - } - else - { - /* 32-bit Timer */ - - DeltaTicks = (0xFFFFFFFF - StartTicks) + EndTicks; - } - } - else /* StartTicks == EndTicks */ - { - *TimeElapsed = 0; - return_ACPI_STATUS (AE_OK); - } - - /* - * Compute Duration (Requires a 64-bit multiply and divide): - * - * TimeElapsed = (DeltaTicks * 1000000) / PM_TIMER_FREQUENCY; - */ - Status = AcpiUtShortDivide (((UINT64) DeltaTicks) * 1000000, - PM_TIMER_FREQUENCY, &Quotient, NULL); - - *TimeElapsed = (UINT32) Quotient; - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetTimerDuration) - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwvalid.c b/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwvalid.c deleted file mode 100644 index 650b695b2..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwvalid.c +++ /dev/null @@ -1,424 +0,0 @@ - -/****************************************************************************** - * - * Module Name: hwvalid - I/O request validation - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __HWVALID_C__ - -#include "acpi.h" -#include "accommon.h" - -#define _COMPONENT ACPI_HARDWARE - ACPI_MODULE_NAME ("hwvalid") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiHwValidateIoRequest ( - ACPI_IO_ADDRESS Address, - UINT32 BitWidth); - - -/* - * Protected I/O ports. Some ports are always illegal, and some are - * conditionally illegal. This table must remain ordered by port address. - * - * The table is used to implement the Microsoft port access rules that - * first appeared in Windows XP. Some ports are always illegal, and some - * ports are only illegal if the BIOS calls _OSI with a WinXP string or - * later (meaning that the BIOS itelf is post-XP.) - * - * This provides ACPICA with the desired port protections and - * Microsoft compatibility. - * - * Description of port entries: - * DMA: DMA controller - * PIC0: Programmable Interrupt Controller (8259A) - * PIT1: System Timer 1 - * PIT2: System Timer 2 failsafe - * RTC: Real-time clock - * CMOS: Extended CMOS - * DMA1: DMA 1 page registers - * DMA1L: DMA 1 Ch 0 low page - * DMA2: DMA 2 page registers - * DMA2L: DMA 2 low page refresh - * ARBC: Arbitration control - * SETUP: Reserved system board setup - * POS: POS channel select - * PIC1: Cascaded PIC - * IDMA: ISA DMA - * ELCR: PIC edge/level registers - * PCI: PCI configuration space - */ -static const ACPI_PORT_INFO AcpiProtectedPorts[] = -{ - {"DMA", 0x0000, 0x000F, ACPI_OSI_WIN_XP}, - {"PIC0", 0x0020, 0x0021, ACPI_ALWAYS_ILLEGAL}, - {"PIT1", 0x0040, 0x0043, ACPI_OSI_WIN_XP}, - {"PIT2", 0x0048, 0x004B, ACPI_OSI_WIN_XP}, - {"RTC", 0x0070, 0x0071, ACPI_OSI_WIN_XP}, - {"CMOS", 0x0074, 0x0076, ACPI_OSI_WIN_XP}, - {"DMA1", 0x0081, 0x0083, ACPI_OSI_WIN_XP}, - {"DMA1L", 0x0087, 0x0087, ACPI_OSI_WIN_XP}, - {"DMA2", 0x0089, 0x008B, ACPI_OSI_WIN_XP}, - {"DMA2L", 0x008F, 0x008F, ACPI_OSI_WIN_XP}, - {"ARBC", 0x0090, 0x0091, ACPI_OSI_WIN_XP}, - {"SETUP", 0x0093, 0x0094, ACPI_OSI_WIN_XP}, - {"POS", 0x0096, 0x0097, ACPI_OSI_WIN_XP}, - {"PIC1", 0x00A0, 0x00A1, ACPI_ALWAYS_ILLEGAL}, - {"IDMA", 0x00C0, 0x00DF, ACPI_OSI_WIN_XP}, - {"ELCR", 0x04D0, 0x04D1, ACPI_ALWAYS_ILLEGAL}, - {"PCI", 0x0CF8, 0x0CFF, ACPI_OSI_WIN_XP} -}; - -#define ACPI_PORT_INFO_ENTRIES ACPI_ARRAY_LENGTH (AcpiProtectedPorts) - - -/****************************************************************************** - * - * FUNCTION: AcpiHwValidateIoRequest - * - * PARAMETERS: Address Address of I/O port/register - * BitWidth Number of bits (8,16,32) - * - * RETURN: Status - * - * DESCRIPTION: Validates an I/O request (address/length). Certain ports are - * always illegal and some ports are only illegal depending on - * the requests the BIOS AML code makes to the predefined - * _OSI method. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiHwValidateIoRequest ( - ACPI_IO_ADDRESS Address, - UINT32 BitWidth) -{ - UINT32 i; - UINT32 ByteWidth; - ACPI_IO_ADDRESS LastAddress; - const ACPI_PORT_INFO *PortInfo; - - - ACPI_FUNCTION_TRACE (HwValidateIoRequest); - - - /* Supported widths are 8/16/32 */ - - if ((BitWidth != 8) && - (BitWidth != 16) && - (BitWidth != 32)) - { - return (AE_BAD_PARAMETER); - } - - PortInfo = AcpiProtectedPorts; - ByteWidth = ACPI_DIV_8 (BitWidth); - LastAddress = Address + ByteWidth - 1; - - ACPI_DEBUG_PRINT ((ACPI_DB_IO, "Address %p LastAddress %p Length %X", - ACPI_CAST_PTR (void, Address), ACPI_CAST_PTR (void, LastAddress), - ByteWidth)); - - /* Maximum 16-bit address in I/O space */ - - if (LastAddress > ACPI_UINT16_MAX) - { - ACPI_ERROR ((AE_INFO, - "Illegal I/O port address/length above 64K: 0x%p/%X", - ACPI_CAST_PTR (void, Address), ByteWidth)); - return_ACPI_STATUS (AE_LIMIT); - } - - /* Exit if requested address is not within the protected port table */ - - if (Address > AcpiProtectedPorts[ACPI_PORT_INFO_ENTRIES - 1].End) - { - return_ACPI_STATUS (AE_OK); - } - - /* Check request against the list of protected I/O ports */ - - for (i = 0; i < ACPI_PORT_INFO_ENTRIES; i++, PortInfo++) - { - /* - * Check if the requested address range will write to a reserved - * port. Four cases to consider: - * - * 1) Address range is contained completely in the port address range - * 2) Address range overlaps port range at the port range start - * 3) Address range overlaps port range at the port range end - * 4) Address range completely encompasses the port range - */ - if ((Address <= PortInfo->End) && (LastAddress >= PortInfo->Start)) - { - /* Port illegality may depend on the _OSI calls made by the BIOS */ - - if (AcpiGbl_OsiData >= PortInfo->OsiDependency) - { - ACPI_DEBUG_PRINT ((ACPI_DB_IO, - "Denied AML access to port 0x%p/%X (%s 0x%.4X-0x%.4X)", - ACPI_CAST_PTR (void, Address), ByteWidth, PortInfo->Name, - PortInfo->Start, PortInfo->End)); - - return_ACPI_STATUS (AE_AML_ILLEGAL_ADDRESS); - } - } - - /* Finished if address range ends before the end of this port */ - - if (LastAddress <= PortInfo->End) - { - break; - } - } - - return_ACPI_STATUS (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwReadPort - * - * PARAMETERS: Address Address of I/O port/register to read - * Value Where value is placed - * Width Number of bits - * - * RETURN: Status and value read from port - * - * DESCRIPTION: Read data from an I/O port or register. This is a front-end - * to AcpiOsReadPort that performs validation on both the port - * address and the length. - * - *****************************************************************************/ - -ACPI_STATUS -AcpiHwReadPort ( - ACPI_IO_ADDRESS Address, - UINT32 *Value, - UINT32 Width) -{ - ACPI_STATUS Status; - UINT32 OneByte; - UINT32 i; - - - /* Validate the entire request and perform the I/O */ - - Status = AcpiHwValidateIoRequest (Address, Width); - if (ACPI_SUCCESS (Status)) - { - Status = AcpiOsReadPort (Address, Value, Width); - return (Status); - } - - if (Status != AE_AML_ILLEGAL_ADDRESS) - { - return (Status); - } - - /* - * There has been a protection violation within the request. Fall - * back to byte granularity port I/O and ignore the failing bytes. - * This provides Windows compatibility. - */ - for (i = 0, *Value = 0; i < Width; i += 8) - { - /* Validate and read one byte */ - - if (AcpiHwValidateIoRequest (Address, 8) == AE_OK) - { - Status = AcpiOsReadPort (Address, &OneByte, 8); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - *Value |= (OneByte << i); - } - - Address++; - } - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiHwWritePort - * - * PARAMETERS: Address Address of I/O port/register to write - * Value Value to write - * Width Number of bits - * - * RETURN: Status - * - * DESCRIPTION: Write data to an I/O port or register. This is a front-end - * to AcpiOsWritePort that performs validation on both the port - * address and the length. - * - *****************************************************************************/ - -ACPI_STATUS -AcpiHwWritePort ( - ACPI_IO_ADDRESS Address, - UINT32 Value, - UINT32 Width) -{ - ACPI_STATUS Status; - UINT32 i; - - - /* Validate the entire request and perform the I/O */ - - Status = AcpiHwValidateIoRequest (Address, Width); - if (ACPI_SUCCESS (Status)) - { - Status = AcpiOsWritePort (Address, Value, Width); - return (Status); - } - - if (Status != AE_AML_ILLEGAL_ADDRESS) - { - return (Status); - } - - /* - * There has been a protection violation within the request. Fall - * back to byte granularity port I/O and ignore the failing bytes. - * This provides Windows compatibility. - */ - for (i = 0; i < Width; i += 8) - { - /* Validate and write one byte */ - - if (AcpiHwValidateIoRequest (Address, 8) == AE_OK) - { - Status = AcpiOsWritePort (Address, (Value >> i) & 0xFF, 8); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - - Address++; - } - - return (AE_OK); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwxface.c b/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwxface.c deleted file mode 100644 index 6c345a593..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/hardware/hwxface.c +++ /dev/null @@ -1,710 +0,0 @@ - -/****************************************************************************** - * - * Module Name: hwxface - Public ACPICA hardware interfaces - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" - -#define _COMPONENT ACPI_HARDWARE - ACPI_MODULE_NAME ("hwxface") - - -/****************************************************************************** - * - * FUNCTION: AcpiReset - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Set reset register in memory or IO space. Note: Does not - * support reset register in PCI config space, this must be - * handled separately. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiReset ( - void) -{ - ACPI_GENERIC_ADDRESS *ResetReg; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiReset); - - - ResetReg = &AcpiGbl_FADT.ResetRegister; - - /* Check if the reset register is supported */ - - if (!(AcpiGbl_FADT.Flags & ACPI_FADT_RESET_REGISTER) || - !ResetReg->Address) - { - return_ACPI_STATUS (AE_NOT_EXIST); - } - - if (ResetReg->SpaceId == ACPI_ADR_SPACE_SYSTEM_IO) - { - /* - * For I/O space, write directly to the OSL. This bypasses the port - * validation mechanism, which may block a valid write to the reset - * register. - */ - Status = AcpiOsWritePort ((ACPI_IO_ADDRESS) ResetReg->Address, - AcpiGbl_FADT.ResetValue, ResetReg->BitWidth); - } - else - { - /* Write the reset value to the reset register */ - - Status = AcpiHwWrite (AcpiGbl_FADT.ResetValue, ResetReg); - } - - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiReset) - - -/****************************************************************************** - * - * FUNCTION: AcpiRead - * - * PARAMETERS: Value - Where the value is returned - * Reg - GAS register structure - * - * RETURN: Status - * - * DESCRIPTION: Read from either memory or IO space. - * - * LIMITATIONS: - * BitWidth must be exactly 8, 16, 32, or 64. - * SpaceID must be SystemMemory or SystemIO. - * BitOffset and AccessWidth are currently ignored, as there has - * not been a need to implement these. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRead ( - UINT64 *ReturnValue, - ACPI_GENERIC_ADDRESS *Reg) -{ - UINT32 Value; - UINT32 Width; - UINT64 Address; - ACPI_STATUS Status; - - - ACPI_FUNCTION_NAME (AcpiRead); - - - if (!ReturnValue) - { - return (AE_BAD_PARAMETER); - } - - /* Validate contents of the GAS register. Allow 64-bit transfers */ - - Status = AcpiHwValidateRegister (Reg, 64, &Address); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Width = Reg->BitWidth; - if (Width == 64) - { - Width = 32; /* Break into two 32-bit transfers */ - } - - /* Initialize entire 64-bit return value to zero */ - - *ReturnValue = 0; - Value = 0; - - /* - * Two address spaces supported: Memory or IO. PCI_Config is - * not supported here because the GAS structure is insufficient - */ - if (Reg->SpaceId == ACPI_ADR_SPACE_SYSTEM_MEMORY) - { - Status = AcpiOsReadMemory ((ACPI_PHYSICAL_ADDRESS) - Address, &Value, Width); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - *ReturnValue = Value; - - if (Reg->BitWidth == 64) - { - /* Read the top 32 bits */ - - Status = AcpiOsReadMemory ((ACPI_PHYSICAL_ADDRESS) - (Address + 4), &Value, 32); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - *ReturnValue |= ((UINT64) Value << 32); - } - } - else /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */ - { - Status = AcpiHwReadPort ((ACPI_IO_ADDRESS) - Address, &Value, Width); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - *ReturnValue = Value; - - if (Reg->BitWidth == 64) - { - /* Read the top 32 bits */ - - Status = AcpiHwReadPort ((ACPI_IO_ADDRESS) - (Address + 4), &Value, 32); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - *ReturnValue |= ((UINT64) Value << 32); - } - } - - ACPI_DEBUG_PRINT ((ACPI_DB_IO, - "Read: %8.8X%8.8X width %2d from %8.8X%8.8X (%s)\n", - ACPI_FORMAT_UINT64 (*ReturnValue), Reg->BitWidth, - ACPI_FORMAT_UINT64 (Address), - AcpiUtGetRegionName (Reg->SpaceId))); - - return (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiRead) - - -/****************************************************************************** - * - * FUNCTION: AcpiWrite - * - * PARAMETERS: Value - Value to be written - * Reg - GAS register structure - * - * RETURN: Status - * - * DESCRIPTION: Write to either memory or IO space. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiWrite ( - UINT64 Value, - ACPI_GENERIC_ADDRESS *Reg) -{ - UINT32 Width; - UINT64 Address; - ACPI_STATUS Status; - - - ACPI_FUNCTION_NAME (AcpiWrite); - - - /* Validate contents of the GAS register. Allow 64-bit transfers */ - - Status = AcpiHwValidateRegister (Reg, 64, &Address); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Width = Reg->BitWidth; - if (Width == 64) - { - Width = 32; /* Break into two 32-bit transfers */ - } - - /* - * Two address spaces supported: Memory or IO. PCI_Config is - * not supported here because the GAS structure is insufficient - */ - if (Reg->SpaceId == ACPI_ADR_SPACE_SYSTEM_MEMORY) - { - Status = AcpiOsWriteMemory ((ACPI_PHYSICAL_ADDRESS) - Address, ACPI_LODWORD (Value), Width); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - if (Reg->BitWidth == 64) - { - Status = AcpiOsWriteMemory ((ACPI_PHYSICAL_ADDRESS) - (Address + 4), ACPI_HIDWORD (Value), 32); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - } - else /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */ - { - Status = AcpiHwWritePort ((ACPI_IO_ADDRESS) - Address, ACPI_LODWORD (Value), Width); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - if (Reg->BitWidth == 64) - { - Status = AcpiHwWritePort ((ACPI_IO_ADDRESS) - (Address + 4), ACPI_HIDWORD (Value), 32); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - } - - ACPI_DEBUG_PRINT ((ACPI_DB_IO, - "Wrote: %8.8X%8.8X width %2d to %8.8X%8.8X (%s)\n", - ACPI_FORMAT_UINT64 (Value), Reg->BitWidth, - ACPI_FORMAT_UINT64 (Address), - AcpiUtGetRegionName (Reg->SpaceId))); - - return (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiWrite) - - -/******************************************************************************* - * - * FUNCTION: AcpiReadBitRegister - * - * PARAMETERS: RegisterId - ID of ACPI Bit Register to access - * ReturnValue - Value that was read from the register, - * normalized to bit position zero. - * - * RETURN: Status and the value read from the specified Register. Value - * returned is normalized to bit0 (is shifted all the way right) - * - * DESCRIPTION: ACPI BitRegister read function. Does not acquire the HW lock. - * - * SUPPORTS: Bit fields in PM1 Status, PM1 Enable, PM1 Control, and - * PM2 Control. - * - * Note: The hardware lock is not required when reading the ACPI bit registers - * since almost all of them are single bit and it does not matter that - * the parent hardware register can be split across two physical - * registers. The only multi-bit field is SLP_TYP in the PM1 control - * register, but this field does not cross an 8-bit boundary (nor does - * it make much sense to actually read this field.) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiReadBitRegister ( - UINT32 RegisterId, - UINT32 *ReturnValue) -{ - ACPI_BIT_REGISTER_INFO *BitRegInfo; - UINT32 RegisterValue; - UINT32 Value; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_U32 (AcpiReadBitRegister, RegisterId); - - - /* Get the info structure corresponding to the requested ACPI Register */ - - BitRegInfo = AcpiHwGetBitRegisterInfo (RegisterId); - if (!BitRegInfo) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Read the entire parent register */ - - Status = AcpiHwRegisterRead (BitRegInfo->ParentRegister, - &RegisterValue); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Normalize the value that was read, mask off other bits */ - - Value = ((RegisterValue & BitRegInfo->AccessBitMask) - >> BitRegInfo->BitPosition); - - ACPI_DEBUG_PRINT ((ACPI_DB_IO, - "BitReg %X, ParentReg %X, Actual %8.8X, ReturnValue %8.8X\n", - RegisterId, BitRegInfo->ParentRegister, RegisterValue, Value)); - - *ReturnValue = Value; - return_ACPI_STATUS (AE_OK); -} - -ACPI_EXPORT_SYMBOL (AcpiReadBitRegister) - - -/******************************************************************************* - * - * FUNCTION: AcpiWriteBitRegister - * - * PARAMETERS: RegisterId - ID of ACPI Bit Register to access - * Value - Value to write to the register, in bit - * position zero. The bit is automaticallly - * shifted to the correct position. - * - * RETURN: Status - * - * DESCRIPTION: ACPI Bit Register write function. Acquires the hardware lock - * since most operations require a read/modify/write sequence. - * - * SUPPORTS: Bit fields in PM1 Status, PM1 Enable, PM1 Control, and - * PM2 Control. - * - * Note that at this level, the fact that there may be actually two - * hardware registers (A and B - and B may not exist) is abstracted. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiWriteBitRegister ( - UINT32 RegisterId, - UINT32 Value) -{ - ACPI_BIT_REGISTER_INFO *BitRegInfo; - ACPI_CPU_FLAGS LockFlags; - UINT32 RegisterValue; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE_U32 (AcpiWriteBitRegister, RegisterId); - - - /* Get the info structure corresponding to the requested ACPI Register */ - - BitRegInfo = AcpiHwGetBitRegisterInfo (RegisterId); - if (!BitRegInfo) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock); - - /* - * At this point, we know that the parent register is one of the - * following: PM1 Status, PM1 Enable, PM1 Control, or PM2 Control - */ - if (BitRegInfo->ParentRegister != ACPI_REGISTER_PM1_STATUS) - { - /* - * 1) Case for PM1 Enable, PM1 Control, and PM2 Control - * - * Perform a register read to preserve the bits that we are not - * interested in - */ - Status = AcpiHwRegisterRead (BitRegInfo->ParentRegister, - &RegisterValue); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - - /* - * Insert the input bit into the value that was just read - * and write the register - */ - ACPI_REGISTER_INSERT_VALUE (RegisterValue, BitRegInfo->BitPosition, - BitRegInfo->AccessBitMask, Value); - - Status = AcpiHwRegisterWrite (BitRegInfo->ParentRegister, - RegisterValue); - } - else - { - /* - * 2) Case for PM1 Status - * - * The Status register is different from the rest. Clear an event - * by writing 1, writing 0 has no effect. So, the only relevant - * information is the single bit we're interested in, all others - * should be written as 0 so they will be left unchanged. - */ - RegisterValue = ACPI_REGISTER_PREPARE_BITS (Value, - BitRegInfo->BitPosition, BitRegInfo->AccessBitMask); - - /* No need to write the register if value is all zeros */ - - if (RegisterValue) - { - Status = AcpiHwRegisterWrite (ACPI_REGISTER_PM1_STATUS, - RegisterValue); - } - } - - ACPI_DEBUG_PRINT ((ACPI_DB_IO, - "BitReg %X, ParentReg %X, Value %8.8X, Actual %8.8X\n", - RegisterId, BitRegInfo->ParentRegister, Value, RegisterValue)); - - -UnlockAndExit: - - AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiWriteBitRegister) - - -/******************************************************************************* - * - * FUNCTION: AcpiGetSleepTypeData - * - * PARAMETERS: SleepState - Numeric sleep state - * *SleepTypeA - Where SLP_TYPa is returned - * *SleepTypeB - Where SLP_TYPb is returned - * - * RETURN: Status - ACPI status - * - * DESCRIPTION: Obtain the SLP_TYPa and SLP_TYPb values for the requested sleep - * state. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetSleepTypeData ( - UINT8 SleepState, - UINT8 *SleepTypeA, - UINT8 *SleepTypeB) -{ - ACPI_STATUS Status = AE_OK; - ACPI_EVALUATE_INFO *Info; - - - ACPI_FUNCTION_TRACE (AcpiGetSleepTypeData); - - - /* Validate parameters */ - - if ((SleepState > ACPI_S_STATES_MAX) || - !SleepTypeA || - !SleepTypeB) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Allocate the evaluation information block */ - - Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); - if (!Info) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - Info->Pathname = ACPI_CAST_PTR (char, AcpiGbl_SleepStateNames[SleepState]); - - /* Evaluate the namespace object containing the values for this state */ - - Status = AcpiNsEvaluate (Info); - if (ACPI_FAILURE (Status)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "%s while evaluating SleepState [%s]\n", - AcpiFormatException (Status), Info->Pathname)); - - goto Cleanup; - } - - /* Must have a return object */ - - if (!Info->ReturnObject) - { - ACPI_ERROR ((AE_INFO, "No Sleep State object returned from [%s]", - Info->Pathname)); - Status = AE_NOT_EXIST; - } - - /* It must be of type Package */ - - else if (Info->ReturnObject->Common.Type != ACPI_TYPE_PACKAGE) - { - ACPI_ERROR ((AE_INFO, "Sleep State return object is not a Package")); - Status = AE_AML_OPERAND_TYPE; - } - - /* - * The package must have at least two elements. NOTE (March 2005): This - * goes against the current ACPI spec which defines this object as a - * package with one encoded DWORD element. However, existing practice - * by BIOS vendors seems to be to have 2 or more elements, at least - * one per sleep type (A/B). - */ - else if (Info->ReturnObject->Package.Count < 2) - { - ACPI_ERROR ((AE_INFO, - "Sleep State return package does not have at least two elements")); - Status = AE_AML_NO_OPERAND; - } - - /* The first two elements must both be of type Integer */ - - else if (((Info->ReturnObject->Package.Elements[0])->Common.Type - != ACPI_TYPE_INTEGER) || - ((Info->ReturnObject->Package.Elements[1])->Common.Type - != ACPI_TYPE_INTEGER)) - { - ACPI_ERROR ((AE_INFO, - "Sleep State return package elements are not both Integers " - "(%s, %s)", - AcpiUtGetObjectTypeName (Info->ReturnObject->Package.Elements[0]), - AcpiUtGetObjectTypeName (Info->ReturnObject->Package.Elements[1]))); - Status = AE_AML_OPERAND_TYPE; - } - else - { - /* Valid _Sx_ package size, type, and value */ - - *SleepTypeA = (UINT8) - (Info->ReturnObject->Package.Elements[0])->Integer.Value; - *SleepTypeB = (UINT8) - (Info->ReturnObject->Package.Elements[1])->Integer.Value; - } - - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "While evaluating SleepState [%s], bad Sleep object %p type %s", - Info->Pathname, Info->ReturnObject, - AcpiUtGetObjectTypeName (Info->ReturnObject))); - } - - AcpiUtRemoveReference (Info->ReturnObject); - -Cleanup: - ACPI_FREE (Info); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetSleepTypeData) diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsaccess.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsaccess.c deleted file mode 100644 index 2bc7d8d71..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsaccess.c +++ /dev/null @@ -1,772 +0,0 @@ -/******************************************************************************* - * - * Module Name: nsaccess - Top-level functions for accessing ACPI namespace - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __NSACCESS_C__ - -#include "acpi.h" -#include "accommon.h" -#include "amlcode.h" -#include "acnamesp.h" -#include "acdispat.h" - - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsaccess") - - -/******************************************************************************* - * - * FUNCTION: AcpiNsRootInitialize - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Allocate and initialize the default root named objects - * - * MUTEX: Locks namespace for entire execution - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsRootInitialize ( - void) -{ - ACPI_STATUS Status; - const ACPI_PREDEFINED_NAMES *InitVal = NULL; - ACPI_NAMESPACE_NODE *NewNode; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STRING Val = NULL; - - - ACPI_FUNCTION_TRACE (NsRootInitialize); - - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * The global root ptr is initially NULL, so a non-NULL value indicates - * that AcpiNsRootInitialize() has already been called; just return. - */ - if (AcpiGbl_RootNode) - { - Status = AE_OK; - goto UnlockAndExit; - } - - /* - * Tell the rest of the subsystem that the root is initialized - * (This is OK because the namespace is locked) - */ - AcpiGbl_RootNode = &AcpiGbl_RootNodeStruct; - - /* Enter the pre-defined names in the name table */ - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Entering predefined entries into namespace\n")); - - for (InitVal = AcpiGbl_PreDefinedNames; InitVal->Name; InitVal++) - { - /* _OSI is optional for now, will be permanent later */ - - if (!ACPI_STRCMP (InitVal->Name, "_OSI") && !AcpiGbl_CreateOsiMethod) - { - continue; - } - - Status = AcpiNsLookup (NULL, InitVal->Name, InitVal->Type, - ACPI_IMODE_LOAD_PASS2, ACPI_NS_NO_UPSEARCH, - NULL, &NewNode); - - if (ACPI_FAILURE (Status) || (!NewNode)) /* Must be on same line for code converter */ - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not create predefined name %s", - InitVal->Name)); - } - - /* - * Name entered successfully. If entry in PreDefinedNames[] specifies - * an initial value, create the initial value. - */ - if (InitVal->Val) - { - Status = AcpiOsPredefinedOverride (InitVal, &Val); - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR ((AE_INFO, - "Could not override predefined %s", - InitVal->Name)); - } - - if (!Val) - { - Val = InitVal->Val; - } - - /* - * Entry requests an initial value, allocate a - * descriptor for it. - */ - ObjDesc = AcpiUtCreateInternalObject (InitVal->Type); - if (!ObjDesc) - { - Status = AE_NO_MEMORY; - goto UnlockAndExit; - } - - /* - * Convert value string from table entry to - * internal representation. Only types actually - * used for initial values are implemented here. - */ - switch (InitVal->Type) - { - case ACPI_TYPE_METHOD: - ObjDesc->Method.ParamCount = (UINT8) ACPI_TO_INTEGER (Val); - ObjDesc->Common.Flags |= AOPOBJ_DATA_VALID; - -#if defined (ACPI_ASL_COMPILER) - - /* Save the parameter count for the iASL compiler */ - - NewNode->Value = ObjDesc->Method.ParamCount; -#else - /* Mark this as a very SPECIAL method */ - - ObjDesc->Method.MethodFlags = AML_METHOD_INTERNAL_ONLY; - ObjDesc->Method.Extra.Implementation = AcpiUtOsiImplementation; -#endif - break; - - case ACPI_TYPE_INTEGER: - - ObjDesc->Integer.Value = ACPI_TO_INTEGER (Val); - break; - - - case ACPI_TYPE_STRING: - - /* Build an object around the static string */ - - ObjDesc->String.Length = (UINT32) ACPI_STRLEN (Val); - ObjDesc->String.Pointer = Val; - ObjDesc->Common.Flags |= AOPOBJ_STATIC_POINTER; - break; - - - case ACPI_TYPE_MUTEX: - - ObjDesc->Mutex.Node = NewNode; - ObjDesc->Mutex.SyncLevel = (UINT8) (ACPI_TO_INTEGER (Val) - 1); - - /* Create a mutex */ - - Status = AcpiOsCreateMutex (&ObjDesc->Mutex.OsMutex); - if (ACPI_FAILURE (Status)) - { - AcpiUtRemoveReference (ObjDesc); - goto UnlockAndExit; - } - - /* Special case for ACPI Global Lock */ - - if (ACPI_STRCMP (InitVal->Name, "_GL_") == 0) - { - AcpiGbl_GlobalLockMutex = ObjDesc; - - /* Create additional counting semaphore for global lock */ - - Status = AcpiOsCreateSemaphore ( - 1, 0, &AcpiGbl_GlobalLockSemaphore); - if (ACPI_FAILURE (Status)) - { - AcpiUtRemoveReference (ObjDesc); - goto UnlockAndExit; - } - } - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Unsupported initial type value %X", - InitVal->Type)); - AcpiUtRemoveReference (ObjDesc); - ObjDesc = NULL; - continue; - } - - /* Store pointer to value descriptor in the Node */ - - Status = AcpiNsAttachObject (NewNode, ObjDesc, - ObjDesc->Common.Type); - - /* Remove local reference to the object */ - - AcpiUtRemoveReference (ObjDesc); - } - } - - -UnlockAndExit: - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - - /* Save a handle to "_GPE", it is always present */ - - if (ACPI_SUCCESS (Status)) - { - Status = AcpiNsGetNode (NULL, "\\_GPE", ACPI_NS_NO_UPSEARCH, - &AcpiGbl_FadtGpeDevice); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsLookup - * - * PARAMETERS: ScopeInfo - Current scope info block - * Pathname - Search pathname, in internal format - * (as represented in the AML stream) - * Type - Type associated with name - * InterpreterMode - IMODE_LOAD_PASS2 => add name if not found - * Flags - Flags describing the search restrictions - * WalkState - Current state of the walk - * ReturnNode - Where the Node is placed (if found - * or created successfully) - * - * RETURN: Status - * - * DESCRIPTION: Find or enter the passed name in the name space. - * Log an error if name not found in Exec mode. - * - * MUTEX: Assumes namespace is locked. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsLookup ( - ACPI_GENERIC_STATE *ScopeInfo, - char *Pathname, - ACPI_OBJECT_TYPE Type, - ACPI_INTERPRETER_MODE InterpreterMode, - UINT32 Flags, - ACPI_WALK_STATE *WalkState, - ACPI_NAMESPACE_NODE **ReturnNode) -{ - ACPI_STATUS Status; - char *Path = Pathname; - ACPI_NAMESPACE_NODE *PrefixNode; - ACPI_NAMESPACE_NODE *CurrentNode = NULL; - ACPI_NAMESPACE_NODE *ThisNode = NULL; - UINT32 NumSegments; - UINT32 NumCarats; - ACPI_NAME SimpleName; - ACPI_OBJECT_TYPE TypeToCheckFor; - ACPI_OBJECT_TYPE ThisSearchType; - UINT32 SearchParentFlag = ACPI_NS_SEARCH_PARENT; - UINT32 LocalFlags; - - - ACPI_FUNCTION_TRACE (NsLookup); - - - if (!ReturnNode) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - LocalFlags = Flags & ~(ACPI_NS_ERROR_IF_FOUND | ACPI_NS_SEARCH_PARENT); - *ReturnNode = ACPI_ENTRY_NOT_FOUND; - AcpiGbl_NsLookupCount++; - - if (!AcpiGbl_RootNode) - { - return_ACPI_STATUS (AE_NO_NAMESPACE); - } - - /* Get the prefix scope. A null scope means use the root scope */ - - if ((!ScopeInfo) || - (!ScopeInfo->Scope.Node)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Null scope prefix, using root node (%p)\n", - AcpiGbl_RootNode)); - - PrefixNode = AcpiGbl_RootNode; - } - else - { - PrefixNode = ScopeInfo->Scope.Node; - if (ACPI_GET_DESCRIPTOR_TYPE (PrefixNode) != ACPI_DESC_TYPE_NAMED) - { - ACPI_ERROR ((AE_INFO, "%p is not a namespace node [%s]", - PrefixNode, AcpiUtGetDescriptorName (PrefixNode))); - return_ACPI_STATUS (AE_AML_INTERNAL); - } - - if (!(Flags & ACPI_NS_PREFIX_IS_SCOPE)) - { - /* - * This node might not be a actual "scope" node (such as a - * Device/Method, etc.) It could be a Package or other object - * node. Backup up the tree to find the containing scope node. - */ - while (!AcpiNsOpensScope (PrefixNode->Type) && - PrefixNode->Type != ACPI_TYPE_ANY) - { - PrefixNode = AcpiNsGetParentNode (PrefixNode); - } - } - } - - /* Save type. TBD: may be no longer necessary */ - - TypeToCheckFor = Type; - - /* - * Begin examination of the actual pathname - */ - if (!Pathname) - { - /* A Null NamePath is allowed and refers to the root */ - - NumSegments = 0; - ThisNode = AcpiGbl_RootNode; - Path = ""; - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Null Pathname (Zero segments), Flags=%X\n", Flags)); - } - else - { - /* - * Name pointer is valid (and must be in internal name format) - * - * Check for scope prefixes: - * - * As represented in the AML stream, a namepath consists of an - * optional scope prefix followed by a name segment part. - * - * If present, the scope prefix is either a Root Prefix (in - * which case the name is fully qualified), or one or more - * Parent Prefixes (in which case the name's scope is relative - * to the current scope). - */ - if (*Path == (UINT8) AML_ROOT_PREFIX) - { - /* Pathname is fully qualified, start from the root */ - - ThisNode = AcpiGbl_RootNode; - SearchParentFlag = ACPI_NS_NO_UPSEARCH; - - /* Point to name segment part */ - - Path++; - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Path is absolute from root [%p]\n", ThisNode)); - } - else - { - /* Pathname is relative to current scope, start there */ - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Searching relative to prefix scope [%4.4s] (%p)\n", - AcpiUtGetNodeName (PrefixNode), PrefixNode)); - - /* - * Handle multiple Parent Prefixes (carat) by just getting - * the parent node for each prefix instance. - */ - ThisNode = PrefixNode; - NumCarats = 0; - while (*Path == (UINT8) AML_PARENT_PREFIX) - { - /* Name is fully qualified, no search rules apply */ - - SearchParentFlag = ACPI_NS_NO_UPSEARCH; - - /* - * Point past this prefix to the name segment - * part or the next Parent Prefix - */ - Path++; - - /* Backup to the parent node */ - - NumCarats++; - ThisNode = AcpiNsGetParentNode (ThisNode); - if (!ThisNode) - { - /* Current scope has no parent scope */ - - ACPI_ERROR ((AE_INFO, - "ACPI path has too many parent prefixes (^) " - "- reached beyond root node")); - return_ACPI_STATUS (AE_NOT_FOUND); - } - } - - if (SearchParentFlag == ACPI_NS_NO_UPSEARCH) - { - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Search scope is [%4.4s], path has %d carat(s)\n", - AcpiUtGetNodeName (ThisNode), NumCarats)); - } - } - - /* - * Determine the number of ACPI name segments in this pathname. - * - * The segment part consists of either: - * - A Null name segment (0) - * - A DualNamePrefix followed by two 4-byte name segments - * - A MultiNamePrefix followed by a byte indicating the - * number of segments and the segments themselves. - * - A single 4-byte name segment - * - * Examine the name prefix opcode, if any, to determine the number of - * segments. - */ - switch (*Path) - { - case 0: - /* - * Null name after a root or parent prefixes. We already - * have the correct target node and there are no name segments. - */ - NumSegments = 0; - Type = ThisNode->Type; - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Prefix-only Pathname (Zero name segments), Flags=%X\n", - Flags)); - break; - - case AML_DUAL_NAME_PREFIX: - - /* More than one NameSeg, search rules do not apply */ - - SearchParentFlag = ACPI_NS_NO_UPSEARCH; - - /* Two segments, point to first name segment */ - - NumSegments = 2; - Path++; - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Dual Pathname (2 segments, Flags=%X)\n", Flags)); - break; - - case AML_MULTI_NAME_PREFIX_OP: - - /* More than one NameSeg, search rules do not apply */ - - SearchParentFlag = ACPI_NS_NO_UPSEARCH; - - /* Extract segment count, point to first name segment */ - - Path++; - NumSegments = (UINT32) (UINT8) *Path; - Path++; - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Multi Pathname (%d Segments, Flags=%X)\n", - NumSegments, Flags)); - break; - - default: - /* - * Not a Null name, no Dual or Multi prefix, hence there is - * only one name segment and Pathname is already pointing to it. - */ - NumSegments = 1; - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Simple Pathname (1 segment, Flags=%X)\n", Flags)); - break; - } - - ACPI_DEBUG_EXEC (AcpiNsPrintPathname (NumSegments, Path)); - } - - - /* - * Search namespace for each segment of the name. Loop through and - * verify (or add to the namespace) each name segment. - * - * The object type is significant only at the last name - * segment. (We don't care about the types along the path, only - * the type of the final target object.) - */ - ThisSearchType = ACPI_TYPE_ANY; - CurrentNode = ThisNode; - while (NumSegments && CurrentNode) - { - NumSegments--; - if (!NumSegments) - { - /* This is the last segment, enable typechecking */ - - ThisSearchType = Type; - - /* - * Only allow automatic parent search (search rules) if the caller - * requested it AND we have a single, non-fully-qualified NameSeg - */ - if ((SearchParentFlag != ACPI_NS_NO_UPSEARCH) && - (Flags & ACPI_NS_SEARCH_PARENT)) - { - LocalFlags |= ACPI_NS_SEARCH_PARENT; - } - - /* Set error flag according to caller */ - - if (Flags & ACPI_NS_ERROR_IF_FOUND) - { - LocalFlags |= ACPI_NS_ERROR_IF_FOUND; - } - } - - /* Extract one ACPI name from the front of the pathname */ - - ACPI_MOVE_32_TO_32 (&SimpleName, Path); - - /* Try to find the single (4 character) ACPI name */ - - Status = AcpiNsSearchAndEnter (SimpleName, WalkState, CurrentNode, - InterpreterMode, ThisSearchType, LocalFlags, &ThisNode); - if (ACPI_FAILURE (Status)) - { - if (Status == AE_NOT_FOUND) - { - /* Name not found in ACPI namespace */ - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Name [%4.4s] not found in scope [%4.4s] %p\n", - (char *) &SimpleName, (char *) &CurrentNode->Name, - CurrentNode)); - } - - *ReturnNode = ThisNode; - return_ACPI_STATUS (Status); - } - - /* More segments to follow? */ - - if (NumSegments > 0) - { - /* - * If we have an alias to an object that opens a scope (such as a - * device or processor), we need to dereference the alias here so - * that we can access any children of the original node (via the - * remaining segments). - */ - if (ThisNode->Type == ACPI_TYPE_LOCAL_ALIAS) - { - if (!ThisNode->Object) - { - return_ACPI_STATUS (AE_NOT_EXIST); - } - - if (AcpiNsOpensScope (((ACPI_NAMESPACE_NODE *) - ThisNode->Object)->Type)) - { - ThisNode = (ACPI_NAMESPACE_NODE *) ThisNode->Object; - } - } - } - - /* Special handling for the last segment (NumSegments == 0) */ - - else - { - /* - * Sanity typecheck of the target object: - * - * If 1) This is the last segment (NumSegments == 0) - * 2) And we are looking for a specific type - * (Not checking for TYPE_ANY) - * 3) Which is not an alias - * 4) Which is not a local type (TYPE_SCOPE) - * 5) And the type of target object is known (not TYPE_ANY) - * 6) And target object does not match what we are looking for - * - * Then we have a type mismatch. Just warn and ignore it. - */ - if ((TypeToCheckFor != ACPI_TYPE_ANY) && - (TypeToCheckFor != ACPI_TYPE_LOCAL_ALIAS) && - (TypeToCheckFor != ACPI_TYPE_LOCAL_METHOD_ALIAS) && - (TypeToCheckFor != ACPI_TYPE_LOCAL_SCOPE) && - (ThisNode->Type != ACPI_TYPE_ANY) && - (ThisNode->Type != TypeToCheckFor)) - { - /* Complain about a type mismatch */ - - ACPI_WARNING ((AE_INFO, - "NsLookup: Type mismatch on %4.4s (%s), searching for (%s)", - ACPI_CAST_PTR (char, &SimpleName), - AcpiUtGetTypeName (ThisNode->Type), - AcpiUtGetTypeName (TypeToCheckFor))); - } - - /* - * If this is the last name segment and we are not looking for a - * specific type, but the type of found object is known, use that - * type to (later) see if it opens a scope. - */ - if (Type == ACPI_TYPE_ANY) - { - Type = ThisNode->Type; - } - } - - /* Point to next name segment and make this node current */ - - Path += ACPI_NAME_SIZE; - CurrentNode = ThisNode; - } - - /* Always check if we need to open a new scope */ - - if (!(Flags & ACPI_NS_DONT_OPEN_SCOPE) && (WalkState)) - { - /* - * If entry is a type which opens a scope, push the new scope on the - * scope stack. - */ - if (AcpiNsOpensScope (Type)) - { - Status = AcpiDsScopeStackPush (ThisNode, Type, WalkState); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - } - - *ReturnNode = ThisNode; - return_ACPI_STATUS (AE_OK); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsalloc.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsalloc.c deleted file mode 100644 index 9693cb783..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsalloc.c +++ /dev/null @@ -1,666 +0,0 @@ -/******************************************************************************* - * - * Module Name: nsalloc - Namespace allocation and deletion utilities - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __NSALLOC_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsalloc") - - -/******************************************************************************* - * - * FUNCTION: AcpiNsCreateNode - * - * PARAMETERS: Name - Name of the new node (4 char ACPI name) - * - * RETURN: New namespace node (Null on failure) - * - * DESCRIPTION: Create a namespace node - * - ******************************************************************************/ - -ACPI_NAMESPACE_NODE * -AcpiNsCreateNode ( - UINT32 Name) -{ - ACPI_NAMESPACE_NODE *Node; -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - UINT32 Temp; -#endif - - - ACPI_FUNCTION_TRACE (NsCreateNode); - - - Node = AcpiOsAcquireObject (AcpiGbl_NamespaceCache); - if (!Node) - { - return_PTR (NULL); - } - - ACPI_MEM_TRACKING (AcpiGbl_NsNodeList->TotalAllocated++); - -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - Temp = AcpiGbl_NsNodeList->TotalAllocated - - AcpiGbl_NsNodeList->TotalFreed; - if (Temp > AcpiGbl_NsNodeList->MaxOccupied) - { - AcpiGbl_NsNodeList->MaxOccupied = Temp; - } -#endif - - Node->Name.Integer = Name; - ACPI_SET_DESCRIPTOR_TYPE (Node, ACPI_DESC_TYPE_NAMED); - return_PTR (Node); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsDeleteNode - * - * PARAMETERS: Node - Node to be deleted - * - * RETURN: None - * - * DESCRIPTION: Delete a namespace node. All node deletions must come through - * here. Detaches any attached objects, including any attached - * data. If a handler is associated with attached data, it is - * invoked before the node is deleted. - * - ******************************************************************************/ - -void -AcpiNsDeleteNode ( - ACPI_NAMESPACE_NODE *Node) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - - - ACPI_FUNCTION_NAME (NsDeleteNode); - - - /* Detach an object if there is one */ - - AcpiNsDetachObject (Node); - - /* - * Delete an attached data object if present (an object that was created - * and attached via AcpiAttachData). Note: After any normal object is - * detached above, the only possible remaining object is a data object. - */ - ObjDesc = Node->Object; - if (ObjDesc && - (ObjDesc->Common.Type == ACPI_TYPE_LOCAL_DATA)) - { - /* Invoke the attached data deletion handler if present */ - - if (ObjDesc->Data.Handler) - { - ObjDesc->Data.Handler (Node, ObjDesc->Data.Pointer); - } - - AcpiUtRemoveReference (ObjDesc); - } - - /* Now we can delete the node */ - - (void) AcpiOsReleaseObject (AcpiGbl_NamespaceCache, Node); - - ACPI_MEM_TRACKING (AcpiGbl_NsNodeList->TotalFreed++); - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Node %p, Remaining %X\n", - Node, AcpiGbl_CurrentNodeCount)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsRemoveNode - * - * PARAMETERS: Node - Node to be removed/deleted - * - * RETURN: None - * - * DESCRIPTION: Remove (unlink) and delete a namespace node - * - ******************************************************************************/ - -void -AcpiNsRemoveNode ( - ACPI_NAMESPACE_NODE *Node) -{ - ACPI_NAMESPACE_NODE *ParentNode; - ACPI_NAMESPACE_NODE *PrevNode; - ACPI_NAMESPACE_NODE *NextNode; - - - ACPI_FUNCTION_TRACE_PTR (NsRemoveNode, Node); - - - ParentNode = AcpiNsGetParentNode (Node); - - PrevNode = NULL; - NextNode = ParentNode->Child; - - /* Find the node that is the previous peer in the parent's child list */ - - while (NextNode != Node) - { - PrevNode = NextNode; - NextNode = PrevNode->Peer; - } - - if (PrevNode) - { - /* Node is not first child, unlink it */ - - PrevNode->Peer = NextNode->Peer; - if (NextNode->Flags & ANOBJ_END_OF_PEER_LIST) - { - PrevNode->Flags |= ANOBJ_END_OF_PEER_LIST; - } - } - else - { - /* Node is first child (has no previous peer) */ - - if (NextNode->Flags & ANOBJ_END_OF_PEER_LIST) - { - /* No peers at all */ - - ParentNode->Child = NULL; - } - else - { /* Link peer list to parent */ - - ParentNode->Child = NextNode->Peer; - } - } - - /* Delete the node and any attached objects */ - - AcpiNsDeleteNode (Node); - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsInstallNode - * - * PARAMETERS: WalkState - Current state of the walk - * ParentNode - The parent of the new Node - * Node - The new Node to install - * Type - ACPI object type of the new Node - * - * RETURN: None - * - * DESCRIPTION: Initialize a new namespace node and install it amongst - * its peers. - * - * Note: Current namespace lookup is linear search. This appears - * to be sufficient as namespace searches consume only a small - * fraction of the execution time of the ACPI subsystem. - * - ******************************************************************************/ - -void -AcpiNsInstallNode ( - ACPI_WALK_STATE *WalkState, - ACPI_NAMESPACE_NODE *ParentNode, /* Parent */ - ACPI_NAMESPACE_NODE *Node, /* New Child*/ - ACPI_OBJECT_TYPE Type) -{ - ACPI_OWNER_ID OwnerId = 0; - ACPI_NAMESPACE_NODE *ChildNode; - - - ACPI_FUNCTION_TRACE (NsInstallNode); - - - /* - * Get the owner ID from the Walk state. The owner ID is used to track - * table deletion and deletion of objects created by methods. - */ - if (WalkState) - { - OwnerId = WalkState->OwnerId; - } - - /* Link the new entry into the parent and existing children */ - - ChildNode = ParentNode->Child; - if (!ChildNode) - { - ParentNode->Child = Node; - Node->Flags |= ANOBJ_END_OF_PEER_LIST; - Node->Peer = ParentNode; - } - else - { - while (!(ChildNode->Flags & ANOBJ_END_OF_PEER_LIST)) - { - ChildNode = ChildNode->Peer; - } - - ChildNode->Peer = Node; - - /* Clear end-of-list flag */ - - ChildNode->Flags &= ~ANOBJ_END_OF_PEER_LIST; - Node->Flags |= ANOBJ_END_OF_PEER_LIST; - Node->Peer = ParentNode; - } - - /* Init the new entry */ - - Node->OwnerId = OwnerId; - Node->Type = (UINT8) Type; - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "%4.4s (%s) [Node %p Owner %X] added to %4.4s (%s) [Node %p]\n", - AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type), Node, OwnerId, - AcpiUtGetNodeName (ParentNode), AcpiUtGetTypeName (ParentNode->Type), - ParentNode)); - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsDeleteChildren - * - * PARAMETERS: ParentNode - Delete this objects children - * - * RETURN: None. - * - * DESCRIPTION: Delete all children of the parent object. In other words, - * deletes a "scope". - * - ******************************************************************************/ - -void -AcpiNsDeleteChildren ( - ACPI_NAMESPACE_NODE *ParentNode) -{ - ACPI_NAMESPACE_NODE *ChildNode; - ACPI_NAMESPACE_NODE *NextNode; - UINT8 Flags; - - - ACPI_FUNCTION_TRACE_PTR (NsDeleteChildren, ParentNode); - - - if (!ParentNode) - { - return_VOID; - } - - /* If no children, all done! */ - - ChildNode = ParentNode->Child; - if (!ChildNode) - { - return_VOID; - } - - /* Deallocate all children at this level */ - - do - { - /* Get the things we need */ - - NextNode = ChildNode->Peer; - Flags = ChildNode->Flags; - - /* Grandchildren should have all been deleted already */ - - if (ChildNode->Child) - { - ACPI_ERROR ((AE_INFO, "Found a grandchild! P=%p C=%p", - ParentNode, ChildNode)); - } - - /* - * Delete this child node and move on to the next child in the list. - * No need to unlink the node since we are deleting the entire branch. - */ - AcpiNsDeleteNode (ChildNode); - ChildNode = NextNode; - - } while (!(Flags & ANOBJ_END_OF_PEER_LIST)); - - /* Clear the parent's child pointer */ - - ParentNode->Child = NULL; - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsDeleteNamespaceSubtree - * - * PARAMETERS: ParentNode - Root of the subtree to be deleted - * - * RETURN: None. - * - * DESCRIPTION: Delete a subtree of the namespace. This includes all objects - * stored within the subtree. - * - ******************************************************************************/ - -void -AcpiNsDeleteNamespaceSubtree ( - ACPI_NAMESPACE_NODE *ParentNode) -{ - ACPI_NAMESPACE_NODE *ChildNode = NULL; - UINT32 Level = 1; - - - ACPI_FUNCTION_TRACE (NsDeleteNamespaceSubtree); - - - if (!ParentNode) - { - return_VOID; - } - - /* - * Traverse the tree of objects until we bubble back up - * to where we started. - */ - while (Level > 0) - { - /* Get the next node in this scope (NULL if none) */ - - ChildNode = AcpiNsGetNextNode (ParentNode, ChildNode); - if (ChildNode) - { - /* Found a child node - detach any attached object */ - - AcpiNsDetachObject (ChildNode); - - /* Check if this node has any children */ - - if (ChildNode->Child) - { - /* - * There is at least one child of this node, - * visit the node - */ - Level++; - ParentNode = ChildNode; - ChildNode = NULL; - } - } - else - { - /* - * No more children of this parent node. - * Move up to the grandparent. - */ - Level--; - - /* - * Now delete all of the children of this parent - * all at the same time. - */ - AcpiNsDeleteChildren (ParentNode); - - /* New "last child" is this parent node */ - - ChildNode = ParentNode; - - /* Move up the tree to the grandparent */ - - ParentNode = AcpiNsGetParentNode (ParentNode); - } - } - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsDeleteNamespaceByOwner - * - * PARAMETERS: OwnerId - All nodes with this owner will be deleted - * - * RETURN: Status - * - * DESCRIPTION: Delete entries within the namespace that are owned by a - * specific ID. Used to delete entire ACPI tables. All - * reference counts are updated. - * - * MUTEX: Locks namespace during deletion walk. - * - ******************************************************************************/ - -void -AcpiNsDeleteNamespaceByOwner ( - ACPI_OWNER_ID OwnerId) -{ - ACPI_NAMESPACE_NODE *ChildNode; - ACPI_NAMESPACE_NODE *DeletionNode; - ACPI_NAMESPACE_NODE *ParentNode; - UINT32 Level; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_U32 (NsDeleteNamespaceByOwner, OwnerId); - - - if (OwnerId == 0) - { - return_VOID; - } - - /* Lock namespace for possible update */ - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_VOID; - } - - DeletionNode = NULL; - ParentNode = AcpiGbl_RootNode; - ChildNode = NULL; - Level = 1; - - /* - * Traverse the tree of nodes until we bubble back up - * to where we started. - */ - while (Level > 0) - { - /* - * Get the next child of this parent node. When ChildNode is NULL, - * the first child of the parent is returned - */ - ChildNode = AcpiNsGetNextNode (ParentNode, ChildNode); - - if (DeletionNode) - { - AcpiNsDeleteChildren (DeletionNode); - AcpiNsRemoveNode (DeletionNode); - DeletionNode = NULL; - } - - if (ChildNode) - { - if (ChildNode->OwnerId == OwnerId) - { - /* Found a matching child node - detach any attached object */ - - AcpiNsDetachObject (ChildNode); - } - - /* Check if this node has any children */ - - if (ChildNode->Child) - { - /* - * There is at least one child of this node, - * visit the node - */ - Level++; - ParentNode = ChildNode; - ChildNode = NULL; - } - else if (ChildNode->OwnerId == OwnerId) - { - DeletionNode = ChildNode; - } - } - else - { - /* - * No more children of this parent node. - * Move up to the grandparent. - */ - Level--; - if (Level != 0) - { - if (ParentNode->OwnerId == OwnerId) - { - DeletionNode = ParentNode; - } - } - - /* New "last child" is this parent node */ - - ChildNode = ParentNode; - - /* Move up the tree to the grandparent */ - - ParentNode = AcpiNsGetParentNode (ParentNode); - } - } - - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return_VOID; -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsdump.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsdump.c deleted file mode 100644 index d799f7c64..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsdump.c +++ /dev/null @@ -1,826 +0,0 @@ -/****************************************************************************** - * - * Module Name: nsdump - table dumping routines for debug - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __NSDUMP_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsdump") - -/* Local prototypes */ - -#ifdef ACPI_OBSOLETE_FUNCTIONS -void -AcpiNsDumpRootDevices ( - void); - -static ACPI_STATUS -AcpiNsDumpOneDevice ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue); -#endif - - -#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) -/******************************************************************************* - * - * FUNCTION: AcpiNsPrintPathname - * - * PARAMETERS: NumSegments - Number of ACPI name segments - * Pathname - The compressed (internal) path - * - * RETURN: None - * - * DESCRIPTION: Print an object's full namespace pathname - * - ******************************************************************************/ - -void -AcpiNsPrintPathname ( - UINT32 NumSegments, - char *Pathname) -{ - UINT32 i; - - - ACPI_FUNCTION_NAME (NsPrintPathname); - - - if (!(AcpiDbgLevel & ACPI_LV_NAMES) || !(AcpiDbgLayer & ACPI_NAMESPACE)) - { - return; - } - - /* Print the entire name */ - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[")); - - while (NumSegments) - { - for (i = 0; i < 4; i++) - { - ACPI_IS_PRINT (Pathname[i]) ? - AcpiOsPrintf ("%c", Pathname[i]) : - AcpiOsPrintf ("?"); - } - - Pathname += ACPI_NAME_SIZE; - NumSegments--; - if (NumSegments) - { - AcpiOsPrintf ("."); - } - } - - AcpiOsPrintf ("]\n"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsDumpPathname - * - * PARAMETERS: Handle - Object - * Msg - Prefix message - * Level - Desired debug level - * Component - Caller's component ID - * - * RETURN: None - * - * DESCRIPTION: Print an object's full namespace pathname - * Manages allocation/freeing of a pathname buffer - * - ******************************************************************************/ - -void -AcpiNsDumpPathname ( - ACPI_HANDLE Handle, - char *Msg, - UINT32 Level, - UINT32 Component) -{ - - ACPI_FUNCTION_TRACE (NsDumpPathname); - - - /* Do this only if the requested debug level and component are enabled */ - - if (!(AcpiDbgLevel & Level) || !(AcpiDbgLayer & Component)) - { - return_VOID; - } - - /* Convert handle to a full pathname and print it (with supplied message) */ - - AcpiNsPrintNodePathname (Handle, Msg); - AcpiOsPrintf ("\n"); - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsDumpOneObject - * - * PARAMETERS: ObjHandle - Node to be dumped - * Level - Nesting level of the handle - * Context - Passed into WalkNamespace - * ReturnValue - Not used - * - * RETURN: Status - * - * DESCRIPTION: Dump a single Node - * This procedure is a UserFunction called by AcpiNsWalkNamespace. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsDumpOneObject ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue) -{ - ACPI_WALK_INFO *Info = (ACPI_WALK_INFO *) Context; - ACPI_NAMESPACE_NODE *ThisNode; - ACPI_OPERAND_OBJECT *ObjDesc = NULL; - ACPI_OBJECT_TYPE ObjType; - ACPI_OBJECT_TYPE Type; - UINT32 BytesToDump; - UINT32 DbgLevel; - UINT32 i; - - - ACPI_FUNCTION_NAME (NsDumpOneObject); - - - /* Is output enabled? */ - - if (!(AcpiDbgLevel & Info->DebugLevel)) - { - return (AE_OK); - } - - if (!ObjHandle) - { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Null object handle\n")); - return (AE_OK); - } - - ThisNode = AcpiNsValidateHandle (ObjHandle); - if (!ThisNode) - { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Invalid object handle %p\n", - ObjHandle)); - return (AE_OK); - } - - Type = ThisNode->Type; - - /* Check if the owner matches */ - - if ((Info->OwnerId != ACPI_OWNER_ID_MAX) && - (Info->OwnerId != ThisNode->OwnerId)) - { - return (AE_OK); - } - - if (!(Info->DisplayType & ACPI_DISPLAY_SHORT)) - { - /* Indent the object according to the level */ - - AcpiOsPrintf ("%2d%*s", (UINT32) Level - 1, (int) Level * 2, " "); - - /* Check the node type and name */ - - if (Type > ACPI_TYPE_LOCAL_MAX) - { - ACPI_WARNING ((AE_INFO, "Invalid ACPI Object Type %08X", Type)); - } - - AcpiOsPrintf ("%4.4s", AcpiUtGetNodeName (ThisNode)); - } - - /* Now we can print out the pertinent information */ - - AcpiOsPrintf (" %-12s %p %2.2X ", - AcpiUtGetTypeName (Type), ThisNode, ThisNode->OwnerId); - - DbgLevel = AcpiDbgLevel; - AcpiDbgLevel = 0; - ObjDesc = AcpiNsGetAttachedObject (ThisNode); - AcpiDbgLevel = DbgLevel; - - /* Temp nodes are those nodes created by a control method */ - - if (ThisNode->Flags & ANOBJ_TEMPORARY) - { - AcpiOsPrintf ("(T) "); - } - - switch (Info->DisplayType & ACPI_DISPLAY_MASK) - { - case ACPI_DISPLAY_SUMMARY: - - if (!ObjDesc) - { - /* No attached object, we are done */ - - AcpiOsPrintf ("\n"); - return (AE_OK); - } - - switch (Type) - { - case ACPI_TYPE_PROCESSOR: - - AcpiOsPrintf ("ID %X Len %.4X Addr %p\n", - ObjDesc->Processor.ProcId, ObjDesc->Processor.Length, - ACPI_CAST_PTR (void, ObjDesc->Processor.Address)); - break; - - - case ACPI_TYPE_DEVICE: - - AcpiOsPrintf ("Notify Object: %p\n", ObjDesc); - break; - - - case ACPI_TYPE_METHOD: - - AcpiOsPrintf ("Args %X Len %.4X Aml %p\n", - (UINT32) ObjDesc->Method.ParamCount, - ObjDesc->Method.AmlLength, ObjDesc->Method.AmlStart); - break; - - - case ACPI_TYPE_INTEGER: - - AcpiOsPrintf ("= %8.8X%8.8X\n", - ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); - break; - - - case ACPI_TYPE_PACKAGE: - - if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) - { - AcpiOsPrintf ("Elements %.2X\n", - ObjDesc->Package.Count); - } - else - { - AcpiOsPrintf ("[Length not yet evaluated]\n"); - } - break; - - - case ACPI_TYPE_BUFFER: - - if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) - { - AcpiOsPrintf ("Len %.2X", - ObjDesc->Buffer.Length); - - /* Dump some of the buffer */ - - if (ObjDesc->Buffer.Length > 0) - { - AcpiOsPrintf (" ="); - for (i = 0; (i < ObjDesc->Buffer.Length && i < 12); i++) - { - AcpiOsPrintf (" %.2hX", ObjDesc->Buffer.Pointer[i]); - } - } - AcpiOsPrintf ("\n"); - } - else - { - AcpiOsPrintf ("[Length not yet evaluated]\n"); - } - break; - - - case ACPI_TYPE_STRING: - - AcpiOsPrintf ("Len %.2X ", ObjDesc->String.Length); - AcpiUtPrintString (ObjDesc->String.Pointer, 32); - AcpiOsPrintf ("\n"); - break; - - - case ACPI_TYPE_REGION: - - AcpiOsPrintf ("[%s]", - AcpiUtGetRegionName (ObjDesc->Region.SpaceId)); - if (ObjDesc->Region.Flags & AOPOBJ_DATA_VALID) - { - AcpiOsPrintf (" Addr %8.8X%8.8X Len %.4X\n", - ACPI_FORMAT_NATIVE_UINT (ObjDesc->Region.Address), - ObjDesc->Region.Length); - } - else - { - AcpiOsPrintf (" [Address/Length not yet evaluated]\n"); - } - break; - - - case ACPI_TYPE_LOCAL_REFERENCE: - - AcpiOsPrintf ("[%s]\n", AcpiUtGetReferenceName (ObjDesc)); - break; - - - case ACPI_TYPE_BUFFER_FIELD: - - if (ObjDesc->BufferField.BufferObj && - ObjDesc->BufferField.BufferObj->Buffer.Node) - { - AcpiOsPrintf ("Buf [%4.4s]", - AcpiUtGetNodeName ( - ObjDesc->BufferField.BufferObj->Buffer.Node)); - } - break; - - - case ACPI_TYPE_LOCAL_REGION_FIELD: - - AcpiOsPrintf ("Rgn [%4.4s]", - AcpiUtGetNodeName ( - ObjDesc->CommonField.RegionObj->Region.Node)); - break; - - - case ACPI_TYPE_LOCAL_BANK_FIELD: - - AcpiOsPrintf ("Rgn [%4.4s] Bnk [%4.4s]", - AcpiUtGetNodeName ( - ObjDesc->CommonField.RegionObj->Region.Node), - AcpiUtGetNodeName ( - ObjDesc->BankField.BankObj->CommonField.Node)); - break; - - - case ACPI_TYPE_LOCAL_INDEX_FIELD: - - AcpiOsPrintf ("Idx [%4.4s] Dat [%4.4s]", - AcpiUtGetNodeName ( - ObjDesc->IndexField.IndexObj->CommonField.Node), - AcpiUtGetNodeName ( - ObjDesc->IndexField.DataObj->CommonField.Node)); - break; - - - case ACPI_TYPE_LOCAL_ALIAS: - case ACPI_TYPE_LOCAL_METHOD_ALIAS: - - AcpiOsPrintf ("Target %4.4s (%p)\n", - AcpiUtGetNodeName (ObjDesc), ObjDesc); - break; - - default: - - AcpiOsPrintf ("Object %p\n", ObjDesc); - break; - } - - /* Common field handling */ - - switch (Type) - { - case ACPI_TYPE_BUFFER_FIELD: - case ACPI_TYPE_LOCAL_REGION_FIELD: - case ACPI_TYPE_LOCAL_BANK_FIELD: - case ACPI_TYPE_LOCAL_INDEX_FIELD: - - AcpiOsPrintf (" Off %.3X Len %.2X Acc %.2hd\n", - (ObjDesc->CommonField.BaseByteOffset * 8) - + ObjDesc->CommonField.StartFieldBitOffset, - ObjDesc->CommonField.BitLength, - ObjDesc->CommonField.AccessByteWidth); - break; - - default: - break; - } - break; - - - case ACPI_DISPLAY_OBJECTS: - - AcpiOsPrintf ("O:%p", ObjDesc); - if (!ObjDesc) - { - /* No attached object, we are done */ - - AcpiOsPrintf ("\n"); - return (AE_OK); - } - - AcpiOsPrintf ("(R%d)", ObjDesc->Common.ReferenceCount); - - switch (Type) - { - case ACPI_TYPE_METHOD: - - /* Name is a Method and its AML offset/length are set */ - - AcpiOsPrintf (" M:%p-%X\n", ObjDesc->Method.AmlStart, - ObjDesc->Method.AmlLength); - break; - - case ACPI_TYPE_INTEGER: - - AcpiOsPrintf (" I:%8.8X8.8%X\n", - ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); - break; - - case ACPI_TYPE_STRING: - - AcpiOsPrintf (" S:%p-%X\n", ObjDesc->String.Pointer, - ObjDesc->String.Length); - break; - - case ACPI_TYPE_BUFFER: - - AcpiOsPrintf (" B:%p-%X\n", ObjDesc->Buffer.Pointer, - ObjDesc->Buffer.Length); - break; - - default: - - AcpiOsPrintf ("\n"); - break; - } - break; - - - default: - AcpiOsPrintf ("\n"); - break; - } - - /* If debug turned off, done */ - - if (!(AcpiDbgLevel & ACPI_LV_VALUES)) - { - return (AE_OK); - } - - /* If there is an attached object, display it */ - - DbgLevel = AcpiDbgLevel; - AcpiDbgLevel = 0; - ObjDesc = AcpiNsGetAttachedObject (ThisNode); - AcpiDbgLevel = DbgLevel; - - /* Dump attached objects */ - - while (ObjDesc) - { - ObjType = ACPI_TYPE_INVALID; - AcpiOsPrintf ("Attached Object %p: ", ObjDesc); - - /* Decode the type of attached object and dump the contents */ - - switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc)) - { - case ACPI_DESC_TYPE_NAMED: - - AcpiOsPrintf ("(Ptr to Node)\n"); - BytesToDump = sizeof (ACPI_NAMESPACE_NODE); - ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); - break; - - case ACPI_DESC_TYPE_OPERAND: - - ObjType = ObjDesc->Common.Type; - - if (ObjType > ACPI_TYPE_LOCAL_MAX) - { - AcpiOsPrintf ("(Pointer to ACPI Object type %.2X [UNKNOWN])\n", - ObjType); - BytesToDump = 32; - } - else - { - AcpiOsPrintf ("(Pointer to ACPI Object type %.2X [%s])\n", - ObjType, AcpiUtGetTypeName (ObjType)); - BytesToDump = sizeof (ACPI_OPERAND_OBJECT); - } - - ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); - break; - - default: - - break; - } - - /* If value is NOT an internal object, we are done */ - - if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) - { - goto Cleanup; - } - - /* Valid object, get the pointer to next level, if any */ - - switch (ObjType) - { - case ACPI_TYPE_BUFFER: - case ACPI_TYPE_STRING: - /* - * NOTE: takes advantage of common fields between string/buffer - */ - BytesToDump = ObjDesc->String.Length; - ObjDesc = (void *) ObjDesc->String.Pointer; - AcpiOsPrintf ( "(Buffer/String pointer %p length %X)\n", - ObjDesc, BytesToDump); - ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); - goto Cleanup; - - case ACPI_TYPE_BUFFER_FIELD: - ObjDesc = (ACPI_OPERAND_OBJECT *) ObjDesc->BufferField.BufferObj; - break; - - case ACPI_TYPE_PACKAGE: - ObjDesc = (void *) ObjDesc->Package.Elements; - break; - - case ACPI_TYPE_METHOD: - ObjDesc = (void *) ObjDesc->Method.AmlStart; - break; - - case ACPI_TYPE_LOCAL_REGION_FIELD: - ObjDesc = (void *) ObjDesc->Field.RegionObj; - break; - - case ACPI_TYPE_LOCAL_BANK_FIELD: - ObjDesc = (void *) ObjDesc->BankField.RegionObj; - break; - - case ACPI_TYPE_LOCAL_INDEX_FIELD: - ObjDesc = (void *) ObjDesc->IndexField.IndexObj; - break; - - default: - goto Cleanup; - } - - ObjType = ACPI_TYPE_INVALID; /* Terminate loop after next pass */ - } - -Cleanup: - AcpiOsPrintf ("\n"); - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsDumpObjects - * - * PARAMETERS: Type - Object type to be dumped - * DisplayType - 0 or ACPI_DISPLAY_SUMMARY - * MaxDepth - Maximum depth of dump. Use ACPI_UINT32_MAX - * for an effectively unlimited depth. - * OwnerId - Dump only objects owned by this ID. Use - * ACPI_UINT32_MAX to match all owners. - * StartHandle - Where in namespace to start/end search - * - * RETURN: None - * - * DESCRIPTION: Dump typed objects within the loaded namespace. Uses - * AcpiNsWalkNamespace in conjunction with AcpiNsDumpOneObject. - * - ******************************************************************************/ - -void -AcpiNsDumpObjects ( - ACPI_OBJECT_TYPE Type, - UINT8 DisplayType, - UINT32 MaxDepth, - ACPI_OWNER_ID OwnerId, - ACPI_HANDLE StartHandle) -{ - ACPI_WALK_INFO Info; - - - ACPI_FUNCTION_ENTRY (); - - - Info.DebugLevel = ACPI_LV_TABLES; - Info.OwnerId = OwnerId; - Info.DisplayType = DisplayType; - - (void) AcpiNsWalkNamespace (Type, StartHandle, MaxDepth, - ACPI_NS_WALK_NO_UNLOCK | ACPI_NS_WALK_TEMP_NODES, - AcpiNsDumpOneObject, NULL, (void *) &Info, NULL); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsDumpEntry - * - * PARAMETERS: Handle - Node to be dumped - * DebugLevel - Output level - * - * RETURN: None - * - * DESCRIPTION: Dump a single Node - * - ******************************************************************************/ - -void -AcpiNsDumpEntry ( - ACPI_HANDLE Handle, - UINT32 DebugLevel) -{ - ACPI_WALK_INFO Info; - - - ACPI_FUNCTION_ENTRY (); - - - Info.DebugLevel = DebugLevel; - Info.OwnerId = ACPI_OWNER_ID_MAX; - Info.DisplayType = ACPI_DISPLAY_SUMMARY; - - (void) AcpiNsDumpOneObject (Handle, 1, &Info, NULL); -} - - -#ifdef ACPI_ASL_COMPILER -/******************************************************************************* - * - * FUNCTION: AcpiNsDumpTables - * - * PARAMETERS: SearchBase - Root of subtree to be dumped, or - * NS_ALL to dump the entire namespace - * MaxDepth - Maximum depth of dump. Use INT_MAX - * for an effectively unlimited depth. - * - * RETURN: None - * - * DESCRIPTION: Dump the name space, or a portion of it. - * - ******************************************************************************/ - -void -AcpiNsDumpTables ( - ACPI_HANDLE SearchBase, - UINT32 MaxDepth) -{ - ACPI_HANDLE SearchHandle = SearchBase; - - - ACPI_FUNCTION_TRACE (NsDumpTables); - - - if (!AcpiGbl_RootNode) - { - /* - * If the name space has not been initialized, - * there is nothing to dump. - */ - ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "namespace not initialized!\n")); - return_VOID; - } - - if (ACPI_NS_ALL == SearchBase) - { - /* Entire namespace */ - - SearchHandle = AcpiGbl_RootNode; - ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "\\\n")); - } - - AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, MaxDepth, - ACPI_OWNER_ID_MAX, SearchHandle); - return_VOID; -} -#endif -#endif - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsdumpdv.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsdumpdv.c deleted file mode 100644 index fbb66a616..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsdumpdv.c +++ /dev/null @@ -1,234 +0,0 @@ -/****************************************************************************** - * - * Module Name: nsdump - table dumping routines for debug - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __NSDUMPDV_C__ - -#include "acpi.h" - - -/* TBD: This entire module is apparently obsolete and should be removed */ - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsdumpdv") - -#ifdef ACPI_OBSOLETE_FUNCTIONS -#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) - -#include "acnamesp.h" - -/******************************************************************************* - * - * FUNCTION: AcpiNsDumpOneDevice - * - * PARAMETERS: Handle - Node to be dumped - * Level - Nesting level of the handle - * Context - Passed into WalkNamespace - * ReturnValue - Not used - * - * RETURN: Status - * - * DESCRIPTION: Dump a single Node that represents a device - * This procedure is a UserFunction called by AcpiNsWalkNamespace. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsDumpOneDevice ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue) -{ - ACPI_BUFFER Buffer; - ACPI_DEVICE_INFO *Info; - ACPI_STATUS Status; - UINT32 i; - - - ACPI_FUNCTION_NAME (NsDumpOneDevice); - - - Status = AcpiNsDumpOneObject (ObjHandle, Level, Context, ReturnValue); - - Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - Status = AcpiGetObjectInfo (ObjHandle, &Buffer); - if (ACPI_SUCCESS (Status)) - { - Info = Buffer.Pointer; - for (i = 0; i < Level; i++) - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " ")); - } - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, - " HID: %s, ADR: %8.8X%8.8X, Status: %X\n", - Info->HardwareId.Value, ACPI_FORMAT_UINT64 (Info->Address), - Info->CurrentStatus)); - ACPI_FREE (Info); - } - - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsDumpRootDevices - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Dump all objects of type "device" - * - ******************************************************************************/ - -void -AcpiNsDumpRootDevices ( - void) -{ - ACPI_HANDLE SysBusHandle; - ACPI_STATUS Status; - - - ACPI_FUNCTION_NAME (NsDumpRootDevices); - - - /* Only dump the table if tracing is enabled */ - - if (!(ACPI_LV_TABLES & AcpiDbgLevel)) - { - return; - } - - Status = AcpiGetHandle (NULL, ACPI_NS_SYSTEM_BUS, &SysBusHandle); - if (ACPI_FAILURE (Status)) - { - return; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, - "Display of all devices in the namespace:\n")); - - Status = AcpiNsWalkNamespace (ACPI_TYPE_DEVICE, SysBusHandle, - ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, - AcpiNsDumpOneDevice, NULL, NULL, NULL); -} - -#endif -#endif - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nseval.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nseval.c deleted file mode 100644 index 07af96ed9..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nseval.c +++ /dev/null @@ -1,558 +0,0 @@ -/******************************************************************************* - * - * Module Name: nseval - Object evaluation, includes control method execution - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __NSEVAL_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "acinterp.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nseval") - -/* Local prototypes */ - -static void -AcpiNsExecModuleCode ( - ACPI_OPERAND_OBJECT *MethodObj, - ACPI_EVALUATE_INFO *Info); - - -/******************************************************************************* - * - * FUNCTION: AcpiNsEvaluate - * - * PARAMETERS: Info - Evaluation info block, contains: - * PrefixNode - Prefix or Method/Object Node to execute - * Pathname - Name of method to execute, If NULL, the - * Node is the object to execute - * Parameters - List of parameters to pass to the method, - * terminated by NULL. Params itself may be - * NULL if no parameters are being passed. - * ReturnObject - Where to put method's return value (if - * any). If NULL, no value is returned. - * ParameterType - Type of Parameter list - * ReturnObject - Where to put method's return value (if - * any). If NULL, no value is returned. - * Flags - ACPI_IGNORE_RETURN_VALUE to delete return - * - * RETURN: Status - * - * DESCRIPTION: Execute a control method or return the current value of an - * ACPI namespace object. - * - * MUTEX: Locks interpreter - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsEvaluate ( - ACPI_EVALUATE_INFO *Info) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - - - ACPI_FUNCTION_TRACE (NsEvaluate); - - - if (!Info) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Initialize the return value to an invalid object */ - - Info->ReturnObject = NULL; - Info->ParamCount = 0; - - /* - * Get the actual namespace node for the target object. Handles these cases: - * - * 1) Null node, Pathname (absolute path) - * 2) Node, Pathname (path relative to Node) - * 3) Node, Null Pathname - */ - Status = AcpiNsGetNode (Info->PrefixNode, Info->Pathname, - ACPI_NS_NO_UPSEARCH, &Info->ResolvedNode); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * For a method alias, we must grab the actual method node so that proper - * scoping context will be established before execution. - */ - if (AcpiNsGetType (Info->ResolvedNode) == ACPI_TYPE_LOCAL_METHOD_ALIAS) - { - Info->ResolvedNode = - ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Info->ResolvedNode->Object); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%s [%p] Value %p\n", Info->Pathname, - Info->ResolvedNode, AcpiNsGetAttachedObject (Info->ResolvedNode))); - - Node = Info->ResolvedNode; - - /* - * Two major cases here: - * - * 1) The object is a control method -- execute it - * 2) The object is not a method -- just return it's current value - */ - if (AcpiNsGetType (Info->ResolvedNode) == ACPI_TYPE_METHOD) - { - /* - * 1) Object is a control method - execute it - */ - - /* Verify that there is a method object associated with this node */ - - Info->ObjDesc = AcpiNsGetAttachedObject (Info->ResolvedNode); - if (!Info->ObjDesc) - { - ACPI_ERROR ((AE_INFO, "Control method has no attached sub-object")); - return_ACPI_STATUS (AE_NULL_OBJECT); - } - - /* Count the number of arguments being passed to the method */ - - if (Info->Parameters) - { - while (Info->Parameters[Info->ParamCount]) - { - if (Info->ParamCount > ACPI_METHOD_MAX_ARG) - { - return_ACPI_STATUS (AE_LIMIT); - } - Info->ParamCount++; - } - } - - ACPI_DUMP_PATHNAME (Info->ResolvedNode, "ACPI: Execute Method", - ACPI_LV_INFO, _COMPONENT); - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Method at AML address %p Length %X\n", - Info->ObjDesc->Method.AmlStart + 1, - Info->ObjDesc->Method.AmlLength - 1)); - - /* - * Any namespace deletion must acquire both the namespace and - * interpreter locks to ensure that no thread is using the portion of - * the namespace that is being deleted. - * - * Execute the method via the interpreter. The interpreter is locked - * here before calling into the AML parser - */ - AcpiExEnterInterpreter (); - Status = AcpiPsExecuteMethod (Info); - AcpiExExitInterpreter (); - } - else - { - /* - * 2) Object is not a method, return its current value - * - * Disallow certain object types. For these, "evaluation" is undefined. - */ - switch (Info->ResolvedNode->Type) - { - case ACPI_TYPE_DEVICE: - case ACPI_TYPE_EVENT: - case ACPI_TYPE_MUTEX: - case ACPI_TYPE_REGION: - case ACPI_TYPE_THERMAL: - case ACPI_TYPE_LOCAL_SCOPE: - - ACPI_ERROR ((AE_INFO, - "[%4.4s] Evaluation of object type [%s] is not supported", - Info->ResolvedNode->Name.Ascii, - AcpiUtGetTypeName (Info->ResolvedNode->Type))); - - return_ACPI_STATUS (AE_TYPE); - - default: - break; - } - - /* - * Objects require additional resolution steps (e.g., the Node may be - * a field that must be read, etc.) -- we can't just grab the object - * out of the node. - * - * Use ResolveNodeToValue() to get the associated value. - * - * NOTE: we can get away with passing in NULL for a walk state because - * ResolvedNode is guaranteed to not be a reference to either a method - * local or a method argument (because this interface is never called - * from a running method.) - * - * Even though we do not directly invoke the interpreter for object - * resolution, we must lock it because we could access an opregion. - * The opregion access code assumes that the interpreter is locked. - */ - AcpiExEnterInterpreter (); - - /* Function has a strange interface */ - - Status = AcpiExResolveNodeToValue (&Info->ResolvedNode, NULL); - AcpiExExitInterpreter (); - - /* - * If AcpiExResolveNodeToValue() succeeded, the return value was placed - * in ResolvedNode. - */ - if (ACPI_SUCCESS (Status)) - { - Status = AE_CTRL_RETURN_VALUE; - Info->ReturnObject = - ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Info->ResolvedNode); - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Returning object %p [%s]\n", - Info->ReturnObject, - AcpiUtGetObjectTypeName (Info->ReturnObject))); - } - } - - /* - * Check input argument count against the ASL-defined count for a method. - * Also check predefined names: argument count and return value against - * the ACPI specification. Some incorrect return value types are repaired. - */ - (void) AcpiNsCheckPredefinedNames (Node, Info->ParamCount, - Status, &Info->ReturnObject); - - /* Check if there is a return value that must be dealt with */ - - if (Status == AE_CTRL_RETURN_VALUE) - { - /* If caller does not want the return value, delete it */ - - if (Info->Flags & ACPI_IGNORE_RETURN_VALUE) - { - AcpiUtRemoveReference (Info->ReturnObject); - Info->ReturnObject = NULL; - } - - /* Map AE_CTRL_RETURN_VALUE to AE_OK, we are done with it */ - - Status = AE_OK; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "*** Completed evaluation of object %s ***\n", Info->Pathname)); - - /* - * Namespace was unlocked by the handling AcpiNs* function, so we - * just return - */ - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsExecModuleCodeList - * - * PARAMETERS: None - * - * RETURN: None. Exceptions during method execution are ignored, since - * we cannot abort a table load. - * - * DESCRIPTION: Execute all elements of the global module-level code list. - * Each element is executed as a single control method. - * - ******************************************************************************/ - -void -AcpiNsExecModuleCodeList ( - void) -{ - ACPI_OPERAND_OBJECT *Prev; - ACPI_OPERAND_OBJECT *Next; - ACPI_EVALUATE_INFO *Info; - UINT32 MethodCount = 0; - - - ACPI_FUNCTION_TRACE (NsExecModuleCodeList); - - - /* Exit now if the list is empty */ - - Next = AcpiGbl_ModuleCodeList; - if (!Next) - { - return_VOID; - } - - /* Allocate the evaluation information block */ - - Info = ACPI_ALLOCATE (sizeof (ACPI_EVALUATE_INFO)); - if (!Info) - { - return_VOID; - } - - /* Walk the list, executing each "method" */ - - while (Next) - { - Prev = Next; - Next = Next->Method.Mutex; - - /* Clear the link field and execute the method */ - - Prev->Method.Mutex = NULL; - AcpiNsExecModuleCode (Prev, Info); - MethodCount++; - - /* Delete the (temporary) method object */ - - AcpiUtRemoveReference (Prev); - } - - ACPI_INFO ((AE_INFO, - "Executed %u blocks of module-level executable AML code", - MethodCount)); - - ACPI_FREE (Info); - AcpiGbl_ModuleCodeList = NULL; - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsExecModuleCode - * - * PARAMETERS: MethodObj - Object container for the module-level code - * Info - Info block for method evaluation - * - * RETURN: None. Exceptions during method execution are ignored, since - * we cannot abort a table load. - * - * DESCRIPTION: Execute a control method containing a block of module-level - * executable AML code. The control method is temporarily - * installed to the root node, then evaluated. - * - ******************************************************************************/ - -static void -AcpiNsExecModuleCode ( - ACPI_OPERAND_OBJECT *MethodObj, - ACPI_EVALUATE_INFO *Info) -{ - ACPI_OPERAND_OBJECT *ParentObj; - ACPI_NAMESPACE_NODE *ParentNode; - ACPI_OBJECT_TYPE Type; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (NsExecModuleCode); - - - /* - * Get the parent node. We cheat by using the NextObject field - * of the method object descriptor. - */ - ParentNode = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, - MethodObj->Method.NextObject); - Type = AcpiNsGetType (ParentNode); - - /* - * Get the region handler and save it in the method object. We may need - * this if an operation region declaration causes a _REG method to be run. - * - * We can't do this in AcpiPsLinkModuleCode because - * AcpiGbl_RootNode->Object is NULL at PASS1. - */ - if ((Type == ACPI_TYPE_DEVICE) && ParentNode->Object) - { - MethodObj->Method.Extra.Handler = - ParentNode->Object->Device.Handler; - } - - /* Must clear NextObject (AcpiNsAttachObject needs the field) */ - - MethodObj->Method.NextObject = NULL; - - /* Initialize the evaluation information block */ - - ACPI_MEMSET (Info, 0, sizeof (ACPI_EVALUATE_INFO)); - Info->PrefixNode = ParentNode; - - /* - * Get the currently attached parent object. Add a reference, because the - * ref count will be decreased when the method object is installed to - * the parent node. - */ - ParentObj = AcpiNsGetAttachedObject (ParentNode); - if (ParentObj) - { - AcpiUtAddReference (ParentObj); - } - - /* Install the method (module-level code) in the parent node */ - - Status = AcpiNsAttachObject (ParentNode, MethodObj, - ACPI_TYPE_METHOD); - if (ACPI_FAILURE (Status)) - { - goto Exit; - } - - /* Execute the parent node as a control method */ - - Status = AcpiNsEvaluate (Info); - - ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "Executed module-level code at %p\n", - MethodObj->Method.AmlStart)); - - /* Delete a possible implicit return value (in slack mode) */ - - if (Info->ReturnObject) - { - AcpiUtRemoveReference (Info->ReturnObject); - } - - /* Detach the temporary method object */ - - AcpiNsDetachObject (ParentNode); - - /* Restore the original parent object */ - - if (ParentObj) - { - Status = AcpiNsAttachObject (ParentNode, ParentObj, Type); - } - else - { - ParentNode->Type = (UINT8) Type; - } - -Exit: - if (ParentObj) - { - AcpiUtRemoveReference (ParentObj); - } - return_VOID; -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsinit.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsinit.c deleted file mode 100644 index b36fa6c7e..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsinit.c +++ /dev/null @@ -1,727 +0,0 @@ -/****************************************************************************** - * - * Module Name: nsinit - namespace initialization - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __NSXFINIT_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "acdispat.h" -#include "acinterp.h" - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsinit") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiNsInitOneObject ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue); - -static ACPI_STATUS -AcpiNsInitOneDevice ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue); - -static ACPI_STATUS -AcpiNsFindIniMethods ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue); - - -/******************************************************************************* - * - * FUNCTION: AcpiNsInitializeObjects - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Walk the entire namespace and perform any necessary - * initialization on the objects found therein - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsInitializeObjects ( - void) -{ - ACPI_STATUS Status; - ACPI_INIT_WALK_INFO Info; - - - ACPI_FUNCTION_TRACE (NsInitializeObjects); - - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "**** Starting initialization of namespace objects ****\n")); - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, - "Completing Region/Field/Buffer/Package initialization:")); - - /* Set all init info to zero */ - - ACPI_MEMSET (&Info, 0, sizeof (ACPI_INIT_WALK_INFO)); - - /* Walk entire namespace from the supplied root */ - - Status = AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, AcpiNsInitOneObject, NULL, - &Info, NULL); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, "During WalkNamespace")); - } - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, - "\nInitialized %hd/%hd Regions %hd/%hd Fields %hd/%hd " - "Buffers %hd/%hd Packages (%hd nodes)\n", - Info.OpRegionInit, Info.OpRegionCount, - Info.FieldInit, Info.FieldCount, - Info.BufferInit, Info.BufferCount, - Info.PackageInit, Info.PackageCount, Info.ObjectCount)); - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "%hd Control Methods found\n", Info.MethodCount)); - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "%hd Op Regions found\n", Info.OpRegionCount)); - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsInitializeDevices - * - * PARAMETERS: None - * - * RETURN: ACPI_STATUS - * - * DESCRIPTION: Walk the entire namespace and initialize all ACPI devices. - * This means running _INI on all present devices. - * - * Note: We install PCI config space handler on region access, - * not here. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsInitializeDevices ( - void) -{ - ACPI_STATUS Status; - ACPI_DEVICE_WALK_INFO Info; - - - ACPI_FUNCTION_TRACE (NsInitializeDevices); - - - /* Init counters */ - - Info.DeviceCount = 0; - Info.Num_STA = 0; - Info.Num_INI = 0; - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, - "Initializing Device/Processor/Thermal objects " - "by executing _INI methods:")); - - /* Tree analysis: find all subtrees that contain _INI methods */ - - Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, FALSE, AcpiNsFindIniMethods, NULL, &Info, NULL); - if (ACPI_FAILURE (Status)) - { - goto ErrorExit; - } - - /* Allocate the evaluation information block */ - - Info.EvaluateInfo = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); - if (!Info.EvaluateInfo) - { - Status = AE_NO_MEMORY; - goto ErrorExit; - } - - /* - * Execute the "global" _INI method that may appear at the root. This - * support is provided for Windows compatibility (Vista+) and is not - * part of the ACPI specification. - */ - Info.EvaluateInfo->PrefixNode = AcpiGbl_RootNode; - Info.EvaluateInfo->Pathname = METHOD_NAME__INI; - Info.EvaluateInfo->Parameters = NULL; - Info.EvaluateInfo->Flags = ACPI_IGNORE_RETURN_VALUE; - - Status = AcpiNsEvaluate (Info.EvaluateInfo); - if (ACPI_SUCCESS (Status)) - { - Info.Num_INI++; - } - - /* Walk namespace to execute all _INIs on present devices */ - - Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, FALSE, AcpiNsInitOneDevice, NULL, &Info, NULL); - - ACPI_FREE (Info.EvaluateInfo); - if (ACPI_FAILURE (Status)) - { - goto ErrorExit; - } - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, - "\nExecuted %hd _INI methods requiring %hd _STA executions " - "(examined %hd objects)\n", - Info.Num_INI, Info.Num_STA, Info.DeviceCount)); - - return_ACPI_STATUS (Status); - - -ErrorExit: - ACPI_EXCEPTION ((AE_INFO, Status, "During device initialization")); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsInitOneObject - * - * PARAMETERS: ObjHandle - Node - * Level - Current nesting level - * Context - Points to a init info struct - * ReturnValue - Not used - * - * RETURN: Status - * - * DESCRIPTION: Callback from AcpiWalkNamespace. Invoked for every object - * within the namespace. - * - * Currently, the only objects that require initialization are: - * 1) Methods - * 2) Op Regions - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsInitOneObject ( - ACPI_HANDLE ObjHandle, - UINT32 Level, - void *Context, - void **ReturnValue) -{ - ACPI_OBJECT_TYPE Type; - ACPI_STATUS Status = AE_OK; - ACPI_INIT_WALK_INFO *Info = (ACPI_INIT_WALK_INFO *) Context; - ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; - ACPI_OPERAND_OBJECT *ObjDesc; - - - ACPI_FUNCTION_NAME (NsInitOneObject); - - - Info->ObjectCount++; - - /* And even then, we are only interested in a few object types */ - - Type = AcpiNsGetType (ObjHandle); - ObjDesc = AcpiNsGetAttachedObject (Node); - if (!ObjDesc) - { - return (AE_OK); - } - - /* Increment counters for object types we are looking for */ - - switch (Type) - { - case ACPI_TYPE_REGION: - Info->OpRegionCount++; - break; - - case ACPI_TYPE_BUFFER_FIELD: - Info->FieldCount++; - break; - - case ACPI_TYPE_LOCAL_BANK_FIELD: - Info->FieldCount++; - break; - - case ACPI_TYPE_BUFFER: - Info->BufferCount++; - break; - - case ACPI_TYPE_PACKAGE: - Info->PackageCount++; - break; - - default: - - /* No init required, just exit now */ - return (AE_OK); - } - - /* If the object is already initialized, nothing else to do */ - - if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) - { - return (AE_OK); - } - - /* Must lock the interpreter before executing AML code */ - - AcpiExEnterInterpreter (); - - /* - * Each of these types can contain executable AML code within the - * declaration. - */ - switch (Type) - { - case ACPI_TYPE_REGION: - - Info->OpRegionInit++; - Status = AcpiDsGetRegionArguments (ObjDesc); - break; - - case ACPI_TYPE_BUFFER_FIELD: - - Info->FieldInit++; - Status = AcpiDsGetBufferFieldArguments (ObjDesc); - break; - - case ACPI_TYPE_LOCAL_BANK_FIELD: - - Info->FieldInit++; - Status = AcpiDsGetBankFieldArguments (ObjDesc); - break; - - case ACPI_TYPE_BUFFER: - - Info->BufferInit++; - Status = AcpiDsGetBufferArguments (ObjDesc); - break; - - case ACPI_TYPE_PACKAGE: - - Info->PackageInit++; - Status = AcpiDsGetPackageArguments (ObjDesc); - break; - - default: - /* No other types can get here */ - break; - } - - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not execute arguments for [%4.4s] (%s)", - AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Type))); - } - - /* - * Print a dot for each object unless we are going to print the entire - * pathname - */ - if (!(AcpiDbgLevel & ACPI_LV_INIT_NAMES)) - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, ".")); - } - - /* - * We ignore errors from above, and always return OK, since we don't want - * to abort the walk on any single error. - */ - AcpiExExitInterpreter (); - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsFindIniMethods - * - * PARAMETERS: ACPI_WALK_CALLBACK - * - * RETURN: ACPI_STATUS - * - * DESCRIPTION: Called during namespace walk. Finds objects named _INI under - * device/processor/thermal objects, and marks the entire subtree - * with a SUBTREE_HAS_INI flag. This flag is used during the - * subsequent device initialization walk to avoid entire subtrees - * that do not contain an _INI. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsFindIniMethods ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue) -{ - ACPI_DEVICE_WALK_INFO *Info = ACPI_CAST_PTR (ACPI_DEVICE_WALK_INFO, Context); - ACPI_NAMESPACE_NODE *Node; - ACPI_NAMESPACE_NODE *ParentNode; - - - /* Keep count of device/processor/thermal objects */ - - Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle); - if ((Node->Type == ACPI_TYPE_DEVICE) || - (Node->Type == ACPI_TYPE_PROCESSOR) || - (Node->Type == ACPI_TYPE_THERMAL)) - { - Info->DeviceCount++; - return (AE_OK); - } - - /* We are only looking for methods named _INI */ - - if (!ACPI_COMPARE_NAME (Node->Name.Ascii, METHOD_NAME__INI)) - { - return (AE_OK); - } - - /* - * The only _INI methods that we care about are those that are - * present under Device, Processor, and Thermal objects. - */ - ParentNode = AcpiNsGetParentNode (Node); - switch (ParentNode->Type) - { - case ACPI_TYPE_DEVICE: - case ACPI_TYPE_PROCESSOR: - case ACPI_TYPE_THERMAL: - - /* Mark parent and bubble up the INI present flag to the root */ - - while (ParentNode) - { - ParentNode->Flags |= ANOBJ_SUBTREE_HAS_INI; - ParentNode = AcpiNsGetParentNode (ParentNode); - } - break; - - default: - break; - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsInitOneDevice - * - * PARAMETERS: ACPI_WALK_CALLBACK - * - * RETURN: ACPI_STATUS - * - * DESCRIPTION: This is called once per device soon after ACPI is enabled - * to initialize each device. It determines if the device is - * present, and if so, calls _INI. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsInitOneDevice ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue) -{ - ACPI_DEVICE_WALK_INFO *WalkInfo = ACPI_CAST_PTR (ACPI_DEVICE_WALK_INFO, Context); - ACPI_EVALUATE_INFO *Info = WalkInfo->EvaluateInfo; - UINT32 Flags; - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *DeviceNode; - - - ACPI_FUNCTION_TRACE (NsInitOneDevice); - - - /* We are interested in Devices, Processors and ThermalZones only */ - - DeviceNode = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle); - if ((DeviceNode->Type != ACPI_TYPE_DEVICE) && - (DeviceNode->Type != ACPI_TYPE_PROCESSOR) && - (DeviceNode->Type != ACPI_TYPE_THERMAL)) - { - return_ACPI_STATUS (AE_OK); - } - - /* - * Because of an earlier namespace analysis, all subtrees that contain an - * _INI method are tagged. - * - * If this device subtree does not contain any _INI methods, we - * can exit now and stop traversing this entire subtree. - */ - if (!(DeviceNode->Flags & ANOBJ_SUBTREE_HAS_INI)) - { - return_ACPI_STATUS (AE_CTRL_DEPTH); - } - - /* - * Run _STA to determine if this device is present and functioning. We - * must know this information for two important reasons (from ACPI spec): - * - * 1) We can only run _INI if the device is present. - * 2) We must abort the device tree walk on this subtree if the device is - * not present and is not functional (we will not examine the children) - * - * The _STA method is not required to be present under the device, we - * assume the device is present if _STA does not exist. - */ - ACPI_DEBUG_EXEC (AcpiUtDisplayInitPathname ( - ACPI_TYPE_METHOD, DeviceNode, METHOD_NAME__STA)); - - Status = AcpiUtExecute_STA (DeviceNode, &Flags); - if (ACPI_FAILURE (Status)) - { - /* Ignore error and move on to next device */ - - return_ACPI_STATUS (AE_OK); - } - - /* - * Flags == -1 means that _STA was not found. In this case, we assume that - * the device is both present and functional. - * - * From the ACPI spec, description of _STA: - * - * "If a device object (including the processor object) does not have an - * _STA object, then OSPM assumes that all of the above bits are set (in - * other words, the device is present, ..., and functioning)" - */ - if (Flags != ACPI_UINT32_MAX) - { - WalkInfo->Num_STA++; - } - - /* - * Examine the PRESENT and FUNCTIONING status bits - * - * Note: ACPI spec does not seem to specify behavior for the present but - * not functioning case, so we assume functioning if present. - */ - if (!(Flags & ACPI_STA_DEVICE_PRESENT)) - { - /* Device is not present, we must examine the Functioning bit */ - - if (Flags & ACPI_STA_DEVICE_FUNCTIONING) - { - /* - * Device is not present but is "functioning". In this case, - * we will not run _INI, but we continue to examine the children - * of this device. - * - * From the ACPI spec, description of _STA: (Note - no mention - * of whether to run _INI or not on the device in question) - * - * "_STA may return bit 0 clear (not present) with bit 3 set - * (device is functional). This case is used to indicate a valid - * device for which no device driver should be loaded (for example, - * a bridge device.) Children of this device may be present and - * valid. OSPM should continue enumeration below a device whose - * _STA returns this bit combination" - */ - return_ACPI_STATUS (AE_OK); - } - else - { - /* - * Device is not present and is not functioning. We must abort the - * walk of this subtree immediately -- don't look at the children - * of such a device. - * - * From the ACPI spec, description of _INI: - * - * "If the _STA method indicates that the device is not present, - * OSPM will not run the _INI and will not examine the children - * of the device for _INI methods" - */ - return_ACPI_STATUS (AE_CTRL_DEPTH); - } - } - - /* - * The device is present or is assumed present if no _STA exists. - * Run the _INI if it exists (not required to exist) - * - * Note: We know there is an _INI within this subtree, but it may not be - * under this particular device, it may be lower in the branch. - */ - ACPI_DEBUG_EXEC (AcpiUtDisplayInitPathname ( - ACPI_TYPE_METHOD, DeviceNode, METHOD_NAME__INI)); - - Info->PrefixNode = DeviceNode; - Info->Pathname = METHOD_NAME__INI; - Info->Parameters = NULL; - Info->Flags = ACPI_IGNORE_RETURN_VALUE; - - Status = AcpiNsEvaluate (Info); - if (ACPI_SUCCESS (Status)) - { - WalkInfo->Num_INI++; - - if ((AcpiDbgLevel <= ACPI_LV_ALL_EXCEPTIONS) && - (!(AcpiDbgLevel & ACPI_LV_INFO))) - { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, ".")); - } - } - -#ifdef ACPI_DEBUG_OUTPUT - else if (Status != AE_NOT_FOUND) - { - /* Ignore error and move on to next device */ - - char *ScopeName = AcpiNsGetExternalPathname (Info->ResolvedNode); - - ACPI_EXCEPTION ((AE_INFO, Status, "during %s._INI execution", - ScopeName)); - ACPI_FREE (ScopeName); - } -#endif - - /* Ignore errors from above */ - - Status = AE_OK; - - /* - * The _INI method has been run if present; call the Global Initialization - * Handler for this device. - */ - if (AcpiGbl_InitHandler) - { - Status = AcpiGbl_InitHandler (DeviceNode, ACPI_INIT_DEVICE_INI); - } - - return_ACPI_STATUS (Status); -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsload.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsload.c deleted file mode 100644 index a9f382471..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsload.c +++ /dev/null @@ -1,428 +0,0 @@ -/****************************************************************************** - * - * Module Name: nsload - namespace loading/expanding/contracting procedures - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __NSLOAD_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "acdispat.h" -#include "actables.h" - - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsload") - -/* Local prototypes */ - -#ifdef ACPI_FUTURE_IMPLEMENTATION -ACPI_STATUS -AcpiNsUnloadNamespace ( - ACPI_HANDLE Handle); - -static ACPI_STATUS -AcpiNsDeleteSubtree ( - ACPI_HANDLE StartHandle); -#endif - - -#ifndef ACPI_NO_METHOD_EXECUTION -/******************************************************************************* - * - * FUNCTION: AcpiNsLoadTable - * - * PARAMETERS: TableIndex - Index for table to be loaded - * Node - Owning NS node - * - * RETURN: Status - * - * DESCRIPTION: Load one ACPI table into the namespace - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsLoadTable ( - UINT32 TableIndex, - ACPI_NAMESPACE_NODE *Node) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (NsLoadTable); - - - /* - * Parse the table and load the namespace with all named - * objects found within. Control methods are NOT parsed - * at this time. In fact, the control methods cannot be - * parsed until the entire namespace is loaded, because - * if a control method makes a forward reference (call) - * to another control method, we can't continue parsing - * because we don't know how many arguments to parse next! - */ - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* If table already loaded into namespace, just return */ - - if (AcpiTbIsTableLoaded (TableIndex)) - { - Status = AE_ALREADY_EXISTS; - goto Unlock; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "**** Loading table into namespace ****\n")); - - Status = AcpiTbAllocateOwnerId (TableIndex); - if (ACPI_FAILURE (Status)) - { - goto Unlock; - } - - Status = AcpiNsParseTable (TableIndex, Node); - if (ACPI_SUCCESS (Status)) - { - AcpiTbSetTableLoadedFlag (TableIndex, TRUE); - } - else - { - (void) AcpiTbReleaseOwnerId (TableIndex); - } - -Unlock: - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Now we can parse the control methods. We always parse - * them here for a sanity check, and if configured for - * just-in-time parsing, we delete the control method - * parse trees. - */ - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "**** Begin Table Method Parsing and Object Initialization\n")); - - Status = AcpiDsInitializeObjects (TableIndex, Node); - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "**** Completed Table Method Parsing and Object Initialization\n")); - - return_ACPI_STATUS (Status); -} - - -#ifdef ACPI_OBSOLETE_FUNCTIONS -/******************************************************************************* - * - * FUNCTION: AcpiLoadNamespace - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Load the name space from what ever is pointed to by DSDT. - * (DSDT points to either the BIOS or a buffer.) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsLoadNamespace ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiLoadNameSpace); - - - /* There must be at least a DSDT installed */ - - if (AcpiGbl_DSDT == NULL) - { - ACPI_ERROR ((AE_INFO, "DSDT is not in memory")); - return_ACPI_STATUS (AE_NO_ACPI_TABLES); - } - - /* - * Load the namespace. The DSDT is required, - * but the SSDT and PSDT tables are optional. - */ - Status = AcpiNsLoadTableByType (ACPI_TABLE_ID_DSDT); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Ignore exceptions from these */ - - (void) AcpiNsLoadTableByType (ACPI_TABLE_ID_SSDT); - (void) AcpiNsLoadTableByType (ACPI_TABLE_ID_PSDT); - - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, - "ACPI Namespace successfully loaded at root %p\n", - AcpiGbl_RootNode)); - - return_ACPI_STATUS (Status); -} -#endif - -#ifdef ACPI_FUTURE_IMPLEMENTATION -/******************************************************************************* - * - * FUNCTION: AcpiNsDeleteSubtree - * - * PARAMETERS: StartHandle - Handle in namespace where search begins - * - * RETURNS Status - * - * DESCRIPTION: Walks the namespace starting at the given handle and deletes - * all objects, entries, and scopes in the entire subtree. - * - * Namespace/Interpreter should be locked or the subsystem should - * be in shutdown before this routine is called. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsDeleteSubtree ( - ACPI_HANDLE StartHandle) -{ - ACPI_STATUS Status; - ACPI_HANDLE ChildHandle; - ACPI_HANDLE ParentHandle; - ACPI_HANDLE NextChildHandle; - ACPI_HANDLE Dummy; - UINT32 Level; - - - ACPI_FUNCTION_TRACE (NsDeleteSubtree); - - - ParentHandle = StartHandle; - ChildHandle = NULL; - Level = 1; - - /* - * Traverse the tree of objects until we bubble back up - * to where we started. - */ - while (Level > 0) - { - /* Attempt to get the next object in this scope */ - - Status = AcpiGetNextObject (ACPI_TYPE_ANY, ParentHandle, - ChildHandle, &NextChildHandle); - - ChildHandle = NextChildHandle; - - /* Did we get a new object? */ - - if (ACPI_SUCCESS (Status)) - { - /* Check if this object has any children */ - - if (ACPI_SUCCESS (AcpiGetNextObject (ACPI_TYPE_ANY, ChildHandle, - NULL, &Dummy))) - { - /* - * There is at least one child of this object, - * visit the object - */ - Level++; - ParentHandle = ChildHandle; - ChildHandle = NULL; - } - } - else - { - /* - * No more children in this object, go back up to - * the object's parent - */ - Level--; - - /* Delete all children now */ - - AcpiNsDeleteChildren (ChildHandle); - - ChildHandle = ParentHandle; - Status = AcpiGetParent (ParentHandle, &ParentHandle); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - } - - /* Now delete the starting object, and we are done */ - - AcpiNsRemoveNode (ChildHandle); - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsUnloadNameSpace - * - * PARAMETERS: Handle - Root of namespace subtree to be deleted - * - * RETURN: Status - * - * DESCRIPTION: Shrinks the namespace, typically in response to an undocking - * event. Deletes an entire subtree starting from (and - * including) the given handle. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsUnloadNamespace ( - ACPI_HANDLE Handle) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (NsUnloadNameSpace); - - - /* Parameter validation */ - - if (!AcpiGbl_RootNode) - { - return_ACPI_STATUS (AE_NO_NAMESPACE); - } - - if (!Handle) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* This function does the real work */ - - Status = AcpiNsDeleteSubtree (Handle); - - return_ACPI_STATUS (Status); -} -#endif -#endif - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsnames.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsnames.c deleted file mode 100644 index c00a4457b..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsnames.c +++ /dev/null @@ -1,375 +0,0 @@ -/******************************************************************************* - * - * Module Name: nsnames - Name manipulation and search - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __NSNAMES_C__ - -#include "acpi.h" -#include "accommon.h" -#include "amlcode.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsnames") - - -/******************************************************************************* - * - * FUNCTION: AcpiNsBuildExternalPath - * - * PARAMETERS: Node - NS node whose pathname is needed - * Size - Size of the pathname - * *NameBuffer - Where to return the pathname - * - * RETURN: Status - * Places the pathname into the NameBuffer, in external format - * (name segments separated by path separators) - * - * DESCRIPTION: Generate a full pathaname - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsBuildExternalPath ( - ACPI_NAMESPACE_NODE *Node, - ACPI_SIZE Size, - char *NameBuffer) -{ - ACPI_SIZE Index; - ACPI_NAMESPACE_NODE *ParentNode; - - - ACPI_FUNCTION_ENTRY (); - - - /* Special case for root */ - - Index = Size - 1; - if (Index < ACPI_NAME_SIZE) - { - NameBuffer[0] = AML_ROOT_PREFIX; - NameBuffer[1] = 0; - return (AE_OK); - } - - /* Store terminator byte, then build name backwards */ - - ParentNode = Node; - NameBuffer[Index] = 0; - - while ((Index > ACPI_NAME_SIZE) && (ParentNode != AcpiGbl_RootNode)) - { - Index -= ACPI_NAME_SIZE; - - /* Put the name into the buffer */ - - ACPI_MOVE_32_TO_32 ((NameBuffer + Index), &ParentNode->Name); - ParentNode = AcpiNsGetParentNode (ParentNode); - - /* Prefix name with the path separator */ - - Index--; - NameBuffer[Index] = ACPI_PATH_SEPARATOR; - } - - /* Overwrite final separator with the root prefix character */ - - NameBuffer[Index] = AML_ROOT_PREFIX; - - if (Index != 0) - { - ACPI_ERROR ((AE_INFO, - "Could not construct external pathname; index=%X, size=%X, Path=%s", - (UINT32) Index, (UINT32) Size, &NameBuffer[Size])); - - return (AE_BAD_PARAMETER); - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsGetExternalPathname - * - * PARAMETERS: Node - Namespace node whose pathname is needed - * - * RETURN: Pointer to storage containing the fully qualified name of - * the node, In external format (name segments separated by path - * separators.) - * - * DESCRIPTION: Used to obtain the full pathname to a namespace node, usually - * for error and debug statements. - * - ******************************************************************************/ - -char * -AcpiNsGetExternalPathname ( - ACPI_NAMESPACE_NODE *Node) -{ - ACPI_STATUS Status; - char *NameBuffer; - ACPI_SIZE Size; - - - ACPI_FUNCTION_TRACE_PTR (NsGetExternalPathname, Node); - - - /* Calculate required buffer size based on depth below root */ - - Size = AcpiNsGetPathnameLength (Node); - if (!Size) - { - return_PTR (NULL); - } - - /* Allocate a buffer to be returned to caller */ - - NameBuffer = ACPI_ALLOCATE_ZEROED (Size); - if (!NameBuffer) - { - ACPI_ERROR ((AE_INFO, "Could not allocate %u bytes", (UINT32) Size)); - return_PTR (NULL); - } - - /* Build the path in the allocated buffer */ - - Status = AcpiNsBuildExternalPath (Node, Size, NameBuffer); - if (ACPI_FAILURE (Status)) - { - ACPI_FREE (NameBuffer); - return_PTR (NULL); - } - - return_PTR (NameBuffer); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsGetPathnameLength - * - * PARAMETERS: Node - Namespace node - * - * RETURN: Length of path, including prefix - * - * DESCRIPTION: Get the length of the pathname string for this node - * - ******************************************************************************/ - -ACPI_SIZE -AcpiNsGetPathnameLength ( - ACPI_NAMESPACE_NODE *Node) -{ - ACPI_SIZE Size; - ACPI_NAMESPACE_NODE *NextNode; - - - ACPI_FUNCTION_ENTRY (); - - - /* - * Compute length of pathname as 5 * number of name segments. - * Go back up the parent tree to the root - */ - Size = 0; - NextNode = Node; - - while (NextNode && (NextNode != AcpiGbl_RootNode)) - { - if (ACPI_GET_DESCRIPTOR_TYPE (NextNode) != ACPI_DESC_TYPE_NAMED) - { - ACPI_ERROR ((AE_INFO, - "Invalid Namespace Node (%p) while traversing namespace", - NextNode)); - return 0; - } - Size += ACPI_PATH_SEGMENT_LENGTH; - NextNode = AcpiNsGetParentNode (NextNode); - } - - if (!Size) - { - Size = 1; /* Root node case */ - } - - return (Size + 1); /* +1 for null string terminator */ -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsHandleToPathname - * - * PARAMETERS: TargetHandle - Handle of named object whose name is - * to be found - * Buffer - Where the pathname is returned - * - * RETURN: Status, Buffer is filled with pathname if status is AE_OK - * - * DESCRIPTION: Build and return a full namespace pathname - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsHandleToPathname ( - ACPI_HANDLE TargetHandle, - ACPI_BUFFER *Buffer) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - ACPI_SIZE RequiredSize; - - - ACPI_FUNCTION_TRACE_PTR (NsHandleToPathname, TargetHandle); - - - Node = AcpiNsValidateHandle (TargetHandle); - if (!Node) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Determine size required for the caller buffer */ - - RequiredSize = AcpiNsGetPathnameLength (Node); - if (!RequiredSize) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Validate/Allocate/Clear caller buffer */ - - Status = AcpiUtInitializeBuffer (Buffer, RequiredSize); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Build the path in the caller buffer */ - - Status = AcpiNsBuildExternalPath (Node, RequiredSize, Buffer->Pointer); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%s [%X]\n", - (char *) Buffer->Pointer, (UINT32) RequiredSize)); - return_ACPI_STATUS (AE_OK); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsobject.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsobject.c deleted file mode 100644 index c0163f4ea..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsobject.c +++ /dev/null @@ -1,577 +0,0 @@ -/******************************************************************************* - * - * Module Name: nsobject - Utilities for objects attached to namespace - * table entries - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __NSOBJECT_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsobject") - - -/******************************************************************************* - * - * FUNCTION: AcpiNsAttachObject - * - * PARAMETERS: Node - Parent Node - * Object - Object to be attached - * Type - Type of object, or ACPI_TYPE_ANY if not - * known - * - * RETURN: Status - * - * DESCRIPTION: Record the given object as the value associated with the - * name whose ACPI_HANDLE is passed. If Object is NULL - * and Type is ACPI_TYPE_ANY, set the name as having no value. - * Note: Future may require that the Node->Flags field be passed - * as a parameter. - * - * MUTEX: Assumes namespace is locked - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsAttachObject ( - ACPI_NAMESPACE_NODE *Node, - ACPI_OPERAND_OBJECT *Object, - ACPI_OBJECT_TYPE Type) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT *LastObjDesc; - ACPI_OBJECT_TYPE ObjectType = ACPI_TYPE_ANY; - - - ACPI_FUNCTION_TRACE (NsAttachObject); - - - /* - * Parameter validation - */ - if (!Node) - { - /* Invalid handle */ - - ACPI_ERROR ((AE_INFO, "Null NamedObj handle")); - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - if (!Object && (ACPI_TYPE_ANY != Type)) - { - /* Null object */ - - ACPI_ERROR ((AE_INFO, - "Null object, but type not ACPI_TYPE_ANY")); - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED) - { - /* Not a name handle */ - - ACPI_ERROR ((AE_INFO, "Invalid handle %p [%s]", - Node, AcpiUtGetDescriptorName (Node))); - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Check if this object is already attached */ - - if (Node->Object == Object) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Obj %p already installed in NameObj %p\n", - Object, Node)); - - return_ACPI_STATUS (AE_OK); - } - - /* If null object, we will just install it */ - - if (!Object) - { - ObjDesc = NULL; - ObjectType = ACPI_TYPE_ANY; - } - - /* - * If the source object is a namespace Node with an attached object, - * we will use that (attached) object - */ - else if ((ACPI_GET_DESCRIPTOR_TYPE (Object) == ACPI_DESC_TYPE_NAMED) && - ((ACPI_NAMESPACE_NODE *) Object)->Object) - { - /* - * Value passed is a name handle and that name has a - * non-null value. Use that name's value and type. - */ - ObjDesc = ((ACPI_NAMESPACE_NODE *) Object)->Object; - ObjectType = ((ACPI_NAMESPACE_NODE *) Object)->Type; - } - - /* - * Otherwise, we will use the parameter object, but we must type - * it first - */ - else - { - ObjDesc = (ACPI_OPERAND_OBJECT *) Object; - - /* Use the given type */ - - ObjectType = Type; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Installing %p into Node %p [%4.4s]\n", - ObjDesc, Node, AcpiUtGetNodeName (Node))); - - /* Detach an existing attached object if present */ - - if (Node->Object) - { - AcpiNsDetachObject (Node); - } - - if (ObjDesc) - { - /* - * Must increment the new value's reference count - * (if it is an internal object) - */ - AcpiUtAddReference (ObjDesc); - - /* - * Handle objects with multiple descriptors - walk - * to the end of the descriptor list - */ - LastObjDesc = ObjDesc; - while (LastObjDesc->Common.NextObject) - { - LastObjDesc = LastObjDesc->Common.NextObject; - } - - /* Install the object at the front of the object list */ - - LastObjDesc->Common.NextObject = Node->Object; - } - - Node->Type = (UINT8) ObjectType; - Node->Object = ObjDesc; - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsDetachObject - * - * PARAMETERS: Node - A Namespace node whose object will be detached - * - * RETURN: None. - * - * DESCRIPTION: Detach/delete an object associated with a namespace node. - * if the object is an allocated object, it is freed. - * Otherwise, the field is simply cleared. - * - ******************************************************************************/ - -void -AcpiNsDetachObject ( - ACPI_NAMESPACE_NODE *Node) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - - - ACPI_FUNCTION_TRACE (NsDetachObject); - - - ObjDesc = Node->Object; - - if (!ObjDesc || - (ObjDesc->Common.Type == ACPI_TYPE_LOCAL_DATA)) - { - return_VOID; - } - - if (Node->Flags & ANOBJ_ALLOCATED_BUFFER) - { - /* Free the dynamic aml buffer */ - - if (ObjDesc->Common.Type == ACPI_TYPE_METHOD) - { - ACPI_FREE (ObjDesc->Method.AmlStart); - } - } - - /* Clear the entry in all cases */ - - Node->Object = NULL; - if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND) - { - Node->Object = ObjDesc->Common.NextObject; - if (Node->Object && - ((Node->Object)->Common.Type != ACPI_TYPE_LOCAL_DATA)) - { - Node->Object = Node->Object->Common.NextObject; - } - } - - /* Reset the node type to untyped */ - - Node->Type = ACPI_TYPE_ANY; - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Node %p [%4.4s] Object %p\n", - Node, AcpiUtGetNodeName (Node), ObjDesc)); - - /* Remove one reference on the object (and all subobjects) */ - - AcpiUtRemoveReference (ObjDesc); - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsGetAttachedObject - * - * PARAMETERS: Node - Namespace node - * - * RETURN: Current value of the object field from the Node whose - * handle is passed - * - * DESCRIPTION: Obtain the object attached to a namespace node. - * - ******************************************************************************/ - -ACPI_OPERAND_OBJECT * -AcpiNsGetAttachedObject ( - ACPI_NAMESPACE_NODE *Node) -{ - ACPI_FUNCTION_TRACE_PTR (NsGetAttachedObject, Node); - - - if (!Node) - { - ACPI_WARNING ((AE_INFO, "Null Node ptr")); - return_PTR (NULL); - } - - if (!Node->Object || - ((ACPI_GET_DESCRIPTOR_TYPE (Node->Object) != ACPI_DESC_TYPE_OPERAND) && - (ACPI_GET_DESCRIPTOR_TYPE (Node->Object) != ACPI_DESC_TYPE_NAMED)) || - ((Node->Object)->Common.Type == ACPI_TYPE_LOCAL_DATA)) - { - return_PTR (NULL); - } - - return_PTR (Node->Object); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsGetSecondaryObject - * - * PARAMETERS: Node - Namespace node - * - * RETURN: Current value of the object field from the Node whose - * handle is passed. - * - * DESCRIPTION: Obtain a secondary object associated with a namespace node. - * - ******************************************************************************/ - -ACPI_OPERAND_OBJECT * -AcpiNsGetSecondaryObject ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_FUNCTION_TRACE_PTR (NsGetSecondaryObject, ObjDesc); - - - if ((!ObjDesc) || - (ObjDesc->Common.Type== ACPI_TYPE_LOCAL_DATA) || - (!ObjDesc->Common.NextObject) || - ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA)) - { - return_PTR (NULL); - } - - return_PTR (ObjDesc->Common.NextObject); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsAttachData - * - * PARAMETERS: Node - Namespace node - * Handler - Handler to be associated with the data - * Data - Data to be attached - * - * RETURN: Status - * - * DESCRIPTION: Low-level attach data. Create and attach a Data object. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsAttachData ( - ACPI_NAMESPACE_NODE *Node, - ACPI_OBJECT_HANDLER Handler, - void *Data) -{ - ACPI_OPERAND_OBJECT *PrevObjDesc; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT *DataDesc; - - - /* We only allow one attachment per handler */ - - PrevObjDesc = NULL; - ObjDesc = Node->Object; - while (ObjDesc) - { - if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_DATA) && - (ObjDesc->Data.Handler == Handler)) - { - return (AE_ALREADY_EXISTS); - } - - PrevObjDesc = ObjDesc; - ObjDesc = ObjDesc->Common.NextObject; - } - - /* Create an internal object for the data */ - - DataDesc = AcpiUtCreateInternalObject (ACPI_TYPE_LOCAL_DATA); - if (!DataDesc) - { - return (AE_NO_MEMORY); - } - - DataDesc->Data.Handler = Handler; - DataDesc->Data.Pointer = Data; - - /* Install the data object */ - - if (PrevObjDesc) - { - PrevObjDesc->Common.NextObject = DataDesc; - } - else - { - Node->Object = DataDesc; - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsDetachData - * - * PARAMETERS: Node - Namespace node - * Handler - Handler associated with the data - * - * RETURN: Status - * - * DESCRIPTION: Low-level detach data. Delete the data node, but the caller - * is responsible for the actual data. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsDetachData ( - ACPI_NAMESPACE_NODE *Node, - ACPI_OBJECT_HANDLER Handler) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_OPERAND_OBJECT *PrevObjDesc; - - - PrevObjDesc = NULL; - ObjDesc = Node->Object; - while (ObjDesc) - { - if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_DATA) && - (ObjDesc->Data.Handler == Handler)) - { - if (PrevObjDesc) - { - PrevObjDesc->Common.NextObject = ObjDesc->Common.NextObject; - } - else - { - Node->Object = ObjDesc->Common.NextObject; - } - - AcpiUtRemoveReference (ObjDesc); - return (AE_OK); - } - - PrevObjDesc = ObjDesc; - ObjDesc = ObjDesc->Common.NextObject; - } - - return (AE_NOT_FOUND); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsGetAttachedData - * - * PARAMETERS: Node - Namespace node - * Handler - Handler associated with the data - * Data - Where the data is returned - * - * RETURN: Status - * - * DESCRIPTION: Low level interface to obtain data previously associated with - * a namespace node. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsGetAttachedData ( - ACPI_NAMESPACE_NODE *Node, - ACPI_OBJECT_HANDLER Handler, - void **Data) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - - - ObjDesc = Node->Object; - while (ObjDesc) - { - if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_DATA) && - (ObjDesc->Data.Handler == Handler)) - { - *Data = ObjDesc->Data.Pointer; - return (AE_OK); - } - - ObjDesc = ObjDesc->Common.NextObject; - } - - return (AE_NOT_FOUND); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsparse.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsparse.c deleted file mode 100644 index 58301560a..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsparse.c +++ /dev/null @@ -1,297 +0,0 @@ -/****************************************************************************** - * - * Module Name: nsparse - namespace interface to AML parser - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __NSPARSE_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "acparser.h" -#include "acdispat.h" -#include "actables.h" - - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsparse") - - -/******************************************************************************* - * - * FUNCTION: NsOneCompleteParse - * - * PARAMETERS: PassNumber - 1 or 2 - * TableDesc - The table to be parsed. - * - * RETURN: Status - * - * DESCRIPTION: Perform one complete parse of an ACPI/AML table. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsOneCompleteParse ( - UINT32 PassNumber, - UINT32 TableIndex, - ACPI_NAMESPACE_NODE *StartNode) -{ - ACPI_PARSE_OBJECT *ParseRoot; - ACPI_STATUS Status; - UINT32 AmlLength; - UINT8 *AmlStart; - ACPI_WALK_STATE *WalkState; - ACPI_TABLE_HEADER *Table; - ACPI_OWNER_ID OwnerId; - - - ACPI_FUNCTION_TRACE (NsOneCompleteParse); - - - Status = AcpiTbGetOwnerId (TableIndex, &OwnerId); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Create and init a Root Node */ - - ParseRoot = AcpiPsCreateScopeOp (); - if (!ParseRoot) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Create and initialize a new walk state */ - - WalkState = AcpiDsCreateWalkState (OwnerId, NULL, NULL, NULL); - if (!WalkState) - { - AcpiPsFreeOp (ParseRoot); - return_ACPI_STATUS (AE_NO_MEMORY); - } - - Status = AcpiGetTableByIndex (TableIndex, &Table); - if (ACPI_FAILURE (Status)) - { - AcpiDsDeleteWalkState (WalkState); - AcpiPsFreeOp (ParseRoot); - return_ACPI_STATUS (Status); - } - - /* Table must consist of at least a complete header */ - - if (Table->Length < sizeof (ACPI_TABLE_HEADER)) - { - Status = AE_BAD_HEADER; - } - else - { - AmlStart = (UINT8 *) Table + sizeof (ACPI_TABLE_HEADER); - AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER); - Status = AcpiDsInitAmlWalk (WalkState, ParseRoot, NULL, - AmlStart, AmlLength, NULL, (UINT8) PassNumber); - } - - if (ACPI_FAILURE (Status)) - { - AcpiDsDeleteWalkState (WalkState); - goto Cleanup; - } - - /* StartNode is the default location to load the table */ - - if (StartNode && StartNode != AcpiGbl_RootNode) - { - Status = AcpiDsScopeStackPush (StartNode, ACPI_TYPE_METHOD, WalkState); - if (ACPI_FAILURE (Status)) - { - AcpiDsDeleteWalkState (WalkState); - goto Cleanup; - } - } - - /* Parse the AML */ - - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "*PARSE* pass %d parse\n", PassNumber)); - Status = AcpiPsParseAml (WalkState); - -Cleanup: - AcpiPsDeleteParseTree (ParseRoot); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsParseTable - * - * PARAMETERS: TableDesc - An ACPI table descriptor for table to parse - * StartNode - Where to enter the table into the namespace - * - * RETURN: Status - * - * DESCRIPTION: Parse AML within an ACPI table and return a tree of ops - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsParseTable ( - UINT32 TableIndex, - ACPI_NAMESPACE_NODE *StartNode) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (NsParseTable); - - - /* - * AML Parse, pass 1 - * - * In this pass, we load most of the namespace. Control methods - * are not parsed until later. A parse tree is not created. Instead, - * each Parser Op subtree is deleted when it is finished. This saves - * a great deal of memory, and allows a small cache of parse objects - * to service the entire parse. The second pass of the parse then - * performs another complete parse of the AML. - */ - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** Start pass 1\n")); - Status = AcpiNsOneCompleteParse (ACPI_IMODE_LOAD_PASS1, - TableIndex, StartNode); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * AML Parse, pass 2 - * - * In this pass, we resolve forward references and other things - * that could not be completed during the first pass. - * Another complete parse of the AML is performed, but the - * overhead of this is compensated for by the fact that the - * parse objects are all cached. - */ - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** Start pass 2\n")); - Status = AcpiNsOneCompleteParse (ACPI_IMODE_LOAD_PASS2, - TableIndex, StartNode); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nspredef.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nspredef.c deleted file mode 100644 index d979c43e9..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nspredef.c +++ /dev/null @@ -1,1263 +0,0 @@ -/****************************************************************************** - * - * Module Name: nspredef - Validation of ACPI predefined methods and objects - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define ACPI_CREATE_PREDEFINED_TABLE - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "acpredef.h" - - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nspredef") - - -/******************************************************************************* - * - * This module validates predefined ACPI objects that appear in the namespace, - * at the time they are evaluated (via AcpiEvaluateObject). The purpose of this - * validation is to detect problems with BIOS-exposed predefined ACPI objects - * before the results are returned to the ACPI-related drivers. - * - * There are several areas that are validated: - * - * 1) The number of input arguments as defined by the method/object in the - * ASL is validated against the ACPI specification. - * 2) The type of the return object (if any) is validated against the ACPI - * specification. - * 3) For returned package objects, the count of package elements is - * validated, as well as the type of each package element. Nested - * packages are supported. - * - * For any problems found, a warning message is issued. - * - ******************************************************************************/ - - -/* Local prototypes */ - -static ACPI_STATUS -AcpiNsCheckPackage ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **ReturnObjectPtr); - -static ACPI_STATUS -AcpiNsCheckPackageList ( - ACPI_PREDEFINED_DATA *Data, - const ACPI_PREDEFINED_INFO *Package, - ACPI_OPERAND_OBJECT **Elements, - UINT32 Count); - -static ACPI_STATUS -AcpiNsCheckPackageElements ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **Elements, - UINT8 Type1, - UINT32 Count1, - UINT8 Type2, - UINT32 Count2, - UINT32 StartIndex); - -static ACPI_STATUS -AcpiNsCheckObjectType ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **ReturnObjectPtr, - UINT32 ExpectedBtypes, - UINT32 PackageIndex); - -static ACPI_STATUS -AcpiNsCheckReference ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT *ReturnObject); - -static void -AcpiNsGetExpectedTypes ( - char *Buffer, - UINT32 ExpectedBtypes); - -/* - * Names for the types that can be returned by the predefined objects. - * Used for warning messages. Must be in the same order as the ACPI_RTYPEs - */ -static const char *AcpiRtypeNames[] = -{ - "/Integer", - "/String", - "/Buffer", - "/Package", - "/Reference", -}; - - -/******************************************************************************* - * - * FUNCTION: AcpiNsCheckPredefinedNames - * - * PARAMETERS: Node - Namespace node for the method/object - * UserParamCount - Number of parameters actually passed - * ReturnStatus - Status from the object evaluation - * ReturnObjectPtr - Pointer to the object returned from the - * evaluation of a method or object - * - * RETURN: Status - * - * DESCRIPTION: Check an ACPI name for a match in the predefined name list. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsCheckPredefinedNames ( - ACPI_NAMESPACE_NODE *Node, - UINT32 UserParamCount, - ACPI_STATUS ReturnStatus, - ACPI_OPERAND_OBJECT **ReturnObjectPtr) -{ - ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; - ACPI_STATUS Status = AE_OK; - const ACPI_PREDEFINED_INFO *Predefined; - char *Pathname; - ACPI_PREDEFINED_DATA *Data; - - - /* Match the name for this method/object against the predefined list */ - - Predefined = AcpiNsCheckForPredefinedName (Node); - - /* Get the full pathname to the object, for use in warning messages */ - - Pathname = AcpiNsGetExternalPathname (Node); - if (!Pathname) - { - return (AE_OK); /* Could not get pathname, ignore */ - } - - /* - * Check that the parameter count for this method matches the ASL - * definition. For predefined names, ensure that both the caller and - * the method itself are in accordance with the ACPI specification. - */ - AcpiNsCheckParameterCount (Pathname, Node, UserParamCount, Predefined); - - /* If not a predefined name, we cannot validate the return object */ - - if (!Predefined) - { - goto Cleanup; - } - - /* - * If the method failed or did not actually return an object, we cannot - * validate the return object - */ - if ((ReturnStatus != AE_OK) && (ReturnStatus != AE_CTRL_RETURN_VALUE)) - { - goto Cleanup; - } - - /* - * If there is no return value, check if we require a return value for - * this predefined name. Either one return value is expected, or none, - * for both methods and other objects. - * - * Exit now if there is no return object. Warning if one was expected. - */ - if (!ReturnObject) - { - if ((Predefined->Info.ExpectedBtypes) && - (!(Predefined->Info.ExpectedBtypes & ACPI_RTYPE_NONE))) - { - ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, - "Missing expected return value")); - - Status = AE_AML_NO_RETURN_VALUE; - } - goto Cleanup; - } - - /* - * 1) We have a return value, but if one wasn't expected, just exit, this is - * not a problem. For example, if the "Implicit Return" feature is - * enabled, methods will always return a value. - * - * 2) If the return value can be of any type, then we cannot perform any - * validation, exit. - */ - if ((!Predefined->Info.ExpectedBtypes) || - (Predefined->Info.ExpectedBtypes == ACPI_RTYPE_ALL)) - { - goto Cleanup; - } - - /* Create the parameter data block for object validation */ - - Data = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PREDEFINED_DATA)); - if (!Data) - { - goto Cleanup; - } - Data->Predefined = Predefined; - Data->NodeFlags = Node->Flags; - Data->Pathname = Pathname; - - /* - * Check that the type of the main return object is what is expected - * for this predefined name - */ - Status = AcpiNsCheckObjectType (Data, ReturnObjectPtr, - Predefined->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT); - if (ACPI_FAILURE (Status)) - { - goto Exit; - } - - /* - * For returned Package objects, check the type of all sub-objects. - * Note: Package may have been newly created by call above. - */ - if ((*ReturnObjectPtr)->Common.Type == ACPI_TYPE_PACKAGE) - { - Status = AcpiNsCheckPackage (Data, ReturnObjectPtr); - if (ACPI_FAILURE (Status)) - { - goto Exit; - } - } - - /* - * The return object was OK, or it was successfully repaired above. - * Now make some additional checks such as verifying that package - * objects are sorted correctly (if required) or buffer objects have - * the correct data width (bytes vs. dwords). These repairs are - * performed on a per-name basis, i.e., the code is specific to - * particular predefined names. - */ - Status = AcpiNsComplexRepairs (Data, Node, Status, ReturnObjectPtr); - -Exit: - /* - * If the object validation failed or if we successfully repaired one - * or more objects, mark the parent node to suppress further warning - * messages during the next evaluation of the same method/object. - */ - if (ACPI_FAILURE (Status) || (Data->Flags & ACPI_OBJECT_REPAIRED)) - { - Node->Flags |= ANOBJ_EVALUATED; - } - ACPI_FREE (Data); - -Cleanup: - ACPI_FREE (Pathname); - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsCheckParameterCount - * - * PARAMETERS: Pathname - Full pathname to the node (for error msgs) - * Node - Namespace node for the method/object - * UserParamCount - Number of args passed in by the caller - * Predefined - Pointer to entry in predefined name table - * - * RETURN: None - * - * DESCRIPTION: Check that the declared (in ASL/AML) parameter count for a - * predefined name is what is expected (i.e., what is defined in - * the ACPI specification for this predefined name.) - * - ******************************************************************************/ - -void -AcpiNsCheckParameterCount ( - char *Pathname, - ACPI_NAMESPACE_NODE *Node, - UINT32 UserParamCount, - const ACPI_PREDEFINED_INFO *Predefined) -{ - UINT32 ParamCount; - UINT32 RequiredParamsCurrent; - UINT32 RequiredParamsOld; - - - /* Methods have 0-7 parameters. All other types have zero. */ - - ParamCount = 0; - if (Node->Type == ACPI_TYPE_METHOD) - { - ParamCount = Node->Object->Method.ParamCount; - } - - if (!Predefined) - { - /* - * Check the parameter count for non-predefined methods/objects. - * - * Warning if too few or too many arguments have been passed by the - * caller. An incorrect number of arguments may not cause the method - * to fail. However, the method will fail if there are too few - * arguments and the method attempts to use one of the missing ones. - */ - if (UserParamCount < ParamCount) - { - ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, - "Insufficient arguments - needs %u, found %u", - ParamCount, UserParamCount)); - } - else if (UserParamCount > ParamCount) - { - ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, - "Excess arguments - needs %u, found %u", - ParamCount, UserParamCount)); - } - return; - } - - /* - * Validate the user-supplied parameter count. - * Allow two different legal argument counts (_SCP, etc.) - */ - RequiredParamsCurrent = Predefined->Info.ParamCount & 0x0F; - RequiredParamsOld = Predefined->Info.ParamCount >> 4; - - if (UserParamCount != ACPI_UINT32_MAX) - { - if ((UserParamCount != RequiredParamsCurrent) && - (UserParamCount != RequiredParamsOld)) - { - ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, - "Parameter count mismatch - " - "caller passed %u, ACPI requires %u", - UserParamCount, RequiredParamsCurrent)); - } - } - - /* - * Check that the ASL-defined parameter count is what is expected for - * this predefined name (parameter count as defined by the ACPI - * specification) - */ - if ((ParamCount != RequiredParamsCurrent) && - (ParamCount != RequiredParamsOld)) - { - ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, Node->Flags, - "Parameter count mismatch - ASL declared %u, ACPI requires %u", - ParamCount, RequiredParamsCurrent)); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsCheckForPredefinedName - * - * PARAMETERS: Node - Namespace node for the method/object - * - * RETURN: Pointer to entry in predefined table. NULL indicates not found. - * - * DESCRIPTION: Check an object name against the predefined object list. - * - ******************************************************************************/ - -const ACPI_PREDEFINED_INFO * -AcpiNsCheckForPredefinedName ( - ACPI_NAMESPACE_NODE *Node) -{ - const ACPI_PREDEFINED_INFO *ThisName; - - - /* Quick check for a predefined name, first character must be underscore */ - - if (Node->Name.Ascii[0] != '_') - { - return (NULL); - } - - /* Search info table for a predefined method/object name */ - - ThisName = PredefinedNames; - while (ThisName->Info.Name[0]) - { - if (ACPI_COMPARE_NAME (Node->Name.Ascii, ThisName->Info.Name)) - { - return (ThisName); - } - - /* - * Skip next entry in the table if this name returns a Package - * (next entry contains the package info) - */ - if (ThisName->Info.ExpectedBtypes & ACPI_RTYPE_PACKAGE) - { - ThisName++; - } - - ThisName++; - } - - return (NULL); /* Not found */ -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsCheckPackage - * - * PARAMETERS: Data - Pointer to validation data structure - * ReturnObjectPtr - Pointer to the object returned from the - * evaluation of a method or object - * - * RETURN: Status - * - * DESCRIPTION: Check a returned package object for the correct count and - * correct type of all sub-objects. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsCheckPackage ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **ReturnObjectPtr) -{ - ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; - const ACPI_PREDEFINED_INFO *Package; - ACPI_OPERAND_OBJECT **Elements; - ACPI_STATUS Status = AE_OK; - UINT32 ExpectedCount; - UINT32 Count; - UINT32 i; - - - ACPI_FUNCTION_NAME (NsCheckPackage); - - - /* The package info for this name is in the next table entry */ - - Package = Data->Predefined + 1; - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "%s Validating return Package of Type %X, Count %X\n", - Data->Pathname, Package->RetInfo.Type, ReturnObject->Package.Count)); - - /* - * For variable-length Packages, we can safely remove all embedded - * and trailing NULL package elements - */ - AcpiNsRemoveNullElements (Data, Package->RetInfo.Type, ReturnObject); - - /* Extract package count and elements array */ - - Elements = ReturnObject->Package.Elements; - Count = ReturnObject->Package.Count; - - /* The package must have at least one element, else invalid */ - - if (!Count) - { - ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, - "Return Package has no elements (empty)")); - - return (AE_AML_OPERAND_VALUE); - } - - /* - * Decode the type of the expected package contents - * - * PTYPE1 packages contain no subpackages - * PTYPE2 packages contain sub-packages - */ - switch (Package->RetInfo.Type) - { - case ACPI_PTYPE1_FIXED: - - /* - * The package count is fixed and there are no sub-packages - * - * If package is too small, exit. - * If package is larger than expected, issue warning but continue - */ - ExpectedCount = Package->RetInfo.Count1 + Package->RetInfo.Count2; - if (Count < ExpectedCount) - { - goto PackageTooSmall; - } - else if (Count > ExpectedCount) - { - ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, - "%s: Return Package is larger than needed - " - "found %u, expected %u\n", - Data->Pathname, Count, ExpectedCount)); - } - - /* Validate all elements of the returned package */ - - Status = AcpiNsCheckPackageElements (Data, Elements, - Package->RetInfo.ObjectType1, Package->RetInfo.Count1, - Package->RetInfo.ObjectType2, Package->RetInfo.Count2, 0); - break; - - - case ACPI_PTYPE1_VAR: - - /* - * The package count is variable, there are no sub-packages, and all - * elements must be of the same type - */ - for (i = 0; i < Count; i++) - { - Status = AcpiNsCheckObjectType (Data, Elements, - Package->RetInfo.ObjectType1, i); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - Elements++; - } - break; - - - case ACPI_PTYPE1_OPTION: - - /* - * The package count is variable, there are no sub-packages. There are - * a fixed number of required elements, and a variable number of - * optional elements. - * - * Check if package is at least as large as the minimum required - */ - ExpectedCount = Package->RetInfo3.Count; - if (Count < ExpectedCount) - { - goto PackageTooSmall; - } - - /* Variable number of sub-objects */ - - for (i = 0; i < Count; i++) - { - if (i < Package->RetInfo3.Count) - { - /* These are the required package elements (0, 1, or 2) */ - - Status = AcpiNsCheckObjectType (Data, Elements, - Package->RetInfo3.ObjectType[i], i); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - else - { - /* These are the optional package elements */ - - Status = AcpiNsCheckObjectType (Data, Elements, - Package->RetInfo3.TailObjectType, i); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - Elements++; - } - break; - - - case ACPI_PTYPE2_REV_FIXED: - - /* First element is the (Integer) revision */ - - Status = AcpiNsCheckObjectType (Data, Elements, - ACPI_RTYPE_INTEGER, 0); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Elements++; - Count--; - - /* Examine the sub-packages */ - - Status = AcpiNsCheckPackageList (Data, Package, Elements, Count); - break; - - - case ACPI_PTYPE2_PKG_COUNT: - - /* First element is the (Integer) count of sub-packages to follow */ - - Status = AcpiNsCheckObjectType (Data, Elements, - ACPI_RTYPE_INTEGER, 0); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* - * Count cannot be larger than the parent package length, but allow it - * to be smaller. The >= accounts for the Integer above. - */ - ExpectedCount = (UINT32) (*Elements)->Integer.Value; - if (ExpectedCount >= Count) - { - goto PackageTooSmall; - } - - Count = ExpectedCount; - Elements++; - - /* Examine the sub-packages */ - - Status = AcpiNsCheckPackageList (Data, Package, Elements, Count); - break; - - - case ACPI_PTYPE2: - case ACPI_PTYPE2_FIXED: - case ACPI_PTYPE2_MIN: - case ACPI_PTYPE2_COUNT: - - /* - * These types all return a single Package that consists of a - * variable number of sub-Packages. - * - * First, ensure that the first element is a sub-Package. If not, - * the BIOS may have incorrectly returned the object as a single - * package instead of a Package of Packages (a common error if - * there is only one entry). We may be able to repair this by - * wrapping the returned Package with a new outer Package. - */ - if (*Elements && ((*Elements)->Common.Type != ACPI_TYPE_PACKAGE)) - { - /* Create the new outer package and populate it */ - - Status = AcpiNsRepairPackageList (Data, ReturnObjectPtr); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Update locals to point to the new package (of 1 element) */ - - ReturnObject = *ReturnObjectPtr; - Elements = ReturnObject->Package.Elements; - Count = 1; - } - - /* Examine the sub-packages */ - - Status = AcpiNsCheckPackageList (Data, Package, Elements, Count); - break; - - - default: - - /* Should not get here if predefined info table is correct */ - - ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, - "Invalid internal return type in table entry: %X", - Package->RetInfo.Type)); - - return (AE_AML_INTERNAL); - } - - return (Status); - - -PackageTooSmall: - - /* Error exit for the case with an incorrect package count */ - - ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, - "Return Package is too small - found %u elements, expected %u", - Count, ExpectedCount)); - - return (AE_AML_OPERAND_VALUE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsCheckPackageList - * - * PARAMETERS: Data - Pointer to validation data structure - * Package - Pointer to package-specific info for method - * Elements - Element list of parent package. All elements - * of this list should be of type Package. - * Count - Count of subpackages - * - * RETURN: Status - * - * DESCRIPTION: Examine a list of subpackages - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsCheckPackageList ( - ACPI_PREDEFINED_DATA *Data, - const ACPI_PREDEFINED_INFO *Package, - ACPI_OPERAND_OBJECT **Elements, - UINT32 Count) -{ - ACPI_OPERAND_OBJECT *SubPackage; - ACPI_OPERAND_OBJECT **SubElements; - ACPI_STATUS Status; - UINT32 ExpectedCount; - UINT32 i; - UINT32 j; - - - /* - * Validate each sub-Package in the parent Package - * - * NOTE: assumes list of sub-packages contains no NULL elements. - * Any NULL elements should have been removed by earlier call - * to AcpiNsRemoveNullElements. - */ - for (i = 0; i < Count; i++) - { - SubPackage = *Elements; - SubElements = SubPackage->Package.Elements; - - /* Each sub-object must be of type Package */ - - Status = AcpiNsCheckObjectType (Data, &SubPackage, - ACPI_RTYPE_PACKAGE, i); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Examine the different types of expected sub-packages */ - - switch (Package->RetInfo.Type) - { - case ACPI_PTYPE2: - case ACPI_PTYPE2_PKG_COUNT: - case ACPI_PTYPE2_REV_FIXED: - - /* Each subpackage has a fixed number of elements */ - - ExpectedCount = Package->RetInfo.Count1 + Package->RetInfo.Count2; - if (SubPackage->Package.Count < ExpectedCount) - { - goto PackageTooSmall; - } - - Status = AcpiNsCheckPackageElements (Data, SubElements, - Package->RetInfo.ObjectType1, - Package->RetInfo.Count1, - Package->RetInfo.ObjectType2, - Package->RetInfo.Count2, 0); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - break; - - - case ACPI_PTYPE2_FIXED: - - /* Each sub-package has a fixed length */ - - ExpectedCount = Package->RetInfo2.Count; - if (SubPackage->Package.Count < ExpectedCount) - { - goto PackageTooSmall; - } - - /* Check the type of each sub-package element */ - - for (j = 0; j < ExpectedCount; j++) - { - Status = AcpiNsCheckObjectType (Data, &SubElements[j], - Package->RetInfo2.ObjectType[j], j); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - break; - - - case ACPI_PTYPE2_MIN: - - /* Each sub-package has a variable but minimum length */ - - ExpectedCount = Package->RetInfo.Count1; - if (SubPackage->Package.Count < ExpectedCount) - { - goto PackageTooSmall; - } - - /* Check the type of each sub-package element */ - - Status = AcpiNsCheckPackageElements (Data, SubElements, - Package->RetInfo.ObjectType1, - SubPackage->Package.Count, 0, 0, 0); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - break; - - - case ACPI_PTYPE2_COUNT: - - /* - * First element is the (Integer) count of elements, including - * the count field. - */ - Status = AcpiNsCheckObjectType (Data, SubElements, - ACPI_RTYPE_INTEGER, 0); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* - * Make sure package is large enough for the Count and is - * is as large as the minimum size - */ - ExpectedCount = (UINT32) (*SubElements)->Integer.Value; - if (SubPackage->Package.Count < ExpectedCount) - { - goto PackageTooSmall; - } - if (SubPackage->Package.Count < Package->RetInfo.Count1) - { - ExpectedCount = Package->RetInfo.Count1; - goto PackageTooSmall; - } - - /* Check the type of each sub-package element */ - - Status = AcpiNsCheckPackageElements (Data, (SubElements + 1), - Package->RetInfo.ObjectType1, - (ExpectedCount - 1), 0, 0, 1); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - break; - - - default: /* Should not get here, type was validated by caller */ - - return (AE_AML_INTERNAL); - } - - Elements++; - } - - return (AE_OK); - - -PackageTooSmall: - - /* The sub-package count was smaller than required */ - - ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, - "Return Sub-Package[%u] is too small - found %u elements, expected %u", - i, SubPackage->Package.Count, ExpectedCount)); - - return (AE_AML_OPERAND_VALUE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsCheckPackageElements - * - * PARAMETERS: Data - Pointer to validation data structure - * Elements - Pointer to the package elements array - * Type1 - Object type for first group - * Count1 - Count for first group - * Type2 - Object type for second group - * Count2 - Count for second group - * StartIndex - Start of the first group of elements - * - * RETURN: Status - * - * DESCRIPTION: Check that all elements of a package are of the correct object - * type. Supports up to two groups of different object types. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsCheckPackageElements ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **Elements, - UINT8 Type1, - UINT32 Count1, - UINT8 Type2, - UINT32 Count2, - UINT32 StartIndex) -{ - ACPI_OPERAND_OBJECT **ThisElement = Elements; - ACPI_STATUS Status; - UINT32 i; - - - /* - * Up to two groups of package elements are supported by the data - * structure. All elements in each group must be of the same type. - * The second group can have a count of zero. - */ - for (i = 0; i < Count1; i++) - { - Status = AcpiNsCheckObjectType (Data, ThisElement, - Type1, i + StartIndex); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - ThisElement++; - } - - for (i = 0; i < Count2; i++) - { - Status = AcpiNsCheckObjectType (Data, ThisElement, - Type2, (i + Count1 + StartIndex)); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - ThisElement++; - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsCheckObjectType - * - * PARAMETERS: Data - Pointer to validation data structure - * ReturnObjectPtr - Pointer to the object returned from the - * evaluation of a method or object - * ExpectedBtypes - Bitmap of expected return type(s) - * PackageIndex - Index of object within parent package (if - * applicable - ACPI_NOT_PACKAGE_ELEMENT - * otherwise) - * - * RETURN: Status - * - * DESCRIPTION: Check the type of the return object against the expected object - * type(s). Use of Btype allows multiple expected object types. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsCheckObjectType ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **ReturnObjectPtr, - UINT32 ExpectedBtypes, - UINT32 PackageIndex) -{ - ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; - ACPI_STATUS Status = AE_OK; - UINT32 ReturnBtype; - char TypeBuffer[48]; /* Room for 5 types */ - - - /* - * If we get a NULL ReturnObject here, it is a NULL package element, - * and this is always an error. - */ - if (!ReturnObject) - { - goto TypeErrorExit; - } - - /* A Namespace node should not get here, but make sure */ - - if (ACPI_GET_DESCRIPTOR_TYPE (ReturnObject) == ACPI_DESC_TYPE_NAMED) - { - ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, - "Invalid return type - Found a Namespace node [%4.4s] type %s", - ReturnObject->Node.Name.Ascii, - AcpiUtGetTypeName (ReturnObject->Node.Type))); - return (AE_AML_OPERAND_TYPE); - } - - /* - * Convert the object type (ACPI_TYPE_xxx) to a bitmapped object type. - * The bitmapped type allows multiple possible return types. - * - * Note, the cases below must handle all of the possible types returned - * from all of the predefined names (including elements of returned - * packages) - */ - switch (ReturnObject->Common.Type) - { - case ACPI_TYPE_INTEGER: - ReturnBtype = ACPI_RTYPE_INTEGER; - break; - - case ACPI_TYPE_BUFFER: - ReturnBtype = ACPI_RTYPE_BUFFER; - break; - - case ACPI_TYPE_STRING: - ReturnBtype = ACPI_RTYPE_STRING; - break; - - case ACPI_TYPE_PACKAGE: - ReturnBtype = ACPI_RTYPE_PACKAGE; - break; - - case ACPI_TYPE_LOCAL_REFERENCE: - ReturnBtype = ACPI_RTYPE_REFERENCE; - break; - - default: - /* Not one of the supported objects, must be incorrect */ - - goto TypeErrorExit; - } - - /* Is the object one of the expected types? */ - - if (!(ReturnBtype & ExpectedBtypes)) - { - /* Type mismatch -- attempt repair of the returned object */ - - Status = AcpiNsRepairObject (Data, ExpectedBtypes, - PackageIndex, ReturnObjectPtr); - if (ACPI_SUCCESS (Status)) - { - return (AE_OK); /* Repair was successful */ - } - goto TypeErrorExit; - } - - /* For reference objects, check that the reference type is correct */ - - if (ReturnObject->Common.Type == ACPI_TYPE_LOCAL_REFERENCE) - { - Status = AcpiNsCheckReference (Data, ReturnObject); - } - - return (Status); - - -TypeErrorExit: - - /* Create a string with all expected types for this predefined object */ - - AcpiNsGetExpectedTypes (TypeBuffer, ExpectedBtypes); - - if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT) - { - ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, - "Return type mismatch - found %s, expected %s", - AcpiUtGetObjectTypeName (ReturnObject), TypeBuffer)); - } - else - { - ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, - "Return Package type mismatch at index %u - " - "found %s, expected %s", PackageIndex, - AcpiUtGetObjectTypeName (ReturnObject), TypeBuffer)); - } - - return (AE_AML_OPERAND_TYPE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsCheckReference - * - * PARAMETERS: Data - Pointer to validation data structure - * ReturnObject - Object returned from the evaluation of a - * method or object - * - * RETURN: Status - * - * DESCRIPTION: Check a returned reference object for the correct reference - * type. The only reference type that can be returned from a - * predefined method is a named reference. All others are invalid. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsCheckReference ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT *ReturnObject) -{ - - /* - * Check the reference object for the correct reference type (opcode). - * The only type of reference that can be converted to an ACPI_OBJECT is - * a reference to a named object (reference class: NAME) - */ - if (ReturnObject->Reference.Class == ACPI_REFCLASS_NAME) - { - return (AE_OK); - } - - ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, - "Return type mismatch - unexpected reference object type [%s] %2.2X", - AcpiUtGetReferenceName (ReturnObject), - ReturnObject->Reference.Class)); - - return (AE_AML_OPERAND_TYPE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsGetExpectedTypes - * - * PARAMETERS: Buffer - Pointer to where the string is returned - * ExpectedBtypes - Bitmap of expected return type(s) - * - * RETURN: Buffer is populated with type names. - * - * DESCRIPTION: Translate the expected types bitmap into a string of ascii - * names of expected types, for use in warning messages. - * - ******************************************************************************/ - -static void -AcpiNsGetExpectedTypes ( - char *Buffer, - UINT32 ExpectedBtypes) -{ - UINT32 ThisRtype; - UINT32 i; - UINT32 j; - - - j = 1; - Buffer[0] = 0; - ThisRtype = ACPI_RTYPE_INTEGER; - - for (i = 0; i < ACPI_NUM_RTYPES; i++) - { - /* If one of the expected types, concatenate the name of this type */ - - if (ExpectedBtypes & ThisRtype) - { - ACPI_STRCAT (Buffer, &AcpiRtypeNames[i][j]); - j = 0; /* Use name separator from now on */ - } - ThisRtype <<= 1; /* Next Rtype */ - } -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsrepair.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsrepair.c deleted file mode 100644 index 5c402df36..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsrepair.c +++ /dev/null @@ -1,686 +0,0 @@ -/****************************************************************************** - * - * Module Name: nsrepair - Repair for objects returned by predefined methods - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __NSREPAIR_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "acinterp.h" - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsrepair") - - -/******************************************************************************* - * - * This module attempts to repair or convert objects returned by the - * predefined methods to an object type that is expected, as per the ACPI - * specification. The need for this code is dictated by the many machines that - * return incorrect types for the standard predefined methods. Performing these - * conversions here, in one place, eliminates the need for individual ACPI - * device drivers to do the same. Note: Most of these conversions are different - * than the internal object conversion routines used for implicit object - * conversion. - * - * The following conversions can be performed as necessary: - * - * Integer -> String - * Integer -> Buffer - * String -> Integer - * String -> Buffer - * Buffer -> Integer - * Buffer -> String - * Buffer -> Package of Integers - * Package -> Package of one Package - * - ******************************************************************************/ - - -/* Local prototypes */ - -static ACPI_STATUS -AcpiNsConvertToInteger ( - ACPI_OPERAND_OBJECT *OriginalObject, - ACPI_OPERAND_OBJECT **ReturnObject); - -static ACPI_STATUS -AcpiNsConvertToString ( - ACPI_OPERAND_OBJECT *OriginalObject, - ACPI_OPERAND_OBJECT **ReturnObject); - -static ACPI_STATUS -AcpiNsConvertToBuffer ( - ACPI_OPERAND_OBJECT *OriginalObject, - ACPI_OPERAND_OBJECT **ReturnObject); - -static ACPI_STATUS -AcpiNsConvertToPackage ( - ACPI_OPERAND_OBJECT *OriginalObject, - ACPI_OPERAND_OBJECT **ReturnObject); - - -/******************************************************************************* - * - * FUNCTION: AcpiNsRepairObject - * - * PARAMETERS: Data - Pointer to validation data structure - * ExpectedBtypes - Object types expected - * PackageIndex - Index of object within parent package (if - * applicable - ACPI_NOT_PACKAGE_ELEMENT - * otherwise) - * ReturnObjectPtr - Pointer to the object returned from the - * evaluation of a method or object - * - * RETURN: Status. AE_OK if repair was successful. - * - * DESCRIPTION: Attempt to repair/convert a return object of a type that was - * not expected. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsRepairObject ( - ACPI_PREDEFINED_DATA *Data, - UINT32 ExpectedBtypes, - UINT32 PackageIndex, - ACPI_OPERAND_OBJECT **ReturnObjectPtr) -{ - ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; - ACPI_OPERAND_OBJECT *NewObject; - ACPI_STATUS Status; - - - ACPI_FUNCTION_NAME (NsRepairObject); - - - /* - * At this point, we know that the type of the returned object was not - * one of the expected types for this predefined name. Attempt to - * repair the object by converting it to one of the expected object - * types for this predefined name. - */ - if (ExpectedBtypes & ACPI_RTYPE_INTEGER) - { - Status = AcpiNsConvertToInteger (ReturnObject, &NewObject); - if (ACPI_SUCCESS (Status)) - { - goto ObjectRepaired; - } - } - if (ExpectedBtypes & ACPI_RTYPE_STRING) - { - Status = AcpiNsConvertToString (ReturnObject, &NewObject); - if (ACPI_SUCCESS (Status)) - { - goto ObjectRepaired; - } - } - if (ExpectedBtypes & ACPI_RTYPE_BUFFER) - { - Status = AcpiNsConvertToBuffer (ReturnObject, &NewObject); - if (ACPI_SUCCESS (Status)) - { - goto ObjectRepaired; - } - } - if (ExpectedBtypes & ACPI_RTYPE_PACKAGE) - { - Status = AcpiNsConvertToPackage (ReturnObject, &NewObject); - if (ACPI_SUCCESS (Status)) - { - goto ObjectRepaired; - } - } - - /* We cannot repair this object */ - - return (AE_AML_OPERAND_TYPE); - - -ObjectRepaired: - - /* Object was successfully repaired */ - - /* - * If the original object is a package element, we need to: - * 1. Set the reference count of the new object to match the - * reference count of the old object. - * 2. Decrement the reference count of the original object. - */ - if (PackageIndex != ACPI_NOT_PACKAGE_ELEMENT) - { - NewObject->Common.ReferenceCount = - ReturnObject->Common.ReferenceCount; - - if (ReturnObject->Common.ReferenceCount > 1) - { - ReturnObject->Common.ReferenceCount--; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, - "%s: Converted %s to expected %s at index %u\n", - Data->Pathname, AcpiUtGetObjectTypeName (ReturnObject), - AcpiUtGetObjectTypeName (NewObject), PackageIndex)); - } - else - { - ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, - "%s: Converted %s to expected %s\n", - Data->Pathname, AcpiUtGetObjectTypeName (ReturnObject), - AcpiUtGetObjectTypeName (NewObject))); - } - - /* Delete old object, install the new return object */ - - AcpiUtRemoveReference (ReturnObject); - *ReturnObjectPtr = NewObject; - Data->Flags |= ACPI_OBJECT_REPAIRED; - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsConvertToInteger - * - * PARAMETERS: OriginalObject - Object to be converted - * ReturnObject - Where the new converted object is returned - * - * RETURN: Status. AE_OK if conversion was successful. - * - * DESCRIPTION: Attempt to convert a String/Buffer object to an Integer. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsConvertToInteger ( - ACPI_OPERAND_OBJECT *OriginalObject, - ACPI_OPERAND_OBJECT **ReturnObject) -{ - ACPI_OPERAND_OBJECT *NewObject; - ACPI_STATUS Status; - UINT64 Value = 0; - UINT32 i; - - - switch (OriginalObject->Common.Type) - { - case ACPI_TYPE_STRING: - - /* String-to-Integer conversion */ - - Status = AcpiUtStrtoul64 (OriginalObject->String.Pointer, - ACPI_ANY_BASE, &Value); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - break; - - case ACPI_TYPE_BUFFER: - - /* Buffer-to-Integer conversion. Max buffer size is 64 bits. */ - - if (OriginalObject->Buffer.Length > 8) - { - return (AE_AML_OPERAND_TYPE); - } - - /* Extract each buffer byte to create the integer */ - - for (i = 0; i < OriginalObject->Buffer.Length; i++) - { - Value |= ((UINT64) OriginalObject->Buffer.Pointer[i] << (i * 8)); - } - break; - - default: - return (AE_AML_OPERAND_TYPE); - } - - NewObject = AcpiUtCreateIntegerObject (Value); - if (!NewObject) - { - return (AE_NO_MEMORY); - } - - *ReturnObject = NewObject; - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsConvertToString - * - * PARAMETERS: OriginalObject - Object to be converted - * ReturnObject - Where the new converted object is returned - * - * RETURN: Status. AE_OK if conversion was successful. - * - * DESCRIPTION: Attempt to convert a Integer/Buffer object to a String. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsConvertToString ( - ACPI_OPERAND_OBJECT *OriginalObject, - ACPI_OPERAND_OBJECT **ReturnObject) -{ - ACPI_OPERAND_OBJECT *NewObject; - ACPI_SIZE Length; - ACPI_STATUS Status; - - - switch (OriginalObject->Common.Type) - { - case ACPI_TYPE_INTEGER: - /* - * Integer-to-String conversion. Commonly, convert - * an integer of value 0 to a NULL string. The last element of - * _BIF and _BIX packages occasionally need this fix. - */ - if (OriginalObject->Integer.Value == 0) - { - /* Allocate a new NULL string object */ - - NewObject = AcpiUtCreateStringObject (0); - if (!NewObject) - { - return (AE_NO_MEMORY); - } - } - else - { - Status = AcpiExConvertToString (OriginalObject, &NewObject, - ACPI_IMPLICIT_CONVERT_HEX); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - break; - - case ACPI_TYPE_BUFFER: - /* - * Buffer-to-String conversion. Use a ToString - * conversion, no transform performed on the buffer data. The best - * example of this is the _BIF method, where the string data from - * the battery is often (incorrectly) returned as buffer object(s). - */ - Length = 0; - while ((Length < OriginalObject->Buffer.Length) && - (OriginalObject->Buffer.Pointer[Length])) - { - Length++; - } - - /* Allocate a new string object */ - - NewObject = AcpiUtCreateStringObject (Length); - if (!NewObject) - { - return (AE_NO_MEMORY); - } - - /* - * Copy the raw buffer data with no transform. String is already NULL - * terminated at Length+1. - */ - ACPI_MEMCPY (NewObject->String.Pointer, - OriginalObject->Buffer.Pointer, Length); - break; - - default: - return (AE_AML_OPERAND_TYPE); - } - - *ReturnObject = NewObject; - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsConvertToBuffer - * - * PARAMETERS: OriginalObject - Object to be converted - * ReturnObject - Where the new converted object is returned - * - * RETURN: Status. AE_OK if conversion was successful. - * - * DESCRIPTION: Attempt to convert a Integer/String/Package object to a Buffer. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsConvertToBuffer ( - ACPI_OPERAND_OBJECT *OriginalObject, - ACPI_OPERAND_OBJECT **ReturnObject) -{ - ACPI_OPERAND_OBJECT *NewObject; - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT **Elements; - UINT32 *DwordBuffer; - UINT32 Count; - UINT32 i; - - - switch (OriginalObject->Common.Type) - { - case ACPI_TYPE_INTEGER: - /* - * Integer-to-Buffer conversion. - * Convert the Integer to a packed-byte buffer. _MAT and other - * objects need this sometimes, if a read has been performed on a - * Field object that is less than or equal to the global integer - * size (32 or 64 bits). - */ - Status = AcpiExConvertToBuffer (OriginalObject, &NewObject); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - break; - - case ACPI_TYPE_STRING: - - /* String-to-Buffer conversion. Simple data copy */ - - NewObject = AcpiUtCreateBufferObject (OriginalObject->String.Length); - if (!NewObject) - { - return (AE_NO_MEMORY); - } - - ACPI_MEMCPY (NewObject->Buffer.Pointer, - OriginalObject->String.Pointer, OriginalObject->String.Length); - break; - - case ACPI_TYPE_PACKAGE: - /* - * This case is often seen for predefined names that must return a - * Buffer object with multiple DWORD integers within. For example, - * _FDE and _GTM. The Package can be converted to a Buffer. - */ - - /* All elements of the Package must be integers */ - - Elements = OriginalObject->Package.Elements; - Count = OriginalObject->Package.Count; - - for (i = 0; i < Count; i++) - { - if ((!*Elements) || - ((*Elements)->Common.Type != ACPI_TYPE_INTEGER)) - { - return (AE_AML_OPERAND_TYPE); - } - Elements++; - } - - /* Create the new buffer object to replace the Package */ - - NewObject = AcpiUtCreateBufferObject (ACPI_MUL_4 (Count)); - if (!NewObject) - { - return (AE_NO_MEMORY); - } - - /* Copy the package elements (integers) to the buffer as DWORDs */ - - Elements = OriginalObject->Package.Elements; - DwordBuffer = ACPI_CAST_PTR (UINT32, NewObject->Buffer.Pointer); - - for (i = 0; i < Count; i++) - { - *DwordBuffer = (UINT32) (*Elements)->Integer.Value; - DwordBuffer++; - Elements++; - } - break; - - default: - return (AE_AML_OPERAND_TYPE); - } - - *ReturnObject = NewObject; - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsConvertToPackage - * - * PARAMETERS: OriginalObject - Object to be converted - * ReturnObject - Where the new converted object is returned - * - * RETURN: Status. AE_OK if conversion was successful. - * - * DESCRIPTION: Attempt to convert a Buffer object to a Package. Each byte of - * the buffer is converted to a single integer package element. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsConvertToPackage ( - ACPI_OPERAND_OBJECT *OriginalObject, - ACPI_OPERAND_OBJECT **ReturnObject) -{ - ACPI_OPERAND_OBJECT *NewObject; - ACPI_OPERAND_OBJECT **Elements; - UINT32 Length; - UINT8 *Buffer; - - - switch (OriginalObject->Common.Type) - { - case ACPI_TYPE_BUFFER: - - /* Buffer-to-Package conversion */ - - Length = OriginalObject->Buffer.Length; - NewObject = AcpiUtCreatePackageObject (Length); - if (!NewObject) - { - return (AE_NO_MEMORY); - } - - /* Convert each buffer byte to an integer package element */ - - Elements = NewObject->Package.Elements; - Buffer = OriginalObject->Buffer.Pointer; - - while (Length--) - { - *Elements = AcpiUtCreateIntegerObject ((UINT64) *Buffer); - if (!*Elements) - { - AcpiUtRemoveReference (NewObject); - return (AE_NO_MEMORY); - } - Elements++; - Buffer++; - } - break; - - default: - return (AE_AML_OPERAND_TYPE); - } - - *ReturnObject = NewObject; - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsRepairPackageList - * - * PARAMETERS: Data - Pointer to validation data structure - * ObjDescPtr - Pointer to the object to repair. The new - * package object is returned here, - * overwriting the old object. - * - * RETURN: Status, new object in *ObjDescPtr - * - * DESCRIPTION: Repair a common problem with objects that are defined to return - * a variable-length Package of Packages. If the variable-length - * is one, some BIOS code mistakenly simply declares a single - * Package instead of a Package with one sub-Package. This - * function attempts to repair this error by wrapping a Package - * object around the original Package, creating the correct - * Package with one sub-Package. - * - * Names that can be repaired in this manner include: - * _ALR, _CSD, _HPX, _MLS, _PRT, _PSS, _TRT, TSS - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsRepairPackageList ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **ObjDescPtr) -{ - ACPI_OPERAND_OBJECT *PkgObjDesc; - - - ACPI_FUNCTION_NAME (NsRepairPackageList); - - - /* - * Create the new outer package and populate it. The new package will - * have a single element, the lone subpackage. - */ - PkgObjDesc = AcpiUtCreatePackageObject (1); - if (!PkgObjDesc) - { - return (AE_NO_MEMORY); - } - - PkgObjDesc->Package.Elements[0] = *ObjDescPtr; - - /* Return the new object in the object pointer */ - - *ObjDescPtr = PkgObjDesc; - Data->Flags |= ACPI_OBJECT_REPAIRED; - - ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, - "%s: Repaired incorrectly formed Package\n", Data->Pathname)); - - return (AE_OK); -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsrepair2.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsrepair2.c deleted file mode 100644 index c08028452..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsrepair2.c +++ /dev/null @@ -1,796 +0,0 @@ -/****************************************************************************** - * - * Module Name: nsrepair2 - Repair for objects returned by specific - * predefined methods - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __NSREPAIR2_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "acpredef.h" - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsrepair2") - - -/* - * Information structure and handler for ACPI predefined names that can - * be repaired on a per-name basis. - */ -typedef -ACPI_STATUS (*ACPI_REPAIR_FUNCTION) ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **ReturnObjectPtr); - -typedef struct acpi_repair_info -{ - char Name[ACPI_NAME_SIZE]; - ACPI_REPAIR_FUNCTION RepairFunction; - -} ACPI_REPAIR_INFO; - - -/* Local prototypes */ - -static const ACPI_REPAIR_INFO * -AcpiNsMatchRepairableName ( - ACPI_NAMESPACE_NODE *Node); - -static ACPI_STATUS -AcpiNsRepair_ALR ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **ReturnObjectPtr); - -static ACPI_STATUS -AcpiNsRepair_FDE ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **ReturnObjectPtr); - -static ACPI_STATUS -AcpiNsRepair_PSS ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **ReturnObjectPtr); - -static ACPI_STATUS -AcpiNsRepair_TSS ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **ReturnObjectPtr); - -static ACPI_STATUS -AcpiNsCheckSortedList ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT *ReturnObject, - UINT32 ExpectedCount, - UINT32 SortIndex, - UINT8 SortDirection, - char *SortKeyName); - -static ACPI_STATUS -AcpiNsSortList ( - ACPI_OPERAND_OBJECT **Elements, - UINT32 Count, - UINT32 Index, - UINT8 SortDirection); - -/* Values for SortDirection above */ - -#define ACPI_SORT_ASCENDING 0 -#define ACPI_SORT_DESCENDING 1 - - -/* - * This table contains the names of the predefined methods for which we can - * perform more complex repairs. - * - * As necessary: - * - * _ALR: Sort the list ascending by AmbientIlluminance - * _FDE: Convert Buffer of BYTEs to a Buffer of DWORDs - * _GTM: Convert Buffer of BYTEs to a Buffer of DWORDs - * _PSS: Sort the list descending by Power - * _TSS: Sort the list descending by Power - */ -static const ACPI_REPAIR_INFO AcpiNsRepairableNames[] = -{ - {"_ALR", AcpiNsRepair_ALR}, - {"_FDE", AcpiNsRepair_FDE}, - {"_GTM", AcpiNsRepair_FDE}, /* _GTM has same repair as _FDE */ - {"_PSS", AcpiNsRepair_PSS}, - {"_TSS", AcpiNsRepair_TSS}, - {{0,0,0,0}, NULL} /* Table terminator */ -}; - - -#define ACPI_FDE_FIELD_COUNT 5 -#define ACPI_FDE_BYTE_BUFFER_SIZE 5 -#define ACPI_FDE_DWORD_BUFFER_SIZE (ACPI_FDE_FIELD_COUNT * sizeof (UINT32)) - - -/****************************************************************************** - * - * FUNCTION: AcpiNsComplexRepairs - * - * PARAMETERS: Data - Pointer to validation data structure - * Node - Namespace node for the method/object - * ValidateStatus - Original status of earlier validation - * ReturnObjectPtr - Pointer to the object returned from the - * evaluation of a method or object - * - * RETURN: Status. AE_OK if repair was successful. If name is not - * matched, ValidateStatus is returned. - * - * DESCRIPTION: Attempt to repair/convert a return object of a type that was - * not expected. - * - *****************************************************************************/ - -ACPI_STATUS -AcpiNsComplexRepairs ( - ACPI_PREDEFINED_DATA *Data, - ACPI_NAMESPACE_NODE *Node, - ACPI_STATUS ValidateStatus, - ACPI_OPERAND_OBJECT **ReturnObjectPtr) -{ - const ACPI_REPAIR_INFO *Predefined; - ACPI_STATUS Status; - - - /* Check if this name is in the list of repairable names */ - - Predefined = AcpiNsMatchRepairableName (Node); - if (!Predefined) - { - return (ValidateStatus); - } - - Status = Predefined->RepairFunction (Data, ReturnObjectPtr); - return (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiNsMatchRepairableName - * - * PARAMETERS: Node - Namespace node for the method/object - * - * RETURN: Pointer to entry in repair table. NULL indicates not found. - * - * DESCRIPTION: Check an object name against the repairable object list. - * - *****************************************************************************/ - -static const ACPI_REPAIR_INFO * -AcpiNsMatchRepairableName ( - ACPI_NAMESPACE_NODE *Node) -{ - const ACPI_REPAIR_INFO *ThisName; - - - /* Search info table for a repairable predefined method/object name */ - - ThisName = AcpiNsRepairableNames; - while (ThisName->RepairFunction) - { - if (ACPI_COMPARE_NAME (Node->Name.Ascii, ThisName->Name)) - { - return (ThisName); - } - ThisName++; - } - - return (NULL); /* Not found */ -} - - -/****************************************************************************** - * - * FUNCTION: AcpiNsRepair_ALR - * - * PARAMETERS: Data - Pointer to validation data structure - * ReturnObjectPtr - Pointer to the object returned from the - * evaluation of a method or object - * - * RETURN: Status. AE_OK if object is OK or was repaired successfully - * - * DESCRIPTION: Repair for the _ALR object. If necessary, sort the object list - * ascending by the ambient illuminance values. - * - *****************************************************************************/ - -static ACPI_STATUS -AcpiNsRepair_ALR ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **ReturnObjectPtr) -{ - ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; - ACPI_STATUS Status; - - - Status = AcpiNsCheckSortedList (Data, ReturnObject, 2, 1, - ACPI_SORT_ASCENDING, "AmbientIlluminance"); - - return (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiNsRepair_FDE - * - * PARAMETERS: Data - Pointer to validation data structure - * ReturnObjectPtr - Pointer to the object returned from the - * evaluation of a method or object - * - * RETURN: Status. AE_OK if object is OK or was repaired successfully - * - * DESCRIPTION: Repair for the _FDE and _GTM objects. The expected return - * value is a Buffer of 5 DWORDs. This function repairs a common - * problem where the return value is a Buffer of BYTEs, not - * DWORDs. - * - *****************************************************************************/ - -static ACPI_STATUS -AcpiNsRepair_FDE ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **ReturnObjectPtr) -{ - ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; - ACPI_OPERAND_OBJECT *BufferObject; - UINT8 *ByteBuffer; - UINT32 *DwordBuffer; - UINT32 i; - - - ACPI_FUNCTION_NAME (NsRepair_FDE); - - - switch (ReturnObject->Common.Type) - { - case ACPI_TYPE_BUFFER: - - /* This is the expected type. Length should be (at least) 5 DWORDs */ - - if (ReturnObject->Buffer.Length >= ACPI_FDE_DWORD_BUFFER_SIZE) - { - return (AE_OK); - } - - /* We can only repair if we have exactly 5 BYTEs */ - - if (ReturnObject->Buffer.Length != ACPI_FDE_BYTE_BUFFER_SIZE) - { - ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, - "Incorrect return buffer length %u, expected %u", - ReturnObject->Buffer.Length, ACPI_FDE_DWORD_BUFFER_SIZE)); - - return (AE_AML_OPERAND_TYPE); - } - - /* Create the new (larger) buffer object */ - - BufferObject = AcpiUtCreateBufferObject (ACPI_FDE_DWORD_BUFFER_SIZE); - if (!BufferObject) - { - return (AE_NO_MEMORY); - } - - /* Expand each byte to a DWORD */ - - ByteBuffer = ReturnObject->Buffer.Pointer; - DwordBuffer = ACPI_CAST_PTR (UINT32, BufferObject->Buffer.Pointer); - - for (i = 0; i < ACPI_FDE_FIELD_COUNT; i++) - { - *DwordBuffer = (UINT32) *ByteBuffer; - DwordBuffer++; - ByteBuffer++; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, - "%s Expanded Byte Buffer to expected DWord Buffer\n", - Data->Pathname)); - break; - - default: - return (AE_AML_OPERAND_TYPE); - } - - /* Delete the original return object, return the new buffer object */ - - AcpiUtRemoveReference (ReturnObject); - *ReturnObjectPtr = BufferObject; - - Data->Flags |= ACPI_OBJECT_REPAIRED; - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiNsRepair_TSS - * - * PARAMETERS: Data - Pointer to validation data structure - * ReturnObjectPtr - Pointer to the object returned from the - * evaluation of a method or object - * - * RETURN: Status. AE_OK if object is OK or was repaired successfully - * - * DESCRIPTION: Repair for the _TSS object. If necessary, sort the object list - * descending by the power dissipation values. - * - *****************************************************************************/ - -static ACPI_STATUS -AcpiNsRepair_TSS ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **ReturnObjectPtr) -{ - ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; - ACPI_STATUS Status; - - - Status = AcpiNsCheckSortedList (Data, ReturnObject, 5, 1, - ACPI_SORT_DESCENDING, "PowerDissipation"); - - return (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiNsRepair_PSS - * - * PARAMETERS: Data - Pointer to validation data structure - * ReturnObjectPtr - Pointer to the object returned from the - * evaluation of a method or object - * - * RETURN: Status. AE_OK if object is OK or was repaired successfully - * - * DESCRIPTION: Repair for the _PSS object. If necessary, sort the object list - * by the CPU frequencies. Check that the power dissipation values - * are all proportional to CPU frequency (i.e., sorting by - * frequency should be the same as sorting by power.) - * - *****************************************************************************/ - -static ACPI_STATUS -AcpiNsRepair_PSS ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT **ReturnObjectPtr) -{ - ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; - ACPI_OPERAND_OBJECT **OuterElements; - UINT32 OuterElementCount; - ACPI_OPERAND_OBJECT **Elements; - ACPI_OPERAND_OBJECT *ObjDesc; - UINT32 PreviousValue; - ACPI_STATUS Status; - UINT32 i; - - - /* - * Entries (sub-packages) in the _PSS Package must be sorted by power - * dissipation, in descending order. If it appears that the list is - * incorrectly sorted, sort it. We sort by CpuFrequency, since this - * should be proportional to the power. - */ - Status =AcpiNsCheckSortedList (Data, ReturnObject, 6, 0, - ACPI_SORT_DESCENDING, "CpuFrequency"); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* - * We now know the list is correctly sorted by CPU frequency. Check if - * the power dissipation values are proportional. - */ - PreviousValue = ACPI_UINT32_MAX; - OuterElements = ReturnObject->Package.Elements; - OuterElementCount = ReturnObject->Package.Count; - - for (i = 0; i < OuterElementCount; i++) - { - Elements = (*OuterElements)->Package.Elements; - ObjDesc = Elements[1]; /* Index1 = PowerDissipation */ - - if ((UINT32) ObjDesc->Integer.Value > PreviousValue) - { - ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, - "SubPackage[%u,%u] - suspicious power dissipation values", - i-1, i)); - } - - PreviousValue = (UINT32) ObjDesc->Integer.Value; - OuterElements++; - } - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiNsCheckSortedList - * - * PARAMETERS: Data - Pointer to validation data structure - * ReturnObject - Pointer to the top-level returned object - * ExpectedCount - Minimum length of each sub-package - * SortIndex - Sub-package entry to sort on - * SortDirection - Ascending or descending - * SortKeyName - Name of the SortIndex field - * - * RETURN: Status. AE_OK if the list is valid and is sorted correctly or - * has been repaired by sorting the list. - * - * DESCRIPTION: Check if the package list is valid and sorted correctly by the - * SortIndex. If not, then sort the list. - * - *****************************************************************************/ - -static ACPI_STATUS -AcpiNsCheckSortedList ( - ACPI_PREDEFINED_DATA *Data, - ACPI_OPERAND_OBJECT *ReturnObject, - UINT32 ExpectedCount, - UINT32 SortIndex, - UINT8 SortDirection, - char *SortKeyName) -{ - UINT32 OuterElementCount; - ACPI_OPERAND_OBJECT **OuterElements; - ACPI_OPERAND_OBJECT **Elements; - ACPI_OPERAND_OBJECT *ObjDesc; - UINT32 i; - UINT32 PreviousValue; - ACPI_STATUS Status; - - - ACPI_FUNCTION_NAME (NsCheckSortedList); - - - /* The top-level object must be a package */ - - if (ReturnObject->Common.Type != ACPI_TYPE_PACKAGE) - { - return (AE_AML_OPERAND_TYPE); - } - - /* - * NOTE: assumes list of sub-packages contains no NULL elements. - * Any NULL elements should have been removed by earlier call - * to AcpiNsRemoveNullElements. - */ - OuterElements = ReturnObject->Package.Elements; - OuterElementCount = ReturnObject->Package.Count; - if (!OuterElementCount) - { - return (AE_AML_PACKAGE_LIMIT); - } - - PreviousValue = 0; - if (SortDirection == ACPI_SORT_DESCENDING) - { - PreviousValue = ACPI_UINT32_MAX; - } - - /* Examine each subpackage */ - - for (i = 0; i < OuterElementCount; i++) - { - /* Each element of the top-level package must also be a package */ - - if ((*OuterElements)->Common.Type != ACPI_TYPE_PACKAGE) - { - return (AE_AML_OPERAND_TYPE); - } - - /* Each sub-package must have the minimum length */ - - if ((*OuterElements)->Package.Count < ExpectedCount) - { - return (AE_AML_PACKAGE_LIMIT); - } - - Elements = (*OuterElements)->Package.Elements; - ObjDesc = Elements[SortIndex]; - - if (ObjDesc->Common.Type != ACPI_TYPE_INTEGER) - { - return (AE_AML_OPERAND_TYPE); - } - - /* - * The list must be sorted in the specified order. If we detect a - * discrepancy, issue a warning and sort the entire list - */ - if (((SortDirection == ACPI_SORT_ASCENDING) && - (ObjDesc->Integer.Value < PreviousValue)) || - ((SortDirection == ACPI_SORT_DESCENDING) && - (ObjDesc->Integer.Value > PreviousValue))) - { - Status = AcpiNsSortList (ReturnObject->Package.Elements, - OuterElementCount, SortIndex, SortDirection); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Data->Flags |= ACPI_OBJECT_REPAIRED; - - ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, - "%s: Repaired unsorted list - now sorted by %s\n", - Data->Pathname, SortKeyName)); - return (AE_OK); - } - - PreviousValue = (UINT32) ObjDesc->Integer.Value; - OuterElements++; - } - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiNsRemoveNullElements - * - * PARAMETERS: Data - Pointer to validation data structure - * PackageType - An AcpiReturnPackageTypes value - * ObjDesc - A Package object - * - * RETURN: None. - * - * DESCRIPTION: Remove all NULL package elements from packages that contain - * a variable number of sub-packages. - * - *****************************************************************************/ - -void -AcpiNsRemoveNullElements ( - ACPI_PREDEFINED_DATA *Data, - UINT8 PackageType, - ACPI_OPERAND_OBJECT *ObjDesc) -{ - ACPI_OPERAND_OBJECT **Source; - ACPI_OPERAND_OBJECT **Dest; - UINT32 Count; - UINT32 NewCount; - UINT32 i; - - - ACPI_FUNCTION_NAME (NsRemoveNullElements); - - - /* - * PTYPE1 packages contain no subpackages. - * PTYPE2 packages contain a variable number of sub-packages. We can - * safely remove all NULL elements from the PTYPE2 packages. - */ - switch (PackageType) - { - case ACPI_PTYPE1_FIXED: - case ACPI_PTYPE1_VAR: - case ACPI_PTYPE1_OPTION: - return; - - case ACPI_PTYPE2: - case ACPI_PTYPE2_COUNT: - case ACPI_PTYPE2_PKG_COUNT: - case ACPI_PTYPE2_FIXED: - case ACPI_PTYPE2_MIN: - case ACPI_PTYPE2_REV_FIXED: - break; - - default: - return; - } - - Count = ObjDesc->Package.Count; - NewCount = Count; - - Source = ObjDesc->Package.Elements; - Dest = Source; - - /* Examine all elements of the package object, remove nulls */ - - for (i = 0; i < Count; i++) - { - if (!*Source) - { - NewCount--; - } - else - { - *Dest = *Source; - Dest++; - } - Source++; - } - - /* Update parent package if any null elements were removed */ - - if (NewCount < Count) - { - ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, - "%s: Found and removed %u NULL elements\n", - Data->Pathname, (Count - NewCount))); - - /* NULL terminate list and update the package count */ - - *Dest = NULL; - ObjDesc->Package.Count = NewCount; - } -} - - -/****************************************************************************** - * - * FUNCTION: AcpiNsSortList - * - * PARAMETERS: Elements - Package object element list - * Count - Element count for above - * Index - Sort by which package element - * SortDirection - Ascending or Descending sort - * - * RETURN: Status - * - * DESCRIPTION: Sort the objects that are in a package element list. - * - * NOTE: Assumes that all NULL elements have been removed from the package. - * - *****************************************************************************/ - -static ACPI_STATUS -AcpiNsSortList ( - ACPI_OPERAND_OBJECT **Elements, - UINT32 Count, - UINT32 Index, - UINT8 SortDirection) -{ - ACPI_OPERAND_OBJECT *ObjDesc1; - ACPI_OPERAND_OBJECT *ObjDesc2; - ACPI_OPERAND_OBJECT *TempObj; - UINT32 i; - UINT32 j; - - - /* Simple bubble sort */ - - for (i = 1; i < Count; i++) - { - for (j = (Count - 1); j >= i; j--) - { - ObjDesc1 = Elements[j-1]->Package.Elements[Index]; - ObjDesc2 = Elements[j]->Package.Elements[Index]; - - if (((SortDirection == ACPI_SORT_ASCENDING) && - (ObjDesc1->Integer.Value > ObjDesc2->Integer.Value)) || - - ((SortDirection == ACPI_SORT_DESCENDING) && - (ObjDesc1->Integer.Value < ObjDesc2->Integer.Value))) - { - TempObj = Elements[j-1]; - Elements[j-1] = Elements[j]; - Elements[j] = TempObj; - } - } - } - - return (AE_OK); -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nssearch.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nssearch.c deleted file mode 100644 index fce7c5ad4..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nssearch.c +++ /dev/null @@ -1,507 +0,0 @@ -/******************************************************************************* - * - * Module Name: nssearch - Namespace search - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __NSSEARCH_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" - -#ifdef ACPI_ASL_COMPILER -#include "amlcode.h" -#endif - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nssearch") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiNsSearchParentTree ( - UINT32 TargetName, - ACPI_NAMESPACE_NODE *Node, - ACPI_OBJECT_TYPE Type, - ACPI_NAMESPACE_NODE **ReturnNode); - - -/******************************************************************************* - * - * FUNCTION: AcpiNsSearchOneScope - * - * PARAMETERS: TargetName - Ascii ACPI name to search for - * ParentNode - Starting node where search will begin - * Type - Object type to match - * ReturnNode - Where the matched Named obj is returned - * - * RETURN: Status - * - * DESCRIPTION: Search a single level of the namespace. Performs a - * simple search of the specified level, and does not add - * entries or search parents. - * - * - * Named object lists are built (and subsequently dumped) in the - * order in which the names are encountered during the namespace load; - * - * All namespace searching is linear in this implementation, but - * could be easily modified to support any improved search - * algorithm. However, the linear search was chosen for simplicity - * and because the trees are small and the other interpreter - * execution overhead is relatively high. - * - * Note: CPU execution analysis has shown that the AML interpreter spends - * a very small percentage of its time searching the namespace. Therefore, - * the linear search seems to be sufficient, as there would seem to be - * little value in improving the search. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsSearchOneScope ( - UINT32 TargetName, - ACPI_NAMESPACE_NODE *ParentNode, - ACPI_OBJECT_TYPE Type, - ACPI_NAMESPACE_NODE **ReturnNode) -{ - ACPI_NAMESPACE_NODE *Node; - - - ACPI_FUNCTION_TRACE (NsSearchOneScope); - - -#ifdef ACPI_DEBUG_OUTPUT - if (ACPI_LV_NAMES & AcpiDbgLevel) - { - char *ScopeName; - - ScopeName = AcpiNsGetExternalPathname (ParentNode); - if (ScopeName) - { - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Searching %s (%p) For [%4.4s] (%s)\n", - ScopeName, ParentNode, ACPI_CAST_PTR (char, &TargetName), - AcpiUtGetTypeName (Type))); - - ACPI_FREE (ScopeName); - } - } -#endif - - /* - * Search for name at this namespace level, which is to say that we - * must search for the name among the children of this object - */ - Node = ParentNode->Child; - while (Node) - { - /* Check for match against the name */ - - if (Node->Name.Integer == TargetName) - { - /* Resolve a control method alias if any */ - - if (AcpiNsGetType (Node) == ACPI_TYPE_LOCAL_METHOD_ALIAS) - { - Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Node->Object); - } - - /* Found matching entry */ - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Name [%4.4s] (%s) %p found in scope [%4.4s] %p\n", - ACPI_CAST_PTR (char, &TargetName), - AcpiUtGetTypeName (Node->Type), - Node, AcpiUtGetNodeName (ParentNode), ParentNode)); - - *ReturnNode = Node; - return_ACPI_STATUS (AE_OK); - } - - /* - * The last entry in the list points back to the parent, - * so a flag is used to indicate the end-of-list - */ - if (Node->Flags & ANOBJ_END_OF_PEER_LIST) - { - /* Searched entire list, we are done */ - - break; - } - - /* Didn't match name, move on to the next peer object */ - - Node = Node->Peer; - } - - /* Searched entire namespace level, not found */ - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Name [%4.4s] (%s) not found in search in scope [%4.4s] " - "%p first child %p\n", - ACPI_CAST_PTR (char, &TargetName), AcpiUtGetTypeName (Type), - AcpiUtGetNodeName (ParentNode), ParentNode, ParentNode->Child)); - - return_ACPI_STATUS (AE_NOT_FOUND); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsSearchParentTree - * - * PARAMETERS: TargetName - Ascii ACPI name to search for - * Node - Starting node where search will begin - * Type - Object type to match - * ReturnNode - Where the matched Node is returned - * - * RETURN: Status - * - * DESCRIPTION: Called when a name has not been found in the current namespace - * level. Before adding it or giving up, ACPI scope rules require - * searching enclosing scopes in cases identified by AcpiNsLocal(). - * - * "A name is located by finding the matching name in the current - * name space, and then in the parent name space. If the parent - * name space does not contain the name, the search continues - * recursively until either the name is found or the name space - * does not have a parent (the root of the name space). This - * indicates that the name is not found" (From ACPI Specification, - * section 5.3) - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsSearchParentTree ( - UINT32 TargetName, - ACPI_NAMESPACE_NODE *Node, - ACPI_OBJECT_TYPE Type, - ACPI_NAMESPACE_NODE **ReturnNode) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *ParentNode; - - - ACPI_FUNCTION_TRACE (NsSearchParentTree); - - - ParentNode = AcpiNsGetParentNode (Node); - - /* - * If there is no parent (i.e., we are at the root) or type is "local", - * we won't be searching the parent tree. - */ - if (!ParentNode) - { - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[%4.4s] has no parent\n", - ACPI_CAST_PTR (char, &TargetName))); - return_ACPI_STATUS (AE_NOT_FOUND); - } - - if (AcpiNsLocal (Type)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "[%4.4s] type [%s] must be local to this scope (no parent search)\n", - ACPI_CAST_PTR (char, &TargetName), AcpiUtGetTypeName (Type))); - return_ACPI_STATUS (AE_NOT_FOUND); - } - - /* Search the parent tree */ - - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Searching parent [%4.4s] for [%4.4s]\n", - AcpiUtGetNodeName (ParentNode), ACPI_CAST_PTR (char, &TargetName))); - - /* Search parents until target is found or we have backed up to the root */ - - while (ParentNode) - { - /* - * Search parent scope. Use TYPE_ANY because we don't care about the - * object type at this point, we only care about the existence of - * the actual name we are searching for. Typechecking comes later. - */ - Status = AcpiNsSearchOneScope ( - TargetName, ParentNode, ACPI_TYPE_ANY, ReturnNode); - if (ACPI_SUCCESS (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Not found here, go up another level (until we reach the root) */ - - ParentNode = AcpiNsGetParentNode (ParentNode); - } - - /* Not found in parent tree */ - - return_ACPI_STATUS (AE_NOT_FOUND); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsSearchAndEnter - * - * PARAMETERS: TargetName - Ascii ACPI name to search for (4 chars) - * WalkState - Current state of the walk - * Node - Starting node where search will begin - * InterpreterMode - Add names only in ACPI_MODE_LOAD_PASS_x. - * Otherwise,search only. - * Type - Object type to match - * Flags - Flags describing the search restrictions - * ReturnNode - Where the Node is returned - * - * RETURN: Status - * - * DESCRIPTION: Search for a name segment in a single namespace level, - * optionally adding it if it is not found. If the passed - * Type is not Any and the type previously stored in the - * entry was Any (i.e. unknown), update the stored type. - * - * In ACPI_IMODE_EXECUTE, search only. - * In other modes, search and add if not found. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsSearchAndEnter ( - UINT32 TargetName, - ACPI_WALK_STATE *WalkState, - ACPI_NAMESPACE_NODE *Node, - ACPI_INTERPRETER_MODE InterpreterMode, - ACPI_OBJECT_TYPE Type, - UINT32 Flags, - ACPI_NAMESPACE_NODE **ReturnNode) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *NewNode; - - - ACPI_FUNCTION_TRACE (NsSearchAndEnter); - - - /* Parameter validation */ - - if (!Node || !TargetName || !ReturnNode) - { - ACPI_ERROR ((AE_INFO, - "Null parameter: Node %p Name %X ReturnNode %p", - Node, TargetName, ReturnNode)); - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* - * Name must consist of valid ACPI characters. We will repair the name if - * necessary because we don't want to abort because of this, but we want - * all namespace names to be printable. A warning message is appropriate. - * - * This issue came up because there are in fact machines that exhibit - * this problem, and we want to be able to enable ACPI support for them, - * even though there are a few bad names. - */ - AcpiUtRepairName (ACPI_CAST_PTR (char, &TargetName)); - - /* Try to find the name in the namespace level specified by the caller */ - - *ReturnNode = ACPI_ENTRY_NOT_FOUND; - Status = AcpiNsSearchOneScope (TargetName, Node, Type, ReturnNode); - if (Status != AE_NOT_FOUND) - { - /* - * If we found it AND the request specifies that a find is an error, - * return the error - */ - if ((Status == AE_OK) && - (Flags & ACPI_NS_ERROR_IF_FOUND)) - { - Status = AE_ALREADY_EXISTS; - } - -#ifdef ACPI_ASL_COMPILER - if (*ReturnNode && (*ReturnNode)->Type == ACPI_TYPE_ANY) - { - (*ReturnNode)->Flags |= ANOBJ_IS_EXTERNAL; - } -#endif - - /* Either found it or there was an error: finished either way */ - - return_ACPI_STATUS (Status); - } - - /* - * The name was not found. If we are NOT performing the first pass - * (name entry) of loading the namespace, search the parent tree (all the - * way to the root if necessary.) We don't want to perform the parent - * search when the namespace is actually being loaded. We want to perform - * the search when namespace references are being resolved (load pass 2) - * and during the execution phase. - */ - if ((InterpreterMode != ACPI_IMODE_LOAD_PASS1) && - (Flags & ACPI_NS_SEARCH_PARENT)) - { - /* - * Not found at this level - search parent tree according to the - * ACPI specification - */ - Status = AcpiNsSearchParentTree (TargetName, Node, Type, ReturnNode); - if (ACPI_SUCCESS (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* In execute mode, just search, never add names. Exit now */ - - if (InterpreterMode == ACPI_IMODE_EXECUTE) - { - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "%4.4s Not found in %p [Not adding]\n", - ACPI_CAST_PTR (char, &TargetName), Node)); - - return_ACPI_STATUS (AE_NOT_FOUND); - } - - /* Create the new named object */ - - NewNode = AcpiNsCreateNode (TargetName); - if (!NewNode) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - -#ifdef ACPI_ASL_COMPILER - - /* Node is an object defined by an External() statement */ - - if (Flags & ACPI_NS_EXTERNAL || - (WalkState && WalkState->Opcode == AML_SCOPE_OP)) - { - NewNode->Flags |= ANOBJ_IS_EXTERNAL; - } -#endif - - if (Flags & ACPI_NS_TEMPORARY) - { - NewNode->Flags |= ANOBJ_TEMPORARY; - } - - /* Install the new object into the parent's list of children */ - - AcpiNsInstallNode (WalkState, Node, NewNode, Type); - *ReturnNode = NewNode; - return_ACPI_STATUS (AE_OK); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsutils.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsutils.c deleted file mode 100644 index ed0c3f7ec..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsutils.c +++ /dev/null @@ -1,1184 +0,0 @@ -/****************************************************************************** - * - * Module Name: nsutils - Utilities for accessing ACPI namespace, accessing - * parents and siblings and Scope manipulation - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __NSUTILS_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "amlcode.h" - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsutils") - -/* Local prototypes */ - -static BOOLEAN -AcpiNsValidPathSeparator ( - char Sep); - -#ifdef ACPI_OBSOLETE_FUNCTIONS -ACPI_NAME -AcpiNsFindParentName ( - ACPI_NAMESPACE_NODE *NodeToSearch); -#endif - - -/******************************************************************************* - * - * FUNCTION: AcpiNsReportError - * - * PARAMETERS: ModuleName - Caller's module name (for error output) - * LineNumber - Caller's line number (for error output) - * InternalName - Name or path of the namespace node - * LookupStatus - Exception code from NS lookup - * - * RETURN: None - * - * DESCRIPTION: Print warning message with full pathname - * - ******************************************************************************/ - -void -AcpiNsReportError ( - const char *ModuleName, - UINT32 LineNumber, - const char *InternalName, - ACPI_STATUS LookupStatus) -{ - ACPI_STATUS Status; - UINT32 BadName; - char *Name = NULL; - - - AcpiOsPrintf ("ACPI Error (%s-%04d): ", ModuleName, LineNumber); - - if (LookupStatus == AE_BAD_CHARACTER) - { - /* There is a non-ascii character in the name */ - - ACPI_MOVE_32_TO_32 (&BadName, ACPI_CAST_PTR (UINT32, InternalName)); - AcpiOsPrintf ("[0x%4.4X] (NON-ASCII)", BadName); - } - else - { - /* Convert path to external format */ - - Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, - InternalName, NULL, &Name); - - /* Print target name */ - - if (ACPI_SUCCESS (Status)) - { - AcpiOsPrintf ("[%s]", Name); - } - else - { - AcpiOsPrintf ("[COULD NOT EXTERNALIZE NAME]"); - } - - if (Name) - { - ACPI_FREE (Name); - } - } - - AcpiOsPrintf (" Namespace lookup failure, %s\n", - AcpiFormatException (LookupStatus)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsReportMethodError - * - * PARAMETERS: ModuleName - Caller's module name (for error output) - * LineNumber - Caller's line number (for error output) - * Message - Error message to use on failure - * PrefixNode - Prefix relative to the path - * Path - Path to the node (optional) - * MethodStatus - Execution status - * - * RETURN: None - * - * DESCRIPTION: Print warning message with full pathname - * - ******************************************************************************/ - -void -AcpiNsReportMethodError ( - const char *ModuleName, - UINT32 LineNumber, - const char *Message, - ACPI_NAMESPACE_NODE *PrefixNode, - const char *Path, - ACPI_STATUS MethodStatus) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node = PrefixNode; - - - AcpiOsPrintf ("ACPI Error (%s-%04d): ", ModuleName, LineNumber); - - if (Path) - { - Status = AcpiNsGetNode (PrefixNode, Path, ACPI_NS_NO_UPSEARCH, - &Node); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("[Could not get node by pathname]"); - } - } - - AcpiNsPrintNodePathname (Node, Message); - AcpiOsPrintf (", %s\n", AcpiFormatException (MethodStatus)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsPrintNodePathname - * - * PARAMETERS: Node - Object - * Message - Prefix message - * - * DESCRIPTION: Print an object's full namespace pathname - * Manages allocation/freeing of a pathname buffer - * - ******************************************************************************/ - -void -AcpiNsPrintNodePathname ( - ACPI_NAMESPACE_NODE *Node, - const char *Message) -{ - ACPI_BUFFER Buffer; - ACPI_STATUS Status; - - - if (!Node) - { - AcpiOsPrintf ("[NULL NAME]"); - return; - } - - /* Convert handle to full pathname and print it (with supplied message) */ - - Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - - Status = AcpiNsHandleToPathname (Node, &Buffer); - if (ACPI_SUCCESS (Status)) - { - if (Message) - { - AcpiOsPrintf ("%s ", Message); - } - - AcpiOsPrintf ("[%s] (Node %p)", (char *) Buffer.Pointer, Node); - ACPI_FREE (Buffer.Pointer); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsValidRootPrefix - * - * PARAMETERS: Prefix - Character to be checked - * - * RETURN: TRUE if a valid prefix - * - * DESCRIPTION: Check if a character is a valid ACPI Root prefix - * - ******************************************************************************/ - -BOOLEAN -AcpiNsValidRootPrefix ( - char Prefix) -{ - - return ((BOOLEAN) (Prefix == '\\')); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsValidPathSeparator - * - * PARAMETERS: Sep - Character to be checked - * - * RETURN: TRUE if a valid path separator - * - * DESCRIPTION: Check if a character is a valid ACPI path separator - * - ******************************************************************************/ - -static BOOLEAN -AcpiNsValidPathSeparator ( - char Sep) -{ - - return ((BOOLEAN) (Sep == '.')); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsGetType - * - * PARAMETERS: Node - Parent Node to be examined - * - * RETURN: Type field from Node whose handle is passed - * - * DESCRIPTION: Return the type of a Namespace node - * - ******************************************************************************/ - -ACPI_OBJECT_TYPE -AcpiNsGetType ( - ACPI_NAMESPACE_NODE *Node) -{ - ACPI_FUNCTION_TRACE (NsGetType); - - - if (!Node) - { - ACPI_WARNING ((AE_INFO, "Null Node parameter")); - return_UINT32 (ACPI_TYPE_ANY); - } - - return_UINT32 ((ACPI_OBJECT_TYPE) Node->Type); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsLocal - * - * PARAMETERS: Type - A namespace object type - * - * RETURN: LOCAL if names must be found locally in objects of the - * passed type, 0 if enclosing scopes should be searched - * - * DESCRIPTION: Returns scope rule for the given object type. - * - ******************************************************************************/ - -UINT32 -AcpiNsLocal ( - ACPI_OBJECT_TYPE Type) -{ - ACPI_FUNCTION_TRACE (NsLocal); - - - if (!AcpiUtValidObjectType (Type)) - { - /* Type code out of range */ - - ACPI_WARNING ((AE_INFO, "Invalid Object Type %X", Type)); - return_UINT32 (ACPI_NS_NORMAL); - } - - return_UINT32 ((UINT32) AcpiGbl_NsProperties[Type] & ACPI_NS_LOCAL); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsGetInternalNameLength - * - * PARAMETERS: Info - Info struct initialized with the - * external name pointer. - * - * RETURN: None - * - * DESCRIPTION: Calculate the length of the internal (AML) namestring - * corresponding to the external (ASL) namestring. - * - ******************************************************************************/ - -void -AcpiNsGetInternalNameLength ( - ACPI_NAMESTRING_INFO *Info) -{ - const char *NextExternalChar; - UINT32 i; - - - ACPI_FUNCTION_ENTRY (); - - - NextExternalChar = Info->ExternalName; - Info->NumCarats = 0; - Info->NumSegments = 0; - Info->FullyQualified = FALSE; - - /* - * For the internal name, the required length is 4 bytes per segment, plus - * 1 each for RootPrefix, MultiNamePrefixOp, segment count, trailing null - * (which is not really needed, but no there's harm in putting it there) - * - * strlen() + 1 covers the first NameSeg, which has no path separator - */ - if (AcpiNsValidRootPrefix (*NextExternalChar)) - { - Info->FullyQualified = TRUE; - NextExternalChar++; - - /* Skip redundant RootPrefix, like \\_SB.PCI0.SBRG.EC0 */ - - while (AcpiNsValidRootPrefix (*NextExternalChar)) - { - NextExternalChar++; - } - } - else - { - /* Handle Carat prefixes */ - - while (*NextExternalChar == '^') - { - Info->NumCarats++; - NextExternalChar++; - } - } - - /* - * Determine the number of ACPI name "segments" by counting the number of - * path separators within the string. Start with one segment since the - * segment count is [(# separators) + 1], and zero separators is ok. - */ - if (*NextExternalChar) - { - Info->NumSegments = 1; - for (i = 0; NextExternalChar[i]; i++) - { - if (AcpiNsValidPathSeparator (NextExternalChar[i])) - { - Info->NumSegments++; - } - } - } - - Info->Length = (ACPI_NAME_SIZE * Info->NumSegments) + - 4 + Info->NumCarats; - - Info->NextExternalChar = NextExternalChar; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsBuildInternalName - * - * PARAMETERS: Info - Info struct fully initialized - * - * RETURN: Status - * - * DESCRIPTION: Construct the internal (AML) namestring - * corresponding to the external (ASL) namestring. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsBuildInternalName ( - ACPI_NAMESTRING_INFO *Info) -{ - UINT32 NumSegments = Info->NumSegments; - char *InternalName = Info->InternalName; - const char *ExternalName = Info->NextExternalChar; - char *Result = NULL; - UINT32 i; - - - ACPI_FUNCTION_TRACE (NsBuildInternalName); - - - /* Setup the correct prefixes, counts, and pointers */ - - if (Info->FullyQualified) - { - InternalName[0] = '\\'; - - if (NumSegments <= 1) - { - Result = &InternalName[1]; - } - else if (NumSegments == 2) - { - InternalName[1] = AML_DUAL_NAME_PREFIX; - Result = &InternalName[2]; - } - else - { - InternalName[1] = AML_MULTI_NAME_PREFIX_OP; - InternalName[2] = (char) NumSegments; - Result = &InternalName[3]; - } - } - else - { - /* - * Not fully qualified. - * Handle Carats first, then append the name segments - */ - i = 0; - if (Info->NumCarats) - { - for (i = 0; i < Info->NumCarats; i++) - { - InternalName[i] = '^'; - } - } - - if (NumSegments <= 1) - { - Result = &InternalName[i]; - } - else if (NumSegments == 2) - { - InternalName[i] = AML_DUAL_NAME_PREFIX; - Result = &InternalName[(ACPI_SIZE) i+1]; - } - else - { - InternalName[i] = AML_MULTI_NAME_PREFIX_OP; - InternalName[(ACPI_SIZE) i+1] = (char) NumSegments; - Result = &InternalName[(ACPI_SIZE) i+2]; - } - } - - /* Build the name (minus path separators) */ - - for (; NumSegments; NumSegments--) - { - for (i = 0; i < ACPI_NAME_SIZE; i++) - { - if (AcpiNsValidPathSeparator (*ExternalName) || - (*ExternalName == 0)) - { - /* Pad the segment with underscore(s) if segment is short */ - - Result[i] = '_'; - } - else - { - /* Convert the character to uppercase and save it */ - - Result[i] = (char) ACPI_TOUPPER ((int) *ExternalName); - ExternalName++; - } - } - - /* Now we must have a path separator, or the pathname is bad */ - - if (!AcpiNsValidPathSeparator (*ExternalName) && - (*ExternalName != 0)) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Move on the next segment */ - - ExternalName++; - Result += ACPI_NAME_SIZE; - } - - /* Terminate the string */ - - *Result = 0; - - if (Info->FullyQualified) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Returning [%p] (abs) \"\\%s\"\n", - InternalName, InternalName)); - } - else - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Returning [%p] (rel) \"%s\"\n", - InternalName, InternalName)); - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsInternalizeName - * - * PARAMETERS: *ExternalName - External representation of name - * **Converted Name - Where to return the resulting - * internal represention of the name - * - * RETURN: Status - * - * DESCRIPTION: Convert an external representation (e.g. "\_PR_.CPU0") - * to internal form (e.g. 5c 2f 02 5f 50 52 5f 43 50 55 30) - * - *******************************************************************************/ - -ACPI_STATUS -AcpiNsInternalizeName ( - const char *ExternalName, - char **ConvertedName) -{ - char *InternalName; - ACPI_NAMESTRING_INFO Info; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (NsInternalizeName); - - - if ((!ExternalName) || - (*ExternalName == 0) || - (!ConvertedName)) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Get the length of the new internal name */ - - Info.ExternalName = ExternalName; - AcpiNsGetInternalNameLength (&Info); - - /* We need a segment to store the internal name */ - - InternalName = ACPI_ALLOCATE_ZEROED (Info.Length); - if (!InternalName) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Build the name */ - - Info.InternalName = InternalName; - Status = AcpiNsBuildInternalName (&Info); - if (ACPI_FAILURE (Status)) - { - ACPI_FREE (InternalName); - return_ACPI_STATUS (Status); - } - - *ConvertedName = InternalName; - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsExternalizeName - * - * PARAMETERS: InternalNameLength - Lenth of the internal name below - * InternalName - Internal representation of name - * ConvertedNameLength - Where the length is returned - * ConvertedName - Where the resulting external name - * is returned - * - * RETURN: Status - * - * DESCRIPTION: Convert internal name (e.g. 5c 2f 02 5f 50 52 5f 43 50 55 30) - * to its external (printable) form (e.g. "\_PR_.CPU0") - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsExternalizeName ( - UINT32 InternalNameLength, - const char *InternalName, - UINT32 *ConvertedNameLength, - char **ConvertedName) -{ - UINT32 NamesIndex = 0; - UINT32 NumSegments = 0; - UINT32 RequiredLength; - UINT32 PrefixLength = 0; - UINT32 i = 0; - UINT32 j = 0; - - - ACPI_FUNCTION_TRACE (NsExternalizeName); - - - if (!InternalNameLength || - !InternalName || - !ConvertedName) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Check for a prefix (one '\' | one or more '^') */ - - switch (InternalName[0]) - { - case '\\': - PrefixLength = 1; - break; - - case '^': - for (i = 0; i < InternalNameLength; i++) - { - if (InternalName[i] == '^') - { - PrefixLength = i + 1; - } - else - { - break; - } - } - - if (i == InternalNameLength) - { - PrefixLength = i; - } - - break; - - default: - break; - } - - /* - * Check for object names. Note that there could be 0-255 of these - * 4-byte elements. - */ - if (PrefixLength < InternalNameLength) - { - switch (InternalName[PrefixLength]) - { - case AML_MULTI_NAME_PREFIX_OP: - - /* 4-byte names */ - - NamesIndex = PrefixLength + 2; - NumSegments = (UINT8) - InternalName[(ACPI_SIZE) PrefixLength + 1]; - break; - - case AML_DUAL_NAME_PREFIX: - - /* Two 4-byte names */ - - NamesIndex = PrefixLength + 1; - NumSegments = 2; - break; - - case 0: - - /* NullName */ - - NamesIndex = 0; - NumSegments = 0; - break; - - default: - - /* one 4-byte name */ - - NamesIndex = PrefixLength; - NumSegments = 1; - break; - } - } - - /* - * Calculate the length of ConvertedName, which equals the length - * of the prefix, length of all object names, length of any required - * punctuation ('.') between object names, plus the NULL terminator. - */ - RequiredLength = PrefixLength + (4 * NumSegments) + - ((NumSegments > 0) ? (NumSegments - 1) : 0) + 1; - - /* - * Check to see if we're still in bounds. If not, there's a problem - * with InternalName (invalid format). - */ - if (RequiredLength > InternalNameLength) - { - ACPI_ERROR ((AE_INFO, "Invalid internal name")); - return_ACPI_STATUS (AE_BAD_PATHNAME); - } - - /* Build the ConvertedName */ - - *ConvertedName = ACPI_ALLOCATE_ZEROED (RequiredLength); - if (!(*ConvertedName)) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - j = 0; - - for (i = 0; i < PrefixLength; i++) - { - (*ConvertedName)[j++] = InternalName[i]; - } - - if (NumSegments > 0) - { - for (i = 0; i < NumSegments; i++) - { - if (i > 0) - { - (*ConvertedName)[j++] = '.'; - } - - (*ConvertedName)[j++] = InternalName[NamesIndex++]; - (*ConvertedName)[j++] = InternalName[NamesIndex++]; - (*ConvertedName)[j++] = InternalName[NamesIndex++]; - (*ConvertedName)[j++] = InternalName[NamesIndex++]; - } - } - - if (ConvertedNameLength) - { - *ConvertedNameLength = (UINT32) RequiredLength; - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsValidateHandle - * - * PARAMETERS: Handle - Handle to be validated and typecast to a - * namespace node. - * - * RETURN: A pointer to a namespace node - * - * DESCRIPTION: Convert a namespace handle to a namespace node. Handles special - * cases for the root node. - * - * NOTE: Real integer handles would allow for more verification - * and keep all pointers within this subsystem - however this introduces - * more overhead and has not been necessary to this point. Drivers - * holding handles are typically notified before a node becomes invalid - * due to a table unload. - * - ******************************************************************************/ - -ACPI_NAMESPACE_NODE * -AcpiNsValidateHandle ( - ACPI_HANDLE Handle) -{ - - ACPI_FUNCTION_ENTRY (); - - - /* Parameter validation */ - - if ((!Handle) || (Handle == ACPI_ROOT_OBJECT)) - { - return (AcpiGbl_RootNode); - } - - /* We can at least attempt to verify the handle */ - - if (ACPI_GET_DESCRIPTOR_TYPE (Handle) != ACPI_DESC_TYPE_NAMED) - { - return (NULL); - } - - return (ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Handle)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsTerminate - * - * PARAMETERS: none - * - * RETURN: none - * - * DESCRIPTION: free memory allocated for namespace and ACPI table storage. - * - ******************************************************************************/ - -void -AcpiNsTerminate ( - void) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - - - ACPI_FUNCTION_TRACE (NsTerminate); - - - /* - * 1) Free the entire namespace -- all nodes and objects - * - * Delete all object descriptors attached to namepsace nodes - */ - AcpiNsDeleteNamespaceSubtree (AcpiGbl_RootNode); - - /* Detach any objects attached to the root */ - - ObjDesc = AcpiNsGetAttachedObject (AcpiGbl_RootNode); - if (ObjDesc) - { - AcpiNsDetachObject (AcpiGbl_RootNode); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Namespace freed\n")); - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsOpensScope - * - * PARAMETERS: Type - A valid namespace type - * - * RETURN: NEWSCOPE if the passed type "opens a name scope" according - * to the ACPI specification, else 0 - * - ******************************************************************************/ - -UINT32 -AcpiNsOpensScope ( - ACPI_OBJECT_TYPE Type) -{ - ACPI_FUNCTION_TRACE_STR (NsOpensScope, AcpiUtGetTypeName (Type)); - - - if (!AcpiUtValidObjectType (Type)) - { - /* type code out of range */ - - ACPI_WARNING ((AE_INFO, "Invalid Object Type %X", Type)); - return_UINT32 (ACPI_NS_NORMAL); - } - - return_UINT32 (((UINT32) AcpiGbl_NsProperties[Type]) & ACPI_NS_NEWSCOPE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsGetNode - * - * PARAMETERS: *Pathname - Name to be found, in external (ASL) format. The - * \ (backslash) and ^ (carat) prefixes, and the - * . (period) to separate segments are supported. - * PrefixNode - Root of subtree to be searched, or NS_ALL for the - * root of the name space. If Name is fully - * qualified (first INT8 is '\'), the passed value - * of Scope will not be accessed. - * Flags - Used to indicate whether to perform upsearch or - * not. - * ReturnNode - Where the Node is returned - * - * DESCRIPTION: Look up a name relative to a given scope and return the - * corresponding Node. NOTE: Scope can be null. - * - * MUTEX: Locks namespace - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsGetNode ( - ACPI_NAMESPACE_NODE *PrefixNode, - const char *Pathname, - UINT32 Flags, - ACPI_NAMESPACE_NODE **ReturnNode) -{ - ACPI_GENERIC_STATE ScopeInfo; - ACPI_STATUS Status; - char *InternalPath; - - - ACPI_FUNCTION_TRACE_PTR (NsGetNode, ACPI_CAST_PTR (char, Pathname)); - - - if (!Pathname) - { - *ReturnNode = PrefixNode; - if (!PrefixNode) - { - *ReturnNode = AcpiGbl_RootNode; - } - return_ACPI_STATUS (AE_OK); - } - - /* Convert path to internal representation */ - - Status = AcpiNsInternalizeName (Pathname, &InternalPath); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Must lock namespace during lookup */ - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - /* Setup lookup scope (search starting point) */ - - ScopeInfo.Scope.Node = PrefixNode; - - /* Lookup the name in the namespace */ - - Status = AcpiNsLookup (&ScopeInfo, InternalPath, ACPI_TYPE_ANY, - ACPI_IMODE_EXECUTE, (Flags | ACPI_NS_DONT_OPEN_SCOPE), - NULL, ReturnNode); - if (ACPI_FAILURE (Status)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%s, %s\n", - Pathname, AcpiFormatException (Status))); - } - - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - -Cleanup: - ACPI_FREE (InternalPath); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsGetParentNode - * - * PARAMETERS: Node - Current table entry - * - * RETURN: Parent entry of the given entry - * - * DESCRIPTION: Obtain the parent entry for a given entry in the namespace. - * - ******************************************************************************/ - -ACPI_NAMESPACE_NODE * -AcpiNsGetParentNode ( - ACPI_NAMESPACE_NODE *Node) -{ - ACPI_FUNCTION_ENTRY (); - - - if (!Node) - { - return (NULL); - } - - /* - * Walk to the end of this peer list. The last entry is marked with a flag - * and the peer pointer is really a pointer back to the parent. This saves - * putting a parent back pointer in each and every named object! - */ - while (!(Node->Flags & ANOBJ_END_OF_PEER_LIST)) - { - Node = Node->Peer; - } - - return (Node->Peer); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsGetNextValidNode - * - * PARAMETERS: Node - Current table entry - * - * RETURN: Next valid Node in the linked node list. NULL if no more valid - * nodes. - * - * DESCRIPTION: Find the next valid node within a name table. - * Useful for implementing NULL-end-of-list loops. - * - ******************************************************************************/ - -ACPI_NAMESPACE_NODE * -AcpiNsGetNextValidNode ( - ACPI_NAMESPACE_NODE *Node) -{ - - /* If we are at the end of this peer list, return NULL */ - - if (Node->Flags & ANOBJ_END_OF_PEER_LIST) - { - return NULL; - } - - /* Otherwise just return the next peer */ - - return (Node->Peer); -} - - -#ifdef ACPI_OBSOLETE_FUNCTIONS -/******************************************************************************* - * - * FUNCTION: AcpiNsFindParentName - * - * PARAMETERS: *ChildNode - Named Obj whose name is to be found - * - * RETURN: The ACPI name - * - * DESCRIPTION: Search for the given obj in its parent scope and return the - * name segment, or "????" if the parent name can't be found - * (which "should not happen"). - * - ******************************************************************************/ - -ACPI_NAME -AcpiNsFindParentName ( - ACPI_NAMESPACE_NODE *ChildNode) -{ - ACPI_NAMESPACE_NODE *ParentNode; - - - ACPI_FUNCTION_TRACE (NsFindParentName); - - - if (ChildNode) - { - /* Valid entry. Get the parent Node */ - - ParentNode = AcpiNsGetParentNode (ChildNode); - if (ParentNode) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Parent of %p [%4.4s] is %p [%4.4s]\n", - ChildNode, AcpiUtGetNodeName (ChildNode), - ParentNode, AcpiUtGetNodeName (ParentNode))); - - if (ParentNode->Name.Integer) - { - return_VALUE ((ACPI_NAME) ParentNode->Name.Integer); - } - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Unable to find parent of %p (%4.4s)\n", - ChildNode, AcpiUtGetNodeName (ChildNode))); - } - - return_VALUE (ACPI_UNKNOWN_NAME); -} -#endif - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nswalk.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nswalk.c deleted file mode 100644 index 7711e9a37..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nswalk.c +++ /dev/null @@ -1,468 +0,0 @@ -/****************************************************************************** - * - * Module Name: nswalk - Functions for walking the ACPI namespace - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __NSWALK_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nswalk") - - -/******************************************************************************* - * - * FUNCTION: AcpiNsGetNextNode - * - * PARAMETERS: ParentNode - Parent node whose children we are - * getting - * ChildNode - Previous child that was found. - * The NEXT child will be returned - * - * RETURN: ACPI_NAMESPACE_NODE - Pointer to the NEXT child or NULL if - * none is found. - * - * DESCRIPTION: Return the next peer node within the namespace. If Handle - * is valid, Scope is ignored. Otherwise, the first node - * within Scope is returned. - * - ******************************************************************************/ - -ACPI_NAMESPACE_NODE * -AcpiNsGetNextNode ( - ACPI_NAMESPACE_NODE *ParentNode, - ACPI_NAMESPACE_NODE *ChildNode) -{ - ACPI_FUNCTION_ENTRY (); - - - if (!ChildNode) - { - /* It's really the parent's _scope_ that we want */ - - return (ParentNode->Child); - } - - /* - * Get the next node. - * - * If we are at the end of this peer list, return NULL - */ - if (ChildNode->Flags & ANOBJ_END_OF_PEER_LIST) - { - return NULL; - } - - /* Otherwise just return the next peer */ - - return (ChildNode->Peer); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsGetNextNodeTyped - * - * PARAMETERS: Type - Type of node to be searched for - * ParentNode - Parent node whose children we are - * getting - * ChildNode - Previous child that was found. - * The NEXT child will be returned - * - * RETURN: ACPI_NAMESPACE_NODE - Pointer to the NEXT child or NULL if - * none is found. - * - * DESCRIPTION: Return the next peer node within the namespace. If Handle - * is valid, Scope is ignored. Otherwise, the first node - * within Scope is returned. - * - ******************************************************************************/ - -ACPI_NAMESPACE_NODE * -AcpiNsGetNextNodeTyped ( - ACPI_OBJECT_TYPE Type, - ACPI_NAMESPACE_NODE *ParentNode, - ACPI_NAMESPACE_NODE *ChildNode) -{ - ACPI_NAMESPACE_NODE *NextNode = NULL; - - - ACPI_FUNCTION_ENTRY (); - - - NextNode = AcpiNsGetNextNode (ParentNode, ChildNode); - - /* If any type is OK, we are done */ - - if (Type == ACPI_TYPE_ANY) - { - /* NextNode is NULL if we are at the end-of-list */ - - return (NextNode); - } - - /* Must search for the node -- but within this scope only */ - - while (NextNode) - { - /* If type matches, we are done */ - - if (NextNode->Type == Type) - { - return (NextNode); - } - - /* Otherwise, move on to the next node */ - - NextNode = AcpiNsGetNextValidNode (NextNode); - } - - /* Not found */ - - return (NULL); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsWalkNamespace - * - * PARAMETERS: Type - ACPI_OBJECT_TYPE to search for - * StartNode - Handle in namespace where search begins - * MaxDepth - Depth to which search is to reach - * Flags - Whether to unlock the NS before invoking - * the callback routine - * PreOrderVisit - Called during tree pre-order visit - * when an object of "Type" is found - * PostOrderVisit - Called during tree post-order visit - * when an object of "Type" is found - * Context - Passed to user function(s) above - * ReturnValue - from the UserFunction if terminated - * early. Otherwise, returns NULL. - * RETURNS: Status - * - * DESCRIPTION: Performs a modified depth-first walk of the namespace tree, - * starting (and ending) at the node specified by StartHandle. - * The callback function is called whenever a node that matches - * the type parameter is found. If the callback function returns - * a non-zero value, the search is terminated immediately and - * this value is returned to the caller. - * - * The point of this procedure is to provide a generic namespace - * walk routine that can be called from multiple places to - * provide multiple services; the callback function(s) can be - * tailored to each task, whether it is a print function, - * a compare function, etc. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiNsWalkNamespace ( - ACPI_OBJECT_TYPE Type, - ACPI_HANDLE StartNode, - UINT32 MaxDepth, - UINT32 Flags, - ACPI_WALK_CALLBACK PreOrderVisit, - ACPI_WALK_CALLBACK PostOrderVisit, - void *Context, - void **ReturnValue) -{ - ACPI_STATUS Status; - ACPI_STATUS MutexStatus; - ACPI_NAMESPACE_NODE *ChildNode; - ACPI_NAMESPACE_NODE *ParentNode; - ACPI_OBJECT_TYPE ChildType; - UINT32 Level; - BOOLEAN NodePreviouslyVisited = FALSE; - - - ACPI_FUNCTION_TRACE (NsWalkNamespace); - - - /* Special case for the namespace Root Node */ - - if (StartNode == ACPI_ROOT_OBJECT) - { - StartNode = AcpiGbl_RootNode; - } - - /* Null child means "get first node" */ - - ParentNode = StartNode; - ChildNode = AcpiNsGetNextNode (ParentNode, NULL); - ChildType = ACPI_TYPE_ANY; - Level = 1; - - /* - * Traverse the tree of nodes until we bubble back up to where we - * started. When Level is zero, the loop is done because we have - * bubbled up to (and passed) the original parent handle (StartEntry) - */ - while (Level > 0 && ChildNode) - { - Status = AE_OK; - - /* Found next child, get the type if we are not searching for ANY */ - - if (Type != ACPI_TYPE_ANY) - { - ChildType = ChildNode->Type; - } - - /* - * Ignore all temporary namespace nodes (created during control - * method execution) unless told otherwise. These temporary nodes - * can cause a race condition because they can be deleted during - * the execution of the user function (if the namespace is - * unlocked before invocation of the user function.) Only the - * debugger namespace dump will examine the temporary nodes. - */ - if ((ChildNode->Flags & ANOBJ_TEMPORARY) && - !(Flags & ACPI_NS_WALK_TEMP_NODES)) - { - Status = AE_CTRL_DEPTH; - } - - /* Type must match requested type */ - - else if (ChildType == Type) - { - /* - * Found a matching node, invoke the user callback function. - * Unlock the namespace if flag is set. - */ - if (Flags & ACPI_NS_WALK_UNLOCK) - { - MutexStatus = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (MutexStatus)) - { - return_ACPI_STATUS (MutexStatus); - } - } - - /* - * Invoke the user function, either pre-order or post-order - * or both. - */ - if (!NodePreviouslyVisited) - { - if (PreOrderVisit) - { - Status = PreOrderVisit (ChildNode, Level, - Context, ReturnValue); - } - } - else - { - if (PostOrderVisit) - { - Status = PostOrderVisit (ChildNode, Level, - Context, ReturnValue); - } - } - - if (Flags & ACPI_NS_WALK_UNLOCK) - { - MutexStatus = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (MutexStatus)) - { - return_ACPI_STATUS (MutexStatus); - } - } - - switch (Status) - { - case AE_OK: - case AE_CTRL_DEPTH: - - /* Just keep going */ - break; - - case AE_CTRL_TERMINATE: - - /* Exit now, with OK status */ - - return_ACPI_STATUS (AE_OK); - - default: - - /* All others are valid exceptions */ - - return_ACPI_STATUS (Status); - } - } - - /* - * Depth first search: Attempt to go down another level in the - * namespace if we are allowed to. Don't go any further if we have - * reached the caller specified maximum depth or if the user - * function has specified that the maximum depth has been reached. - */ - if (!NodePreviouslyVisited && - (Level < MaxDepth) && - (Status != AE_CTRL_DEPTH)) - { - if (ChildNode->Child) - { - /* There is at least one child of this node, visit it */ - - Level++; - ParentNode = ChildNode; - ChildNode = AcpiNsGetNextNode (ParentNode, NULL); - continue; - } - } - - /* No more children, re-visit this node */ - - if (!NodePreviouslyVisited) - { - NodePreviouslyVisited = TRUE; - continue; - } - - /* No more children, visit peers */ - - ChildNode = AcpiNsGetNextNode (ParentNode, ChildNode); - if (ChildNode) - { - NodePreviouslyVisited = FALSE; - } - - /* No peers, re-visit parent */ - - else - { - /* - * No more children of this node (AcpiNsGetNextNode failed), go - * back upwards in the namespace tree to the node's parent. - */ - Level--; - ChildNode = ParentNode; - ParentNode = AcpiNsGetParentNode (ParentNode); - - NodePreviouslyVisited = TRUE; - } - } - - /* Complete walk, not terminated by user function */ - - return_ACPI_STATUS (AE_OK); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsxfeval.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsxfeval.c deleted file mode 100644 index a0f96a04e..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsxfeval.c +++ /dev/null @@ -1,1020 +0,0 @@ -/******************************************************************************* - * - * Module Name: nsxfeval - Public interfaces to the ACPI subsystem - * ACPI Object evaluation interfaces - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __NSXFEVAL_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "acinterp.h" - - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsxfeval") - -/* Local prototypes */ - -static void -AcpiNsResolveReferences ( - ACPI_EVALUATE_INFO *Info); - - -/******************************************************************************* - * - * FUNCTION: AcpiEvaluateObjectTyped - * - * PARAMETERS: Handle - Object handle (optional) - * Pathname - Object pathname (optional) - * ExternalParams - List of parameters to pass to method, - * terminated by NULL. May be NULL - * if no parameters are being passed. - * ReturnBuffer - Where to put method's return value (if - * any). If NULL, no value is returned. - * ReturnType - Expected type of return object - * - * RETURN: Status - * - * DESCRIPTION: Find and evaluate the given object, passing the given - * parameters if necessary. One of "Handle" or "Pathname" must - * be valid (non-null) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvaluateObjectTyped ( - ACPI_HANDLE Handle, - ACPI_STRING Pathname, - ACPI_OBJECT_LIST *ExternalParams, - ACPI_BUFFER *ReturnBuffer, - ACPI_OBJECT_TYPE ReturnType) -{ - ACPI_STATUS Status; - BOOLEAN MustFree = FALSE; - - - ACPI_FUNCTION_TRACE (AcpiEvaluateObjectTyped); - - - /* Return buffer must be valid */ - - if (!ReturnBuffer) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - if (ReturnBuffer->Length == ACPI_ALLOCATE_BUFFER) - { - MustFree = TRUE; - } - - /* Evaluate the object */ - - Status = AcpiEvaluateObject (Handle, Pathname, ExternalParams, ReturnBuffer); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Type ANY means "don't care" */ - - if (ReturnType == ACPI_TYPE_ANY) - { - return_ACPI_STATUS (AE_OK); - } - - if (ReturnBuffer->Length == 0) - { - /* Error because caller specifically asked for a return value */ - - ACPI_ERROR ((AE_INFO, "No return value")); - return_ACPI_STATUS (AE_NULL_OBJECT); - } - - /* Examine the object type returned from EvaluateObject */ - - if (((ACPI_OBJECT *) ReturnBuffer->Pointer)->Type == ReturnType) - { - return_ACPI_STATUS (AE_OK); - } - - /* Return object type does not match requested type */ - - ACPI_ERROR ((AE_INFO, - "Incorrect return type [%s] requested [%s]", - AcpiUtGetTypeName (((ACPI_OBJECT *) ReturnBuffer->Pointer)->Type), - AcpiUtGetTypeName (ReturnType))); - - if (MustFree) - { - /* Caller used ACPI_ALLOCATE_BUFFER, free the return buffer */ - - AcpiOsFree (ReturnBuffer->Pointer); - ReturnBuffer->Pointer = NULL; - } - - ReturnBuffer->Length = 0; - return_ACPI_STATUS (AE_TYPE); -} - -ACPI_EXPORT_SYMBOL (AcpiEvaluateObjectTyped) - - -/******************************************************************************* - * - * FUNCTION: AcpiEvaluateObject - * - * PARAMETERS: Handle - Object handle (optional) - * Pathname - Object pathname (optional) - * ExternalParams - List of parameters to pass to method, - * terminated by NULL. May be NULL - * if no parameters are being passed. - * ReturnBuffer - Where to put method's return value (if - * any). If NULL, no value is returned. - * - * RETURN: Status - * - * DESCRIPTION: Find and evaluate the given object, passing the given - * parameters if necessary. One of "Handle" or "Pathname" must - * be valid (non-null) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEvaluateObject ( - ACPI_HANDLE Handle, - ACPI_STRING Pathname, - ACPI_OBJECT_LIST *ExternalParams, - ACPI_BUFFER *ReturnBuffer) -{ - ACPI_STATUS Status; - ACPI_EVALUATE_INFO *Info; - ACPI_SIZE BufferSpaceNeeded; - UINT32 i; - - - ACPI_FUNCTION_TRACE (AcpiEvaluateObject); - - - /* Allocate and initialize the evaluation information block */ - - Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); - if (!Info) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - Info->Pathname = Pathname; - - /* Convert and validate the device handle */ - - Info->PrefixNode = AcpiNsValidateHandle (Handle); - if (!Info->PrefixNode) - { - Status = AE_BAD_PARAMETER; - goto Cleanup; - } - - /* - * If there are parameters to be passed to a control method, the external - * objects must all be converted to internal objects - */ - if (ExternalParams && ExternalParams->Count) - { - /* - * Allocate a new parameter block for the internal objects - * Add 1 to count to allow for null terminated internal list - */ - Info->Parameters = ACPI_ALLOCATE_ZEROED ( - ((ACPI_SIZE) ExternalParams->Count + 1) * sizeof (void *)); - if (!Info->Parameters) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* Convert each external object in the list to an internal object */ - - for (i = 0; i < ExternalParams->Count; i++) - { - Status = AcpiUtCopyEobjectToIobject ( - &ExternalParams->Pointer[i], &Info->Parameters[i]); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - } - Info->Parameters[ExternalParams->Count] = NULL; - } - - /* - * Three major cases: - * 1) Fully qualified pathname - * 2) No handle, not fully qualified pathname (error) - * 3) Valid handle - */ - if ((Pathname) && - (AcpiNsValidRootPrefix (Pathname[0]))) - { - /* The path is fully qualified, just evaluate by name */ - - Info->PrefixNode = NULL; - Status = AcpiNsEvaluate (Info); - } - else if (!Handle) - { - /* - * A handle is optional iff a fully qualified pathname is specified. - * Since we've already handled fully qualified names above, this is - * an error - */ - if (!Pathname) - { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Both Handle and Pathname are NULL")); - } - else - { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Null Handle with relative pathname [%s]", Pathname)); - } - - Status = AE_BAD_PARAMETER; - } - else - { - /* We have a namespace a node and a possible relative path */ - - Status = AcpiNsEvaluate (Info); - } - - /* - * If we are expecting a return value, and all went well above, - * copy the return value to an external object. - */ - if (ReturnBuffer) - { - if (!Info->ReturnObject) - { - ReturnBuffer->Length = 0; - } - else - { - if (ACPI_GET_DESCRIPTOR_TYPE (Info->ReturnObject) == - ACPI_DESC_TYPE_NAMED) - { - /* - * If we received a NS Node as a return object, this means that - * the object we are evaluating has nothing interesting to - * return (such as a mutex, etc.) We return an error because - * these types are essentially unsupported by this interface. - * We don't check up front because this makes it easier to add - * support for various types at a later date if necessary. - */ - Status = AE_TYPE; - Info->ReturnObject = NULL; /* No need to delete a NS Node */ - ReturnBuffer->Length = 0; - } - - if (ACPI_SUCCESS (Status)) - { - /* Dereference Index and RefOf references */ - - AcpiNsResolveReferences (Info); - - /* Get the size of the returned object */ - - Status = AcpiUtGetObjectSize (Info->ReturnObject, - &BufferSpaceNeeded); - if (ACPI_SUCCESS (Status)) - { - /* Validate/Allocate/Clear caller buffer */ - - Status = AcpiUtInitializeBuffer (ReturnBuffer, - BufferSpaceNeeded); - if (ACPI_FAILURE (Status)) - { - /* - * Caller's buffer is too small or a new one can't - * be allocated - */ - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Needed buffer size %X, %s\n", - (UINT32) BufferSpaceNeeded, - AcpiFormatException (Status))); - } - else - { - /* We have enough space for the object, build it */ - - Status = AcpiUtCopyIobjectToEobject (Info->ReturnObject, - ReturnBuffer); - } - } - } - } - } - - if (Info->ReturnObject) - { - /* - * Delete the internal return object. NOTE: Interpreter must be - * locked to avoid race condition. - */ - AcpiExEnterInterpreter (); - - /* Remove one reference on the return object (should delete it) */ - - AcpiUtRemoveReference (Info->ReturnObject); - AcpiExExitInterpreter (); - } - - -Cleanup: - - /* Free the input parameter list (if we created one) */ - - if (Info->Parameters) - { - /* Free the allocated parameter block */ - - AcpiUtDeleteInternalObjectList (Info->Parameters); - } - - ACPI_FREE (Info); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiEvaluateObject) - - -/******************************************************************************* - * - * FUNCTION: AcpiNsResolveReferences - * - * PARAMETERS: Info - Evaluation info block - * - * RETURN: Info->ReturnObject is replaced with the dereferenced object - * - * DESCRIPTION: Dereference certain reference objects. Called before an - * internal return object is converted to an external ACPI_OBJECT. - * - * Performs an automatic dereference of Index and RefOf reference objects. - * These reference objects are not supported by the ACPI_OBJECT, so this is a - * last resort effort to return something useful. Also, provides compatibility - * with other ACPI implementations. - * - * NOTE: does not handle references within returned package objects or nested - * references, but this support could be added later if found to be necessary. - * - ******************************************************************************/ - -static void -AcpiNsResolveReferences ( - ACPI_EVALUATE_INFO *Info) -{ - ACPI_OPERAND_OBJECT *ObjDesc = NULL; - ACPI_NAMESPACE_NODE *Node; - - - /* We are interested in reference objects only */ - - if ((Info->ReturnObject)->Common.Type != ACPI_TYPE_LOCAL_REFERENCE) - { - return; - } - - /* - * Two types of references are supported - those created by Index and - * RefOf operators. A name reference (AML_NAMEPATH_OP) can be converted - * to an ACPI_OBJECT, so it is not dereferenced here. A DdbHandle - * (AML_LOAD_OP) cannot be dereferenced, nor can it be converted to - * an ACPI_OBJECT. - */ - switch (Info->ReturnObject->Reference.Class) - { - case ACPI_REFCLASS_INDEX: - - ObjDesc = *(Info->ReturnObject->Reference.Where); - break; - - case ACPI_REFCLASS_REFOF: - - Node = Info->ReturnObject->Reference.Object; - if (Node) - { - ObjDesc = Node->Object; - } - break; - - default: - return; - } - - /* Replace the existing reference object */ - - if (ObjDesc) - { - AcpiUtAddReference (ObjDesc); - AcpiUtRemoveReference (Info->ReturnObject); - Info->ReturnObject = ObjDesc; - } - - return; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiWalkNamespace - * - * PARAMETERS: Type - ACPI_OBJECT_TYPE to search for - * StartObject - Handle in namespace where search begins - * MaxDepth - Depth to which search is to reach - * PreOrderVisit - Called during tree pre-order visit - * when an object of "Type" is found - * PostOrderVisit - Called during tree post-order visit - * when an object of "Type" is found - * Context - Passed to user function(s) above - * ReturnValue - Location where return value of - * UserFunction is put if terminated early - * - * RETURNS Return value from the UserFunction if terminated early. - * Otherwise, returns NULL. - * - * DESCRIPTION: Performs a modified depth-first walk of the namespace tree, - * starting (and ending) at the object specified by StartHandle. - * The callback function is called whenever an object that matches - * the type parameter is found. If the callback function returns - * a non-zero value, the search is terminated immediately and this - * value is returned to the caller. - * - * The point of this procedure is to provide a generic namespace - * walk routine that can be called from multiple places to - * provide multiple services; the callback function(s) can be - * tailored to each task, whether it is a print function, - * a compare function, etc. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiWalkNamespace ( - ACPI_OBJECT_TYPE Type, - ACPI_HANDLE StartObject, - UINT32 MaxDepth, - ACPI_WALK_CALLBACK PreOrderVisit, - ACPI_WALK_CALLBACK PostOrderVisit, - void *Context, - void **ReturnValue) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiWalkNamespace); - - - /* Parameter validation */ - - if ((Type > ACPI_TYPE_LOCAL_MAX) || - (!MaxDepth) || - (!PreOrderVisit && !PostOrderVisit)) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* - * Need to acquire the namespace reader lock to prevent interference - * with any concurrent table unloads (which causes the deletion of - * namespace objects). We cannot allow the deletion of a namespace node - * while the user function is using it. The exception to this are the - * nodes created and deleted during control method execution -- these - * nodes are marked as temporary nodes and are ignored by the namespace - * walk. Thus, control methods can be executed while holding the - * namespace deletion lock (and the user function can execute control - * methods.) - */ - Status = AcpiUtAcquireReadLock (&AcpiGbl_NamespaceRwLock); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* - * Lock the namespace around the walk. The namespace will be - * unlocked/locked around each call to the user function - since the user - * function must be allowed to make ACPICA calls itself (for example, it - * will typically execute control methods during device enumeration.) - */ - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - - Status = AcpiNsWalkNamespace (Type, StartObject, MaxDepth, - ACPI_NS_WALK_UNLOCK, PreOrderVisit, - PostOrderVisit, Context, ReturnValue); - - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - -UnlockAndExit: - (void) AcpiUtReleaseReadLock (&AcpiGbl_NamespaceRwLock); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiWalkNamespace) - - -/******************************************************************************* - * - * FUNCTION: AcpiNsGetDeviceCallback - * - * PARAMETERS: Callback from AcpiGetDevice - * - * RETURN: Status - * - * DESCRIPTION: Takes callbacks from WalkNamespace and filters out all non- - * present devices, or if they specified a HID, it filters based - * on that. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiNsGetDeviceCallback ( - ACPI_HANDLE ObjHandle, - UINT32 NestingLevel, - void *Context, - void **ReturnValue) -{ - ACPI_GET_DEVICES_INFO *Info = Context; - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - UINT32 Flags; - ACPI_DEVICE_ID *Hid; - ACPI_DEVICE_ID_LIST *Cid; - UINT32 i; - BOOLEAN Found; - int NoMatch; - - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Node = AcpiNsValidateHandle (ObjHandle); - Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - if (!Node) - { - return (AE_BAD_PARAMETER); - } - - /* Run _STA to determine if device is present */ - - Status = AcpiUtExecute_STA (Node, &Flags); - if (ACPI_FAILURE (Status)) - { - return (AE_CTRL_DEPTH); - } - - if (!(Flags & ACPI_STA_DEVICE_PRESENT) && - !(Flags & ACPI_STA_DEVICE_FUNCTIONING)) - { - /* - * Don't examine the children of the device only when the - * device is neither present nor functional. See ACPI spec, - * description of _STA for more information. - */ - return (AE_CTRL_DEPTH); - } - - /* Filter based on device HID & CID */ - - if (Info->Hid != NULL) - { - Status = AcpiUtExecute_HID (Node, &Hid); - if (Status == AE_NOT_FOUND) - { - return (AE_OK); - } - else if (ACPI_FAILURE (Status)) - { - return (AE_CTRL_DEPTH); - } - - NoMatch = ACPI_STRCMP (Hid->String, Info->Hid); - ACPI_FREE (Hid); - - if (NoMatch) - { - /* - * HID does not match, attempt match within the - * list of Compatible IDs (CIDs) - */ - Status = AcpiUtExecute_CID (Node, &Cid); - if (Status == AE_NOT_FOUND) - { - return (AE_OK); - } - else if (ACPI_FAILURE (Status)) - { - return (AE_CTRL_DEPTH); - } - - /* Walk the CID list */ - - Found = FALSE; - for (i = 0; i < Cid->Count; i++) - { - if (ACPI_STRCMP (Cid->Ids[i].String, Info->Hid) == 0) - { - /* Found a matching CID */ - - Found = TRUE; - break; - } - } - - ACPI_FREE (Cid); - if (!Found) - { - return (AE_OK); - } - } - } - - /* We have a valid device, invoke the user function */ - - Status = Info->UserFunction (ObjHandle, NestingLevel, Info->Context, - ReturnValue); - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiGetDevices - * - * PARAMETERS: HID - HID to search for. Can be NULL. - * UserFunction - Called when a matching object is found - * Context - Passed to user function - * ReturnValue - Location where return value of - * UserFunction is put if terminated early - * - * RETURNS Return value from the UserFunction if terminated early. - * Otherwise, returns NULL. - * - * DESCRIPTION: Performs a modified depth-first walk of the namespace tree, - * starting (and ending) at the object specified by StartHandle. - * The UserFunction is called whenever an object of type - * Device is found. If the user function returns - * a non-zero value, the search is terminated immediately and this - * value is returned to the caller. - * - * This is a wrapper for WalkNamespace, but the callback performs - * additional filtering. Please see AcpiNsGetDeviceCallback. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetDevices ( - char *HID, - ACPI_WALK_CALLBACK UserFunction, - void *Context, - void **ReturnValue) -{ - ACPI_STATUS Status; - ACPI_GET_DEVICES_INFO Info; - - - ACPI_FUNCTION_TRACE (AcpiGetDevices); - - - /* Parameter validation */ - - if (!UserFunction) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* - * We're going to call their callback from OUR callback, so we need - * to know what it is, and their context parameter. - */ - Info.Hid = HID; - Info.Context = Context; - Info.UserFunction = UserFunction; - - /* - * Lock the namespace around the walk. - * The namespace will be unlocked/locked around each call - * to the user function - since this function - * must be allowed to make Acpi calls itself. - */ - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Status = AcpiNsWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK, - AcpiNsGetDeviceCallback, NULL, &Info, ReturnValue); - - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetDevices) - - -/******************************************************************************* - * - * FUNCTION: AcpiAttachData - * - * PARAMETERS: ObjHandle - Namespace node - * Handler - Handler for this attachment - * Data - Pointer to data to be attached - * - * RETURN: Status - * - * DESCRIPTION: Attach arbitrary data and handler to a namespace node. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiAttachData ( - ACPI_HANDLE ObjHandle, - ACPI_OBJECT_HANDLER Handler, - void *Data) -{ - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - - - /* Parameter validation */ - - if (!ObjHandle || - !Handler || - !Data) - { - return (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Convert and validate the handle */ - - Node = AcpiNsValidateHandle (ObjHandle); - if (!Node) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - Status = AcpiNsAttachData (Node, Handler, Data); - -UnlockAndExit: - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiAttachData) - - -/******************************************************************************* - * - * FUNCTION: AcpiDetachData - * - * PARAMETERS: ObjHandle - Namespace node handle - * Handler - Handler used in call to AcpiAttachData - * - * RETURN: Status - * - * DESCRIPTION: Remove data that was previously attached to a node. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDetachData ( - ACPI_HANDLE ObjHandle, - ACPI_OBJECT_HANDLER Handler) -{ - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - - - /* Parameter validation */ - - if (!ObjHandle || - !Handler) - { - return (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Convert and validate the handle */ - - Node = AcpiNsValidateHandle (ObjHandle); - if (!Node) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - Status = AcpiNsDetachData (Node, Handler); - -UnlockAndExit: - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiDetachData) - - -/******************************************************************************* - * - * FUNCTION: AcpiGetData - * - * PARAMETERS: ObjHandle - Namespace node - * Handler - Handler used in call to AttachData - * Data - Where the data is returned - * - * RETURN: Status - * - * DESCRIPTION: Retrieve data that was previously attached to a namespace node. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetData ( - ACPI_HANDLE ObjHandle, - ACPI_OBJECT_HANDLER Handler, - void **Data) -{ - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - - - /* Parameter validation */ - - if (!ObjHandle || - !Handler || - !Data) - { - return (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Convert and validate the handle */ - - Node = AcpiNsValidateHandle (ObjHandle); - if (!Node) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - Status = AcpiNsGetAttachedData (Node, Handler, Data); - -UnlockAndExit: - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetData) - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsxfname.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsxfname.c deleted file mode 100644 index cb7aaa6f9..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsxfname.c +++ /dev/null @@ -1,776 +0,0 @@ -/****************************************************************************** - * - * Module Name: nsxfname - Public interfaces to the ACPI subsystem - * ACPI Namespace oriented interfaces - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __NSXFNAME_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "acparser.h" -#include "amlcode.h" - - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsxfname") - -/* Local prototypes */ - -static char * -AcpiNsCopyDeviceId ( - ACPI_DEVICE_ID *Dest, - ACPI_DEVICE_ID *Source, - char *StringArea); - - -/****************************************************************************** - * - * FUNCTION: AcpiGetHandle - * - * PARAMETERS: Parent - Object to search under (search scope). - * Pathname - Pointer to an asciiz string containing the - * name - * RetHandle - Where the return handle is returned - * - * RETURN: Status - * - * DESCRIPTION: This routine will search for a caller specified name in the - * name space. The caller can restrict the search region by - * specifying a non NULL parent. The parent value is itself a - * namespace handle. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetHandle ( - ACPI_HANDLE Parent, - ACPI_STRING Pathname, - ACPI_HANDLE *RetHandle) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node = NULL; - ACPI_NAMESPACE_NODE *PrefixNode = NULL; - - - ACPI_FUNCTION_ENTRY (); - - - /* Parameter Validation */ - - if (!RetHandle || !Pathname) - { - return (AE_BAD_PARAMETER); - } - - /* Convert a parent handle to a prefix node */ - - if (Parent) - { - PrefixNode = AcpiNsValidateHandle (Parent); - if (!PrefixNode) - { - return (AE_BAD_PARAMETER); - } - } - - /* - * Valid cases are: - * 1) Fully qualified pathname - * 2) Parent + Relative pathname - * - * Error for - */ - if (AcpiNsValidRootPrefix (Pathname[0])) - { - /* Pathname is fully qualified (starts with '\') */ - - /* Special case for root-only, since we can't search for it */ - - if (!ACPI_STRCMP (Pathname, ACPI_NS_ROOT_PATH)) - { - *RetHandle = ACPI_CAST_PTR (ACPI_HANDLE, AcpiGbl_RootNode); - return (AE_OK); - } - } - else if (!PrefixNode) - { - /* Relative path with null prefix is disallowed */ - - return (AE_BAD_PARAMETER); - } - - /* Find the Node and convert to a handle */ - - Status = AcpiNsGetNode (PrefixNode, Pathname, ACPI_NS_NO_UPSEARCH, &Node); - if (ACPI_SUCCESS (Status)) - { - *RetHandle = ACPI_CAST_PTR (ACPI_HANDLE, Node); - } - - return (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetHandle) - - -/****************************************************************************** - * - * FUNCTION: AcpiGetName - * - * PARAMETERS: Handle - Handle to be converted to a pathname - * NameType - Full pathname or single segment - * Buffer - Buffer for returned path - * - * RETURN: Pointer to a string containing the fully qualified Name. - * - * DESCRIPTION: This routine returns the fully qualified name associated with - * the Handle parameter. This and the AcpiPathnameToHandle are - * complementary functions. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetName ( - ACPI_HANDLE Handle, - UINT32 NameType, - ACPI_BUFFER *Buffer) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - - - /* Parameter validation */ - - if (NameType > ACPI_NAME_TYPE_MAX) - { - return (AE_BAD_PARAMETER); - } - - Status = AcpiUtValidateBuffer (Buffer); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - if (NameType == ACPI_FULL_PATHNAME) - { - /* Get the full pathname (From the namespace root) */ - - Status = AcpiNsHandleToPathname (Handle, Buffer); - return (Status); - } - - /* - * Wants the single segment ACPI name. - * Validate handle and convert to a namespace Node - */ - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Node = AcpiNsValidateHandle (Handle); - if (!Node) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* Validate/Allocate/Clear caller buffer */ - - Status = AcpiUtInitializeBuffer (Buffer, ACPI_PATH_SEGMENT_LENGTH); - if (ACPI_FAILURE (Status)) - { - goto UnlockAndExit; - } - - /* Just copy the ACPI name from the Node and zero terminate it */ - - ACPI_STRNCPY (Buffer->Pointer, AcpiUtGetNodeName (Node), - ACPI_NAME_SIZE); - ((char *) Buffer->Pointer) [ACPI_NAME_SIZE] = 0; - Status = AE_OK; - - -UnlockAndExit: - - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetName) - - -/****************************************************************************** - * - * FUNCTION: AcpiNsCopyDeviceId - * - * PARAMETERS: Dest - Pointer to the destination DEVICE_ID - * Source - Pointer to the source DEVICE_ID - * StringArea - Pointer to where to copy the dest string - * - * RETURN: Pointer to the next string area - * - * DESCRIPTION: Copy a single DEVICE_ID, including the string data. - * - ******************************************************************************/ - -static char * -AcpiNsCopyDeviceId ( - ACPI_DEVICE_ID *Dest, - ACPI_DEVICE_ID *Source, - char *StringArea) -{ - /* Create the destination DEVICE_ID */ - - Dest->String = StringArea; - Dest->Length = Source->Length; - - /* Copy actual string and return a pointer to the next string area */ - - ACPI_MEMCPY (StringArea, Source->String, Source->Length); - return (StringArea + Source->Length); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiGetObjectInfo - * - * PARAMETERS: Handle - Object Handle - * ReturnBuffer - Where the info is returned - * - * RETURN: Status - * - * DESCRIPTION: Returns information about an object as gleaned from the - * namespace node and possibly by running several standard - * control methods (Such as in the case of a device.) - * - * For Device and Processor objects, run the Device _HID, _UID, _CID, _STA, - * _ADR, _SxW, and _SxD methods. - * - * Note: Allocates the return buffer, must be freed by the caller. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetObjectInfo ( - ACPI_HANDLE Handle, - ACPI_DEVICE_INFO **ReturnBuffer) -{ - ACPI_NAMESPACE_NODE *Node; - ACPI_DEVICE_INFO *Info; - ACPI_DEVICE_ID_LIST *CidList = NULL; - ACPI_DEVICE_ID *Hid = NULL; - ACPI_DEVICE_ID *Uid = NULL; - char *NextIdString; - ACPI_OBJECT_TYPE Type; - ACPI_NAME Name; - UINT8 ParamCount= 0; - UINT8 Valid = 0; - UINT32 InfoSize; - UINT32 i; - ACPI_STATUS Status; - - - /* Parameter validation */ - - if (!Handle || !ReturnBuffer) - { - return (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - Node = AcpiNsValidateHandle (Handle); - if (!Node) - { - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return (AE_BAD_PARAMETER); - } - - /* Get the namespace node data while the namespace is locked */ - - InfoSize = sizeof (ACPI_DEVICE_INFO); - Type = Node->Type; - Name = Node->Name.Integer; - - if (Node->Type == ACPI_TYPE_METHOD) - { - ParamCount = Node->Object->Method.ParamCount; - } - - Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - if ((Type == ACPI_TYPE_DEVICE) || - (Type == ACPI_TYPE_PROCESSOR)) - { - /* - * Get extra info for ACPI Device/Processor objects only: - * Run the Device _HID, _UID, and _CID methods. - * - * Note: none of these methods are required, so they may or may - * not be present for this device. The Info->Valid bitfield is used - * to indicate which methods were found and run successfully. - */ - - /* Execute the Device._HID method */ - - Status = AcpiUtExecute_HID (Node, &Hid); - if (ACPI_SUCCESS (Status)) - { - InfoSize += Hid->Length; - Valid |= ACPI_VALID_HID; - } - - /* Execute the Device._UID method */ - - Status = AcpiUtExecute_UID (Node, &Uid); - if (ACPI_SUCCESS (Status)) - { - InfoSize += Uid->Length; - Valid |= ACPI_VALID_UID; - } - - /* Execute the Device._CID method */ - - Status = AcpiUtExecute_CID (Node, &CidList); - if (ACPI_SUCCESS (Status)) - { - /* Add size of CID strings and CID pointer array */ - - InfoSize += (CidList->ListSize - sizeof (ACPI_DEVICE_ID_LIST)); - Valid |= ACPI_VALID_CID; - } - } - - /* - * Now that we have the variable-length data, we can allocate the - * return buffer - */ - Info = ACPI_ALLOCATE_ZEROED (InfoSize); - if (!Info) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* Get the fixed-length data */ - - if ((Type == ACPI_TYPE_DEVICE) || - (Type == ACPI_TYPE_PROCESSOR)) - { - /* - * Get extra info for ACPI Device/Processor objects only: - * Run the _STA, _ADR and, SxW, and _SxD methods. - * - * Note: none of these methods are required, so they may or may - * not be present for this device. The Info->Valid bitfield is used - * to indicate which methods were found and run successfully. - */ - - /* Execute the Device._STA method */ - - Status = AcpiUtExecute_STA (Node, &Info->CurrentStatus); - if (ACPI_SUCCESS (Status)) - { - Valid |= ACPI_VALID_STA; - } - - /* Execute the Device._ADR method */ - - Status = AcpiUtEvaluateNumericObject (METHOD_NAME__ADR, Node, - &Info->Address); - if (ACPI_SUCCESS (Status)) - { - Valid |= ACPI_VALID_ADR; - } - - /* Execute the Device._SxW methods */ - - Status = AcpiUtExecutePowerMethods (Node, - AcpiGbl_LowestDstateNames, ACPI_NUM_SxW_METHODS, - Info->LowestDstates); - if (ACPI_SUCCESS (Status)) - { - Valid |= ACPI_VALID_SXWS; - } - - /* Execute the Device._SxD methods */ - - Status = AcpiUtExecutePowerMethods (Node, - AcpiGbl_HighestDstateNames, ACPI_NUM_SxD_METHODS, - Info->HighestDstates); - if (ACPI_SUCCESS (Status)) - { - Valid |= ACPI_VALID_SXDS; - } - } - - /* - * Create a pointer to the string area of the return buffer. - * Point to the end of the base ACPI_DEVICE_INFO structure. - */ - NextIdString = ACPI_CAST_PTR (char, Info->CompatibleIdList.Ids); - if (CidList) - { - /* Point past the CID DEVICE_ID array */ - - NextIdString += ((ACPI_SIZE) CidList->Count * sizeof (ACPI_DEVICE_ID)); - } - - /* - * Copy the HID, UID, and CIDs to the return buffer. The variable-length - * strings are copied to the reserved area at the end of the buffer. - * - * For HID and CID, check if the ID is a PCI Root Bridge. - */ - if (Hid) - { - NextIdString = AcpiNsCopyDeviceId (&Info->HardwareId, - Hid, NextIdString); - - if (AcpiUtIsPciRootBridge (Hid->String)) - { - Info->Flags |= ACPI_PCI_ROOT_BRIDGE; - } - } - - if (Uid) - { - NextIdString = AcpiNsCopyDeviceId (&Info->UniqueId, - Uid, NextIdString); - } - - if (CidList) - { - Info->CompatibleIdList.Count = CidList->Count; - Info->CompatibleIdList.ListSize = CidList->ListSize; - - /* Copy each CID */ - - for (i = 0; i < CidList->Count; i++) - { - NextIdString = AcpiNsCopyDeviceId (&Info->CompatibleIdList.Ids[i], - &CidList->Ids[i], NextIdString); - - if (AcpiUtIsPciRootBridge (CidList->Ids[i].String)) - { - Info->Flags |= ACPI_PCI_ROOT_BRIDGE; - } - } - } - - /* Copy the fixed-length data */ - - Info->InfoSize = InfoSize; - Info->Type = Type; - Info->Name = Name; - Info->ParamCount = ParamCount; - Info->Valid = Valid; - - *ReturnBuffer = Info; - Status = AE_OK; - - -Cleanup: - if (Hid) - { - ACPI_FREE (Hid); - } - if (Uid) - { - ACPI_FREE (Uid); - } - if (CidList) - { - ACPI_FREE (CidList); - } - return (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetObjectInfo) - - -/****************************************************************************** - * - * FUNCTION: AcpiInstallMethod - * - * PARAMETERS: Buffer - An ACPI table containing one control method - * - * RETURN: Status - * - * DESCRIPTION: Install a control method into the namespace. If the method - * name already exists in the namespace, it is overwritten. The - * input buffer must contain a valid DSDT or SSDT containing a - * single control method. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiInstallMethod ( - UINT8 *Buffer) -{ - ACPI_TABLE_HEADER *Table = ACPI_CAST_PTR (ACPI_TABLE_HEADER, Buffer); - UINT8 *AmlBuffer; - UINT8 *AmlStart; - char *Path; - ACPI_NAMESPACE_NODE *Node; - ACPI_OPERAND_OBJECT *MethodObj; - ACPI_PARSE_STATE ParserState; - UINT32 AmlLength; - UINT16 Opcode; - UINT8 MethodFlags; - ACPI_STATUS Status; - - - /* Parameter validation */ - - if (!Buffer) - { - return (AE_BAD_PARAMETER); - } - - /* Table must be a DSDT or SSDT */ - - if (!ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_DSDT) && - !ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_SSDT)) - { - return (AE_BAD_HEADER); - } - - /* First AML opcode in the table must be a control method */ - - ParserState.Aml = Buffer + sizeof (ACPI_TABLE_HEADER); - Opcode = AcpiPsPeekOpcode (&ParserState); - if (Opcode != AML_METHOD_OP) - { - return (AE_BAD_PARAMETER); - } - - /* Extract method information from the raw AML */ - - ParserState.Aml += AcpiPsGetOpcodeSize (Opcode); - ParserState.PkgEnd = AcpiPsGetNextPackageEnd (&ParserState); - Path = AcpiPsGetNextNamestring (&ParserState); - MethodFlags = *ParserState.Aml++; - AmlStart = ParserState.Aml; - AmlLength = ACPI_PTR_DIFF (ParserState.PkgEnd, AmlStart); - - /* - * Allocate resources up-front. We don't want to have to delete a new - * node from the namespace if we cannot allocate memory. - */ - AmlBuffer = ACPI_ALLOCATE (AmlLength); - if (!AmlBuffer) - { - return (AE_NO_MEMORY); - } - - MethodObj = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD); - if (!MethodObj) - { - ACPI_FREE (AmlBuffer); - return (AE_NO_MEMORY); - } - - /* Lock namespace for AcpiNsLookup, we may be creating a new node */ - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - goto ErrorExit; - } - - /* The lookup either returns an existing node or creates a new one */ - - Status = AcpiNsLookup (NULL, Path, ACPI_TYPE_METHOD, ACPI_IMODE_LOAD_PASS1, - ACPI_NS_DONT_OPEN_SCOPE | ACPI_NS_ERROR_IF_FOUND, NULL, &Node); - - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - - if (ACPI_FAILURE (Status)) /* NsLookup */ - { - if (Status != AE_ALREADY_EXISTS) - { - goto ErrorExit; - } - - /* Node existed previously, make sure it is a method node */ - - if (Node->Type != ACPI_TYPE_METHOD) - { - Status = AE_TYPE; - goto ErrorExit; - } - } - - /* Copy the method AML to the local buffer */ - - ACPI_MEMCPY (AmlBuffer, AmlStart, AmlLength); - - /* Initialize the method object with the new method's information */ - - MethodObj->Method.AmlStart = AmlBuffer; - MethodObj->Method.AmlLength = AmlLength; - - MethodObj->Method.ParamCount = (UINT8) - (MethodFlags & AML_METHOD_ARG_COUNT); - - MethodObj->Method.MethodFlags = (UINT8) - (MethodFlags & ~AML_METHOD_ARG_COUNT); - - if (MethodFlags & AML_METHOD_SERIALIZED) - { - MethodObj->Method.SyncLevel = (UINT8) - ((MethodFlags & AML_METHOD_SYNC_LEVEL) >> 4); - } - - /* - * Now that it is complete, we can attach the new method object to - * the method Node (detaches/deletes any existing object) - */ - Status = AcpiNsAttachObject (Node, MethodObj, - ACPI_TYPE_METHOD); - - /* - * Flag indicates AML buffer is dynamic, must be deleted later. - * Must be set only after attach above. - */ - Node->Flags |= ANOBJ_ALLOCATED_BUFFER; - - /* Remove local reference to the method object */ - - AcpiUtRemoveReference (MethodObj); - return (Status); - - -ErrorExit: - - ACPI_FREE (AmlBuffer); - ACPI_FREE (MethodObj); - return (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiInstallMethod) diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsxfobj.c b/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsxfobj.c deleted file mode 100644 index 9c42a33f8..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/namespace/nsxfobj.c +++ /dev/null @@ -1,357 +0,0 @@ -/******************************************************************************* - * - * Module Name: nsxfobj - Public interfaces to the ACPI subsystem - * ACPI Object oriented interfaces - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __NSXFOBJ_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsxfobj") - -/******************************************************************************* - * - * FUNCTION: AcpiGetType - * - * PARAMETERS: Handle - Handle of object whose type is desired - * RetType - Where the type will be placed - * - * RETURN: Status - * - * DESCRIPTION: This routine returns the type associatd with a particular handle - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetType ( - ACPI_HANDLE Handle, - ACPI_OBJECT_TYPE *RetType) -{ - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - - - /* Parameter Validation */ - - if (!RetType) - { - return (AE_BAD_PARAMETER); - } - - /* - * Special case for the predefined Root Node - * (return type ANY) - */ - if (Handle == ACPI_ROOT_OBJECT) - { - *RetType = ACPI_TYPE_ANY; - return (AE_OK); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Convert and validate the handle */ - - Node = AcpiNsValidateHandle (Handle); - if (!Node) - { - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return (AE_BAD_PARAMETER); - } - - *RetType = Node->Type; - - - Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetType) - - -/******************************************************************************* - * - * FUNCTION: AcpiGetParent - * - * PARAMETERS: Handle - Handle of object whose parent is desired - * RetHandle - Where the parent handle will be placed - * - * RETURN: Status - * - * DESCRIPTION: Returns a handle to the parent of the object represented by - * Handle. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetParent ( - ACPI_HANDLE Handle, - ACPI_HANDLE *RetHandle) -{ - ACPI_NAMESPACE_NODE *Node; - ACPI_NAMESPACE_NODE *ParentNode; - ACPI_STATUS Status; - - - if (!RetHandle) - { - return (AE_BAD_PARAMETER); - } - - /* Special case for the predefined Root Node (no parent) */ - - if (Handle == ACPI_ROOT_OBJECT) - { - return (AE_NULL_ENTRY); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Convert and validate the handle */ - - Node = AcpiNsValidateHandle (Handle); - if (!Node) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - - /* Get the parent entry */ - - ParentNode = AcpiNsGetParentNode (Node); - *RetHandle = ACPI_CAST_PTR (ACPI_HANDLE, ParentNode); - - /* Return exception if parent is null */ - - if (!ParentNode) - { - Status = AE_NULL_ENTRY; - } - - -UnlockAndExit: - - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetParent) - - -/******************************************************************************* - * - * FUNCTION: AcpiGetNextObject - * - * PARAMETERS: Type - Type of object to be searched for - * Parent - Parent object whose children we are getting - * LastChild - Previous child that was found. - * The NEXT child will be returned - * RetHandle - Where handle to the next object is placed - * - * RETURN: Status - * - * DESCRIPTION: Return the next peer object within the namespace. If Handle is - * valid, Scope is ignored. Otherwise, the first object within - * Scope is returned. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetNextObject ( - ACPI_OBJECT_TYPE Type, - ACPI_HANDLE Parent, - ACPI_HANDLE Child, - ACPI_HANDLE *RetHandle) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - ACPI_NAMESPACE_NODE *ParentNode = NULL; - ACPI_NAMESPACE_NODE *ChildNode = NULL; - - - /* Parameter validation */ - - if (Type > ACPI_TYPE_EXTERNAL_MAX) - { - return (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* If null handle, use the parent */ - - if (!Child) - { - /* Start search at the beginning of the specified scope */ - - ParentNode = AcpiNsValidateHandle (Parent); - if (!ParentNode) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - } - else - { - /* Non-null handle, ignore the parent */ - /* Convert and validate the handle */ - - ChildNode = AcpiNsValidateHandle (Child); - if (!ChildNode) - { - Status = AE_BAD_PARAMETER; - goto UnlockAndExit; - } - } - - /* Internal function does the real work */ - - Node = AcpiNsGetNextNodeTyped (Type, ParentNode, ChildNode); - if (!Node) - { - Status = AE_NOT_FOUND; - goto UnlockAndExit; - } - - if (RetHandle) - { - *RetHandle = ACPI_CAST_PTR (ACPI_HANDLE, Node); - } - - -UnlockAndExit: - - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetNextObject) - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/osunixxf.c b/l4/pkg/acpica/lib-acpi/src/acpica/osunixxf.c deleted file mode 100644 index b430e83f1..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/osunixxf.c +++ /dev/null @@ -1,1229 +0,0 @@ -/****************************************************************************** - * - * Module Name: osunixxf - UNIX OSL interfaces - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -/* - * These interfaces are required in order to compile the ASL compiler under - * Linux or other Unix-like system. - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "acpi.h" -#include "accommon.h" -#include "amlcode.h" -#include "acparser.h" -#include "acdebug.h" - -#define _COMPONENT ACPI_OS_SERVICES - ACPI_MODULE_NAME ("osunixxf") - - -extern FILE *AcpiGbl_DebugFile; -FILE *AcpiGbl_OutputFile; - - -/* Upcalls to AcpiExec */ - -ACPI_PHYSICAL_ADDRESS -AeLocalGetRootPointer ( - void); - -void -AeTableOverride ( - ACPI_TABLE_HEADER *ExistingTable, - ACPI_TABLE_HEADER **NewTable); - -typedef void* (*PTHREAD_CALLBACK) (void *); - - -/****************************************************************************** - * - * FUNCTION: AcpiOsInitialize, AcpiOsTerminate - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Init and terminate. Nothing to do. - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsInitialize (void) -{ - - AcpiGbl_OutputFile = stdout; - return (AE_OK); -} - - -ACPI_STATUS -AcpiOsTerminate (void) -{ - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsGetRootPointer - * - * PARAMETERS: None - * - * RETURN: RSDP physical address - * - * DESCRIPTION: Gets the root pointer (RSDP) - * - *****************************************************************************/ - -ACPI_PHYSICAL_ADDRESS -AcpiOsGetRootPointer ( - void) -{ - - return (AeLocalGetRootPointer ()); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsPredefinedOverride - * - * PARAMETERS: InitVal - Initial value of the predefined object - * NewVal - The new value for the object - * - * RETURN: Status, pointer to value. Null pointer returned if not - * overriding. - * - * DESCRIPTION: Allow the OS to override predefined names - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsPredefinedOverride ( - const ACPI_PREDEFINED_NAMES *InitVal, - ACPI_STRING *NewVal) -{ - - if (!InitVal || !NewVal) - { - return (AE_BAD_PARAMETER); - } - - *NewVal = NULL; - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsTableOverride - * - * PARAMETERS: ExistingTable - Header of current table (probably firmware) - * NewTable - Where an entire new table is returned. - * - * RETURN: Status, pointer to new table. Null pointer returned if no - * table is available to override - * - * DESCRIPTION: Return a different version of a table if one is available - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsTableOverride ( - ACPI_TABLE_HEADER *ExistingTable, - ACPI_TABLE_HEADER **NewTable) -{ - - if (!ExistingTable || !NewTable) - { - return (AE_BAD_PARAMETER); - } - - *NewTable = NULL; - -#ifdef ACPI_EXEC_APP - - AeTableOverride (ExistingTable, NewTable); - return (AE_OK); -#else - - return (AE_NO_ACPI_TABLES); -#endif -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsRedirectOutput - * - * PARAMETERS: Destination - An open file handle/pointer - * - * RETURN: None - * - * DESCRIPTION: Causes redirect of AcpiOsPrintf and AcpiOsVprintf - * - *****************************************************************************/ - -void -AcpiOsRedirectOutput ( - void *Destination) -{ - - AcpiGbl_OutputFile = Destination; -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsPrintf - * - * PARAMETERS: fmt, ... Standard printf format - * - * RETURN: None - * - * DESCRIPTION: Formatted output - * - *****************************************************************************/ - -void ACPI_INTERNAL_VAR_XFACE -AcpiOsPrintf ( - const char *Fmt, - ...) -{ - va_list Args; - - - va_start (Args, Fmt); - AcpiOsVprintf (Fmt, Args); - va_end (Args); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsVprintf - * - * PARAMETERS: fmt Standard printf format - * args Argument list - * - * RETURN: None - * - * DESCRIPTION: Formatted output with argument list pointer - * - *****************************************************************************/ - -void -AcpiOsVprintf ( - const char *Fmt, - va_list Args) -{ - INT32 Count = 0; - UINT8 Flags; - - - Flags = AcpiGbl_DbOutputFlags; - if (Flags & ACPI_DB_REDIRECTABLE_OUTPUT) - { - /* Output is directable to either a file (if open) or the console */ - - if (AcpiGbl_DebugFile) - { - /* Output file is open, send the output there */ - - Count = vfprintf (AcpiGbl_DebugFile, Fmt, Args); - } - else - { - /* No redirection, send output to console (once only!) */ - - Flags |= ACPI_DB_CONSOLE_OUTPUT; - } - } - - if (Flags & ACPI_DB_CONSOLE_OUTPUT) - { - Count = vfprintf (AcpiGbl_OutputFile, Fmt, Args); - } -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsGetLine - * - * PARAMETERS: fmt Standard printf format - * args Argument list - * - * RETURN: Actual bytes read - * - * DESCRIPTION: Formatted input with argument list pointer - * - *****************************************************************************/ - -UINT32 -AcpiOsGetLine ( - char *Buffer) -{ - UINT8 Temp; - UINT32 i; - - - for (i = 0; ; i++) - { - scanf ("%1c", &Temp); - if (!Temp || Temp == '\n') - { - break; - } - - Buffer [i] = Temp; - } - - /* Null terminate the buffer */ - - Buffer [i] = 0; - - /* Return the number of bytes in the string */ - - return (i); -} - -/****************************************************************************** - * - * FUNCTION: AcpiOsMapMemory - * - * PARAMETERS: where Physical address of memory to be mapped - * length How much memory to map - * - * RETURN: Pointer to mapped memory. Null on error. - * - * DESCRIPTION: Map physical memory into caller's address space - * - *****************************************************************************/ - -void * -AcpiOsMapMemory ( - ACPI_PHYSICAL_ADDRESS where, - ACPI_SIZE length) -{ - - return (ACPI_TO_POINTER ((ACPI_SIZE) where)); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsUnmapMemory - * - * PARAMETERS: where Logical address of memory to be unmapped - * length How much memory to unmap - * - * RETURN: None. - * - * DESCRIPTION: Delete a previously created mapping. Where and Length must - * correspond to a previous mapping exactly. - * - *****************************************************************************/ - -void -AcpiOsUnmapMemory ( - void *where, - ACPI_SIZE length) -{ - - return; -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsAllocate - * - * PARAMETERS: Size Amount to allocate, in bytes - * - * RETURN: Pointer to the new allocation. Null on error. - * - * DESCRIPTION: Allocate memory. Algorithm is dependent on the OS. - * - *****************************************************************************/ - -void * -AcpiOsAllocate ( - ACPI_SIZE size) -{ - void *Mem; - - - Mem = (void *) malloc ((size_t) size); - return (Mem); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsFree - * - * PARAMETERS: mem Pointer to previously allocated memory - * - * RETURN: None. - * - * DESCRIPTION: Free memory allocated via AcpiOsAllocate - * - *****************************************************************************/ - -void -AcpiOsFree ( - void *mem) -{ - - free (mem); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsCreateSemaphore - * - * PARAMETERS: InitialUnits - Units to be assigned to the new semaphore - * OutHandle - Where a handle will be returned - * - * RETURN: Status - * - * DESCRIPTION: Create an OS semaphore - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsCreateSemaphore ( - UINT32 MaxUnits, - UINT32 InitialUnits, - ACPI_HANDLE *OutHandle) -{ - sem_t *Sem; - - - if (!OutHandle) - { - return (AE_BAD_PARAMETER); - } - - Sem = AcpiOsAllocate (sizeof (sem_t)); - - if (!Sem) - { - return (AE_NO_MEMORY); - } - - if (sem_init (Sem, 0, InitialUnits) == -1) - { - AcpiOsFree (Sem); - return (AE_BAD_PARAMETER); - } - - *OutHandle = (ACPI_HANDLE) Sem; - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsDeleteSemaphore - * - * PARAMETERS: Handle - Handle returned by AcpiOsCreateSemaphore - * - * RETURN: Status - * - * DESCRIPTION: Delete an OS semaphore - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsDeleteSemaphore ( - ACPI_HANDLE Handle) -{ - sem_t *Sem = (sem_t *) Handle; - - - if (!Sem) - { - return (AE_BAD_PARAMETER); - } - - if (sem_destroy (Sem) == -1) - { - return (AE_BAD_PARAMETER); - } - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsWaitSemaphore - * - * PARAMETERS: Handle - Handle returned by AcpiOsCreateSemaphore - * Units - How many units to wait for - * Timeout - How long to wait - * - * RETURN: Status - * - * DESCRIPTION: Wait for units - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsWaitSemaphore ( - ACPI_HANDLE Handle, - UINT32 Units, - UINT16 Timeout) -{ - ACPI_STATUS Status = AE_OK; - sem_t *Sem = (sem_t *) Handle; - struct timespec T; - - - if (!Sem) - { - return (AE_BAD_PARAMETER); - } - - switch (Timeout) - { - /* - * No Wait: - * -------- - * A zero timeout value indicates that we shouldn't wait - just - * acquire the semaphore if available otherwise return AE_TIME - * (a.k.a. 'would block'). - */ - case 0: - - if (sem_trywait(Sem) == -1) - { - Status = (AE_TIME); - } - break; - - /* Wait Indefinitely */ - - case ACPI_WAIT_FOREVER: - - if (sem_wait (Sem)) - { - Status = (AE_TIME); - } - break; - - /* Wait with Timeout */ - - default: - - T.tv_sec = Timeout / 1000; - T.tv_nsec = (Timeout - (T.tv_sec * 1000)) * 1000000; - -#ifdef ACPI_USE_ALTERNATE_TIMEOUT - /* - * Alternate timeout mechanism for environments where - * sem_timedwait is not available or does not work properly. - */ - while (Timeout) - { - if (sem_trywait (Sem) == 0) - { - /* Got the semaphore */ - return (AE_OK); - } - usleep (1000); /* one millisecond */ - Timeout--; - } - Status = (AE_TIME); -#else - - if (sem_timedwait (Sem, &T)) - { - Status = (AE_TIME); - } -#endif - - break; - } - - return (Status); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsSignalSemaphore - * - * PARAMETERS: Handle - Handle returned by AcpiOsCreateSemaphore - * Units - Number of units to send - * - * RETURN: Status - * - * DESCRIPTION: Send units - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsSignalSemaphore ( - ACPI_HANDLE Handle, - UINT32 Units) -{ - sem_t *Sem = (sem_t *)Handle; - - - if (!Sem) - { - return (AE_BAD_PARAMETER); - } - - if (sem_post (Sem) == -1) - { - return (AE_LIMIT); - } - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: Spinlock interfaces - * - * DESCRIPTION: Map these interfaces to semaphore interfaces - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsCreateLock ( - ACPI_SPINLOCK *OutHandle) -{ - - return (AcpiOsCreateSemaphore (1, 1, OutHandle)); -} - - -void -AcpiOsDeleteLock ( - ACPI_SPINLOCK Handle) -{ - AcpiOsDeleteSemaphore (Handle); -} - - -ACPI_CPU_FLAGS -AcpiOsAcquireLock ( - ACPI_HANDLE Handle) -{ - AcpiOsWaitSemaphore (Handle, 1, 0xFFFF); - return (0); -} - - -void -AcpiOsReleaseLock ( - ACPI_SPINLOCK Handle, - ACPI_CPU_FLAGS Flags) -{ - AcpiOsSignalSemaphore (Handle, 1); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsInstallInterruptHandler - * - * PARAMETERS: InterruptNumber Level handler should respond to. - * Isr Address of the ACPI interrupt handler - * ExceptPtr Where status is returned - * - * RETURN: Handle to the newly installed handler. - * - * DESCRIPTION: Install an interrupt handler. Used to install the ACPI - * OS-independent handler. - * - *****************************************************************************/ - -UINT32 -AcpiOsInstallInterruptHandler ( - UINT32 InterruptNumber, - ACPI_OSD_HANDLER ServiceRoutine, - void *Context) -{ - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsRemoveInterruptHandler - * - * PARAMETERS: Handle Returned when handler was installed - * - * RETURN: Status - * - * DESCRIPTION: Uninstalls an interrupt handler. - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsRemoveInterruptHandler ( - UINT32 InterruptNumber, - ACPI_OSD_HANDLER ServiceRoutine) -{ - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsExecute - * - * PARAMETERS: Type - Type of execution - * Function - Address of the function to execute - * Context - Passed as a parameter to the function - * - * RETURN: Status. - * - * DESCRIPTION: Execute a new thread - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsExecute ( - ACPI_EXECUTE_TYPE Type, - ACPI_OSD_EXEC_CALLBACK Function, - void *Context) -{ - pthread_t thread; - int ret; - - - ret = pthread_create (&thread, NULL, (PTHREAD_CALLBACK) Function, Context); - if (ret) - { - AcpiOsPrintf("Create thread failed"); - } - return (0); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsStall - * - * PARAMETERS: microseconds To sleep - * - * RETURN: Blocks until sleep is completed. - * - * DESCRIPTION: Sleep at microsecond granularity - * - *****************************************************************************/ - -void -AcpiOsStall ( - UINT32 microseconds) -{ - - if (microseconds) - { - usleep (microseconds); - } -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsSleep - * - * PARAMETERS: milliseconds To sleep - * - * RETURN: Blocks until sleep is completed. - * - * DESCRIPTION: Sleep at millisecond granularity - * - *****************************************************************************/ - -void -AcpiOsSleep ( - ACPI_INTEGER milliseconds) -{ - - sleep (milliseconds / 1000); /* Sleep for whole seconds */ - - /* - * Arg to usleep() must be less than 1,000,000 (1 second) - */ - usleep ((milliseconds % 1000) * 1000); /* Sleep for remaining usecs */ -} - -/****************************************************************************** - * - * FUNCTION: AcpiOsGetTimer - * - * PARAMETERS: None - * - * RETURN: Current time in 100 nanosecond units - * - * DESCRIPTION: Get the current system time - * - *****************************************************************************/ - -UINT64 -AcpiOsGetTimer (void) -{ - struct timeval time; - - - gettimeofday (&time, NULL); - - /* Seconds * 10^7 = 100ns(10^-7), Microseconds(10^-6) * 10^1 = 100ns */ - - return (((UINT64) time.tv_sec * 10000000) + ((UINT64) time.tv_usec * 10)); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsValidateInterface - * - * PARAMETERS: Interface - Requested interface to be validated - * - * RETURN: AE_OK if interface is supported, AE_SUPPORT otherwise - * - * DESCRIPTION: Match an interface string to the interfaces supported by the - * host. Strings originate from an AML call to the _OSI method. - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsValidateInterface ( - char *Interface) -{ - - return (AE_SUPPORT); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsReadPciConfiguration - * - * PARAMETERS: PciId Seg/Bus/Dev - * Register Device Register - * Value Buffer where value is placed - * Width Number of bits - * - * RETURN: Status - * - * DESCRIPTION: Read data from PCI configuration space - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsReadPciConfiguration ( - ACPI_PCI_ID *PciId, - UINT32 Register, - void *Value, - UINT32 Width) -{ - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsWritePciConfiguration - * - * PARAMETERS: PciId Seg/Bus/Dev - * Register Device Register - * Value Value to be written - * Width Number of bits - * - * RETURN: Status. - * - * DESCRIPTION: Write data to PCI configuration space - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsWritePciConfiguration ( - ACPI_PCI_ID *PciId, - UINT32 Register, - ACPI_INTEGER Value, - UINT32 Width) -{ - - return (AE_OK); -} - -/* TEMPORARY STUB FUNCTION */ -void -AcpiOsDerivePciId( - ACPI_HANDLE rhandle, - ACPI_HANDLE chandle, - ACPI_PCI_ID **PciId) -{ - -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsReadPort - * - * PARAMETERS: Address Address of I/O port/register to read - * Value Where value is placed - * Width Number of bits - * - * RETURN: Value read from port - * - * DESCRIPTION: Read data from an I/O port or register - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsReadPort ( - ACPI_IO_ADDRESS Address, - UINT32 *Value, - UINT32 Width) -{ - - switch (Width) - { - case 8: - *Value = 0xFF; - break; - - case 16: - *Value = 0xFFFF; - break; - - case 32: - *Value = 0xFFFFFFFF; - break; - - default: - return (AE_BAD_PARAMETER); - } - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsWritePort - * - * PARAMETERS: Address Address of I/O port/register to write - * Value Value to write - * Width Number of bits - * - * RETURN: None - * - * DESCRIPTION: Write data to an I/O port or register - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsWritePort ( - ACPI_IO_ADDRESS Address, - UINT32 Value, - UINT32 Width) -{ - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsReadMemory - * - * PARAMETERS: Address Physical Memory Address to read - * Value Where value is placed - * Width Number of bits - * - * RETURN: Value read from physical memory address - * - * DESCRIPTION: Read data from a physical memory address - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsReadMemory ( - ACPI_PHYSICAL_ADDRESS Address, - UINT32 *Value, - UINT32 Width) -{ - - switch (Width) - { - case 8: - case 16: - case 32: - *Value = 0; - break; - - default: - return (AE_BAD_PARAMETER); - } - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsWriteMemory - * - * PARAMETERS: Address Physical Memory Address to write - * Value Value to write - * Width Number of bits - * - * RETURN: None - * - * DESCRIPTION: Write data to a physical memory address - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsWriteMemory ( - ACPI_PHYSICAL_ADDRESS Address, - UINT32 Value, - UINT32 Width) -{ - - return (AE_OK); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsReadable - * - * PARAMETERS: Pointer - Area to be verified - * Length - Size of area - * - * RETURN: TRUE if readable for entire length - * - * DESCRIPTION: Verify that a pointer is valid for reading - * - *****************************************************************************/ - -BOOLEAN -AcpiOsReadable ( - void *Pointer, - ACPI_SIZE Length) -{ - - return (TRUE); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsWritable - * - * PARAMETERS: Pointer - Area to be verified - * Length - Size of area - * - * RETURN: TRUE if writable for entire length - * - * DESCRIPTION: Verify that a pointer is valid for writing - * - *****************************************************************************/ - -BOOLEAN -AcpiOsWritable ( - void *Pointer, - ACPI_SIZE Length) -{ - - return (TRUE); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsGetThreadId - * - * PARAMETERS: None - * - * RETURN: Id of the running thread - * - * DESCRIPTION: Get the Id of the current (running) thread - * - * NOTE: The environment header should contain this line: - * #define ACPI_THREAD_ID pthread_t - * - *****************************************************************************/ - -ACPI_THREAD_ID -AcpiOsGetThreadId (void) -{ - - return (pthread_self ()); -} - - -/****************************************************************************** - * - * FUNCTION: AcpiOsSignal - * - * PARAMETERS: Function ACPI CA signal function code - * Info Pointer to function-dependent structure - * - * RETURN: Status - * - * DESCRIPTION: Miscellaneous functions. Example implementation only. - * - *****************************************************************************/ - -ACPI_STATUS -AcpiOsSignal ( - UINT32 Function, - void *Info) -{ - - switch (Function) - { - case ACPI_SIGNAL_FATAL: - break; - - case ACPI_SIGNAL_BREAKPOINT: - break; - - default: - break; - } - - return (AE_OK); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/parser/psargs.c b/l4/pkg/acpica/lib-acpi/src/acpica/parser/psargs.c deleted file mode 100644 index 60d4a835b..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/parser/psargs.c +++ /dev/null @@ -1,893 +0,0 @@ -/****************************************************************************** - * - * Module Name: psargs - Parse AML opcode arguments - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __PSARGS_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "amlcode.h" -#include "acnamesp.h" -#include "acdispat.h" - -#define _COMPONENT ACPI_PARSER - ACPI_MODULE_NAME ("psargs") - -/* Local prototypes */ - -static UINT32 -AcpiPsGetNextPackageLength ( - ACPI_PARSE_STATE *ParserState); - -static ACPI_PARSE_OBJECT * -AcpiPsGetNextField ( - ACPI_PARSE_STATE *ParserState); - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetNextPackageLength - * - * PARAMETERS: ParserState - Current parser state object - * - * RETURN: Decoded package length. On completion, the AML pointer points - * past the length byte or bytes. - * - * DESCRIPTION: Decode and return a package length field. - * Note: Largest package length is 28 bits, from ACPI specification - * - ******************************************************************************/ - -static UINT32 -AcpiPsGetNextPackageLength ( - ACPI_PARSE_STATE *ParserState) -{ - UINT8 *Aml = ParserState->Aml; - UINT32 PackageLength = 0; - UINT32 ByteCount; - UINT8 ByteZeroMask = 0x3F; /* Default [0:5] */ - - - ACPI_FUNCTION_TRACE (PsGetNextPackageLength); - - - /* - * Byte 0 bits [6:7] contain the number of additional bytes - * used to encode the package length, either 0,1,2, or 3 - */ - ByteCount = (Aml[0] >> 6); - ParserState->Aml += ((ACPI_SIZE) ByteCount + 1); - - /* Get bytes 3, 2, 1 as needed */ - - while (ByteCount) - { - /* - * Final bit positions for the package length bytes: - * Byte3->[20:27] - * Byte2->[12:19] - * Byte1->[04:11] - * Byte0->[00:03] - */ - PackageLength |= (Aml[ByteCount] << ((ByteCount << 3) - 4)); - - ByteZeroMask = 0x0F; /* Use bits [0:3] of byte 0 */ - ByteCount--; - } - - /* Byte 0 is a special case, either bits [0:3] or [0:5] are used */ - - PackageLength |= (Aml[0] & ByteZeroMask); - return_UINT32 (PackageLength); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetNextPackageEnd - * - * PARAMETERS: ParserState - Current parser state object - * - * RETURN: Pointer to end-of-package +1 - * - * DESCRIPTION: Get next package length and return a pointer past the end of - * the package. Consumes the package length field - * - ******************************************************************************/ - -UINT8 * -AcpiPsGetNextPackageEnd ( - ACPI_PARSE_STATE *ParserState) -{ - UINT8 *Start = ParserState->Aml; - UINT32 PackageLength; - - - ACPI_FUNCTION_TRACE (PsGetNextPackageEnd); - - - /* Function below updates ParserState->Aml */ - - PackageLength = AcpiPsGetNextPackageLength (ParserState); - - return_PTR (Start + PackageLength); /* end of package */ -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetNextNamestring - * - * PARAMETERS: ParserState - Current parser state object - * - * RETURN: Pointer to the start of the name string (pointer points into - * the AML. - * - * DESCRIPTION: Get next raw namestring within the AML stream. Handles all name - * prefix characters. Set parser state to point past the string. - * (Name is consumed from the AML.) - * - ******************************************************************************/ - -char * -AcpiPsGetNextNamestring ( - ACPI_PARSE_STATE *ParserState) -{ - UINT8 *Start = ParserState->Aml; - UINT8 *End = ParserState->Aml; - - - ACPI_FUNCTION_TRACE (PsGetNextNamestring); - - - /* Point past any namestring prefix characters (backslash or carat) */ - - while (AcpiPsIsPrefixChar (*End)) - { - End++; - } - - /* Decode the path prefix character */ - - switch (*End) - { - case 0: - - /* NullName */ - - if (End == Start) - { - Start = NULL; - } - End++; - break; - - case AML_DUAL_NAME_PREFIX: - - /* Two name segments */ - - End += 1 + (2 * ACPI_NAME_SIZE); - break; - - case AML_MULTI_NAME_PREFIX_OP: - - /* Multiple name segments, 4 chars each, count in next byte */ - - End += 2 + (*(End + 1) * ACPI_NAME_SIZE); - break; - - default: - - /* Single name segment */ - - End += ACPI_NAME_SIZE; - break; - } - - ParserState->Aml = End; - return_PTR ((char *) Start); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetNextNamepath - * - * PARAMETERS: ParserState - Current parser state object - * Arg - Where the namepath will be stored - * ArgCount - If the namepath points to a control method - * the method's argument is returned here. - * PossibleMethodCall - Whether the namepath can possibly be the - * start of a method call - * - * RETURN: Status - * - * DESCRIPTION: Get next name (if method call, return # of required args). - * Names are looked up in the internal namespace to determine - * if the name represents a control method. If a method - * is found, the number of arguments to the method is returned. - * This information is critical for parsing to continue correctly. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiPsGetNextNamepath ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_STATE *ParserState, - ACPI_PARSE_OBJECT *Arg, - BOOLEAN PossibleMethodCall) -{ - ACPI_STATUS Status; - char *Path; - ACPI_PARSE_OBJECT *NameOp; - ACPI_OPERAND_OBJECT *MethodDesc; - ACPI_NAMESPACE_NODE *Node; - UINT8 *Start = ParserState->Aml; - - - ACPI_FUNCTION_TRACE (PsGetNextNamepath); - - - Path = AcpiPsGetNextNamestring (ParserState); - AcpiPsInitOp (Arg, AML_INT_NAMEPATH_OP); - - /* Null path case is allowed, just exit */ - - if (!Path) - { - Arg->Common.Value.Name = Path; - return_ACPI_STATUS (AE_OK); - } - - /* - * Lookup the name in the internal namespace, starting with the current - * scope. We don't want to add anything new to the namespace here, - * however, so we use MODE_EXECUTE. - * Allow searching of the parent tree, but don't open a new scope - - * we just want to lookup the object (must be mode EXECUTE to perform - * the upsearch) - */ - Status = AcpiNsLookup (WalkState->ScopeInfo, Path, - ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, - ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node); - - /* - * If this name is a control method invocation, we must - * setup the method call - */ - if (ACPI_SUCCESS (Status) && - PossibleMethodCall && - (Node->Type == ACPI_TYPE_METHOD)) - { - if (WalkState->Opcode == AML_UNLOAD_OP) - { - /* - * AcpiPsGetNextNamestring has increased the AML pointer, - * so we need to restore the saved AML pointer for method call. - */ - WalkState->ParserState.Aml = Start; - WalkState->ArgCount = 1; - AcpiPsInitOp (Arg, AML_INT_METHODCALL_OP); - return_ACPI_STATUS (AE_OK); - } - - /* This name is actually a control method invocation */ - - MethodDesc = AcpiNsGetAttachedObject (Node); - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "Control Method - %p Desc %p Path=%p\n", Node, MethodDesc, Path)); - - NameOp = AcpiPsAllocOp (AML_INT_NAMEPATH_OP); - if (!NameOp) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Change Arg into a METHOD CALL and attach name to it */ - - AcpiPsInitOp (Arg, AML_INT_METHODCALL_OP); - NameOp->Common.Value.Name = Path; - - /* Point METHODCALL/NAME to the METHOD Node */ - - NameOp->Common.Node = Node; - AcpiPsAppendArg (Arg, NameOp); - - if (!MethodDesc) - { - ACPI_ERROR ((AE_INFO, - "Control Method %p has no attached object", - Node)); - return_ACPI_STATUS (AE_AML_INTERNAL); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "Control Method - %p Args %X\n", - Node, MethodDesc->Method.ParamCount)); - - /* Get the number of arguments to expect */ - - WalkState->ArgCount = MethodDesc->Method.ParamCount; - return_ACPI_STATUS (AE_OK); - } - - /* - * Special handling if the name was not found during the lookup - - * some NotFound cases are allowed - */ - if (Status == AE_NOT_FOUND) - { - /* 1) NotFound is ok during load pass 1/2 (allow forward references) */ - - if ((WalkState->ParseFlags & ACPI_PARSE_MODE_MASK) != - ACPI_PARSE_EXECUTE) - { - Status = AE_OK; - } - - /* 2) NotFound during a CondRefOf(x) is ok by definition */ - - else if (WalkState->Op->Common.AmlOpcode == AML_COND_REF_OF_OP) - { - Status = AE_OK; - } - - /* - * 3) NotFound while building a Package is ok at this point, we - * may flag as an error later if slack mode is not enabled. - * (Some ASL code depends on allowing this behavior) - */ - else if ((Arg->Common.Parent) && - ((Arg->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) || - (Arg->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP))) - { - Status = AE_OK; - } - } - - /* Final exception check (may have been changed from code above) */ - - if (ACPI_FAILURE (Status)) - { - ACPI_ERROR_NAMESPACE (Path, Status); - - if ((WalkState->ParseFlags & ACPI_PARSE_MODE_MASK) == - ACPI_PARSE_EXECUTE) - { - /* Report a control method execution error */ - - Status = AcpiDsMethodError (Status, WalkState); - } - } - - /* Save the namepath */ - - Arg->Common.Value.Name = Path; - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetNextSimpleArg - * - * PARAMETERS: ParserState - Current parser state object - * ArgType - The argument type (AML_*_ARG) - * Arg - Where the argument is returned - * - * RETURN: None - * - * DESCRIPTION: Get the next simple argument (constant, string, or namestring) - * - ******************************************************************************/ - -void -AcpiPsGetNextSimpleArg ( - ACPI_PARSE_STATE *ParserState, - UINT32 ArgType, - ACPI_PARSE_OBJECT *Arg) -{ - UINT32 Length; - UINT16 Opcode; - UINT8 *Aml = ParserState->Aml; - - - ACPI_FUNCTION_TRACE_U32 (PsGetNextSimpleArg, ArgType); - - - switch (ArgType) - { - case ARGP_BYTEDATA: - - /* Get 1 byte from the AML stream */ - - Opcode = AML_BYTE_OP; - Arg->Common.Value.Integer = (ACPI_INTEGER) *Aml; - Length = 1; - break; - - - case ARGP_WORDDATA: - - /* Get 2 bytes from the AML stream */ - - Opcode = AML_WORD_OP; - ACPI_MOVE_16_TO_64 (&Arg->Common.Value.Integer, Aml); - Length = 2; - break; - - - case ARGP_DWORDDATA: - - /* Get 4 bytes from the AML stream */ - - Opcode = AML_DWORD_OP; - ACPI_MOVE_32_TO_64 (&Arg->Common.Value.Integer, Aml); - Length = 4; - break; - - - case ARGP_QWORDDATA: - - /* Get 8 bytes from the AML stream */ - - Opcode = AML_QWORD_OP; - ACPI_MOVE_64_TO_64 (&Arg->Common.Value.Integer, Aml); - Length = 8; - break; - - - case ARGP_CHARLIST: - - /* Get a pointer to the string, point past the string */ - - Opcode = AML_STRING_OP; - Arg->Common.Value.String = ACPI_CAST_PTR (char, Aml); - - /* Find the null terminator */ - - Length = 0; - while (Aml[Length]) - { - Length++; - } - Length++; - break; - - - case ARGP_NAME: - case ARGP_NAMESTRING: - - AcpiPsInitOp (Arg, AML_INT_NAMEPATH_OP); - Arg->Common.Value.Name = AcpiPsGetNextNamestring (ParserState); - return_VOID; - - - default: - - ACPI_ERROR ((AE_INFO, "Invalid ArgType %X", ArgType)); - return_VOID; - } - - AcpiPsInitOp (Arg, Opcode); - ParserState->Aml += Length; - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetNextField - * - * PARAMETERS: ParserState - Current parser state object - * - * RETURN: A newly allocated FIELD op - * - * DESCRIPTION: Get next field (NamedField, ReservedField, or AccessField) - * - ******************************************************************************/ - -static ACPI_PARSE_OBJECT * -AcpiPsGetNextField ( - ACPI_PARSE_STATE *ParserState) -{ - UINT32 AmlOffset = (UINT32) - ACPI_PTR_DIFF (ParserState->Aml, - ParserState->AmlStart); - ACPI_PARSE_OBJECT *Field; - UINT16 Opcode; - UINT32 Name; - - - ACPI_FUNCTION_TRACE (PsGetNextField); - - - /* Determine field type */ - - switch (ACPI_GET8 (ParserState->Aml)) - { - default: - - Opcode = AML_INT_NAMEDFIELD_OP; - break; - - case 0x00: - - Opcode = AML_INT_RESERVEDFIELD_OP; - ParserState->Aml++; - break; - - case 0x01: - - Opcode = AML_INT_ACCESSFIELD_OP; - ParserState->Aml++; - break; - } - - /* Allocate a new field op */ - - Field = AcpiPsAllocOp (Opcode); - if (!Field) - { - return_PTR (NULL); - } - - Field->Common.AmlOffset = AmlOffset; - - /* Decode the field type */ - - switch (Opcode) - { - case AML_INT_NAMEDFIELD_OP: - - /* Get the 4-character name */ - - ACPI_MOVE_32_TO_32 (&Name, ParserState->Aml); - AcpiPsSetName (Field, Name); - ParserState->Aml += ACPI_NAME_SIZE; - - /* Get the length which is encoded as a package length */ - - Field->Common.Value.Size = AcpiPsGetNextPackageLength (ParserState); - break; - - - case AML_INT_RESERVEDFIELD_OP: - - /* Get the length which is encoded as a package length */ - - Field->Common.Value.Size = AcpiPsGetNextPackageLength (ParserState); - break; - - - case AML_INT_ACCESSFIELD_OP: - - /* - * Get AccessType and AccessAttrib and merge into the field Op - * AccessType is first operand, AccessAttribute is second - */ - Field->Common.Value.Integer = (((UINT32) ACPI_GET8 (ParserState->Aml) << 8)); - ParserState->Aml++; - Field->Common.Value.Integer |= ACPI_GET8 (ParserState->Aml); - ParserState->Aml++; - break; - - default: - - /* Opcode was set in previous switch */ - break; - } - - return_PTR (Field); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetNextArg - * - * PARAMETERS: WalkState - Current state - * ParserState - Current parser state object - * ArgType - The argument type (AML_*_ARG) - * ReturnArg - Where the next arg is returned - * - * RETURN: Status, and an op object containing the next argument. - * - * DESCRIPTION: Get next argument (including complex list arguments that require - * pushing the parser stack) - * - ******************************************************************************/ - -ACPI_STATUS -AcpiPsGetNextArg ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_STATE *ParserState, - UINT32 ArgType, - ACPI_PARSE_OBJECT **ReturnArg) -{ - ACPI_PARSE_OBJECT *Arg = NULL; - ACPI_PARSE_OBJECT *Prev = NULL; - ACPI_PARSE_OBJECT *Field; - UINT32 Subop; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE_PTR (PsGetNextArg, ParserState); - - - switch (ArgType) - { - case ARGP_BYTEDATA: - case ARGP_WORDDATA: - case ARGP_DWORDDATA: - case ARGP_CHARLIST: - case ARGP_NAME: - case ARGP_NAMESTRING: - - /* Constants, strings, and namestrings are all the same size */ - - Arg = AcpiPsAllocOp (AML_BYTE_OP); - if (!Arg) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - AcpiPsGetNextSimpleArg (ParserState, ArgType, Arg); - break; - - - case ARGP_PKGLENGTH: - - /* Package length, nothing returned */ - - ParserState->PkgEnd = AcpiPsGetNextPackageEnd (ParserState); - break; - - - case ARGP_FIELDLIST: - - if (ParserState->Aml < ParserState->PkgEnd) - { - /* Non-empty list */ - - while (ParserState->Aml < ParserState->PkgEnd) - { - Field = AcpiPsGetNextField (ParserState); - if (!Field) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - if (Prev) - { - Prev->Common.Next = Field; - } - else - { - Arg = Field; - } - Prev = Field; - } - - /* Skip to End of byte data */ - - ParserState->Aml = ParserState->PkgEnd; - } - break; - - - case ARGP_BYTELIST: - - if (ParserState->Aml < ParserState->PkgEnd) - { - /* Non-empty list */ - - Arg = AcpiPsAllocOp (AML_INT_BYTELIST_OP); - if (!Arg) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Fill in bytelist data */ - - Arg->Common.Value.Size = (UINT32) - ACPI_PTR_DIFF (ParserState->PkgEnd, ParserState->Aml); - Arg->Named.Data = ParserState->Aml; - - /* Skip to End of byte data */ - - ParserState->Aml = ParserState->PkgEnd; - } - break; - - - case ARGP_TARGET: - case ARGP_SUPERNAME: - case ARGP_SIMPLENAME: - - Subop = AcpiPsPeekOpcode (ParserState); - if (Subop == 0 || - AcpiPsIsLeadingChar (Subop) || - AcpiPsIsPrefixChar (Subop)) - { - /* NullName or NameString */ - - Arg = AcpiPsAllocOp (AML_INT_NAMEPATH_OP); - if (!Arg) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* To support SuperName arg of Unload */ - - if (WalkState->Opcode == AML_UNLOAD_OP) - { - Status = AcpiPsGetNextNamepath (WalkState, ParserState, Arg, 1); - - /* - * If the SuperName arg of Unload is a method call, - * we have restored the AML pointer, just free this Arg - */ - if (Arg->Common.AmlOpcode == AML_INT_METHODCALL_OP) - { - AcpiPsFreeOp (Arg); - Arg = NULL; - } - } - else - { - Status = AcpiPsGetNextNamepath (WalkState, ParserState, Arg, 0); - } - } - else - { - /* Single complex argument, nothing returned */ - - WalkState->ArgCount = 1; - } - break; - - - case ARGP_DATAOBJ: - case ARGP_TERMARG: - - /* Single complex argument, nothing returned */ - - WalkState->ArgCount = 1; - break; - - - case ARGP_DATAOBJLIST: - case ARGP_TERMLIST: - case ARGP_OBJLIST: - - if (ParserState->Aml < ParserState->PkgEnd) - { - /* Non-empty list of variable arguments, nothing returned */ - - WalkState->ArgCount = ACPI_VAR_ARGS; - } - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Invalid ArgType: %X", ArgType)); - Status = AE_AML_OPERAND_TYPE; - break; - } - - *ReturnArg = Arg; - return_ACPI_STATUS (Status); -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/parser/psloop.c b/l4/pkg/acpica/lib-acpi/src/acpica/parser/psloop.c deleted file mode 100644 index 4171e0dc6..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/parser/psloop.c +++ /dev/null @@ -1,1341 +0,0 @@ -/****************************************************************************** - * - * Module Name: psloop - Main AML parse loop - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -/* - * Parse the AML and build an operation tree as most interpreters, (such as - * Perl) do. Parsing is done by hand rather than with a YACC generated parser - * to tightly constrain stack and dynamic memory usage. Parsing is kept - * flexible and the code fairly compact by parsing based on a list of AML - * opcode templates in AmlOpInfo[]. - */ - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "acdispat.h" -#include "amlcode.h" - -#define _COMPONENT ACPI_PARSER - ACPI_MODULE_NAME ("psloop") - -static UINT32 AcpiGbl_Depth = 0; - - -/* Local prototypes */ - -static ACPI_STATUS -AcpiPsGetAmlOpcode ( - ACPI_WALK_STATE *WalkState); - -static ACPI_STATUS -AcpiPsBuildNamedOp ( - ACPI_WALK_STATE *WalkState, - UINT8 *AmlOpStart, - ACPI_PARSE_OBJECT *UnnamedOp, - ACPI_PARSE_OBJECT **Op); - -static ACPI_STATUS -AcpiPsCreateOp ( - ACPI_WALK_STATE *WalkState, - UINT8 *AmlOpStart, - ACPI_PARSE_OBJECT **NewOp); - -static ACPI_STATUS -AcpiPsGetArguments ( - ACPI_WALK_STATE *WalkState, - UINT8 *AmlOpStart, - ACPI_PARSE_OBJECT *Op); - -static ACPI_STATUS -AcpiPsCompleteOp ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT **Op, - ACPI_STATUS Status); - -static ACPI_STATUS -AcpiPsCompleteFinalOp ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op, - ACPI_STATUS Status); - -static void -AcpiPsLinkModuleCode ( - ACPI_PARSE_OBJECT *ParentOp, - UINT8 *AmlStart, - UINT32 AmlLength, - ACPI_OWNER_ID OwnerId); - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetAmlOpcode - * - * PARAMETERS: WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Extract the next AML opcode from the input stream. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiPsGetAmlOpcode ( - ACPI_WALK_STATE *WalkState) -{ - - ACPI_FUNCTION_TRACE_PTR (PsGetAmlOpcode, WalkState); - - - WalkState->AmlOffset = (UINT32) ACPI_PTR_DIFF (WalkState->ParserState.Aml, - WalkState->ParserState.AmlStart); - WalkState->Opcode = AcpiPsPeekOpcode (&(WalkState->ParserState)); - - /* - * First cut to determine what we have found: - * 1) A valid AML opcode - * 2) A name string - * 3) An unknown/invalid opcode - */ - WalkState->OpInfo = AcpiPsGetOpcodeInfo (WalkState->Opcode); - - switch (WalkState->OpInfo->Class) - { - case AML_CLASS_ASCII: - case AML_CLASS_PREFIX: - /* - * Starts with a valid prefix or ASCII char, this is a name - * string. Convert the bare name string to a namepath. - */ - WalkState->Opcode = AML_INT_NAMEPATH_OP; - WalkState->ArgTypes = ARGP_NAMESTRING; - break; - - case AML_CLASS_UNKNOWN: - - /* The opcode is unrecognized. Just skip unknown opcodes */ - - ACPI_ERROR ((AE_INFO, - "Found unknown opcode %X at AML address %p offset %X, ignoring", - WalkState->Opcode, WalkState->ParserState.Aml, WalkState->AmlOffset)); - - ACPI_DUMP_BUFFER (WalkState->ParserState.Aml, 128); - - /* Assume one-byte bad opcode */ - - WalkState->ParserState.Aml++; - return_ACPI_STATUS (AE_CTRL_PARSE_CONTINUE); - - default: - - /* Found opcode info, this is a normal opcode */ - - WalkState->ParserState.Aml += AcpiPsGetOpcodeSize (WalkState->Opcode); - WalkState->ArgTypes = WalkState->OpInfo->ParseArgs; - break; - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsBuildNamedOp - * - * PARAMETERS: WalkState - Current state - * AmlOpStart - Begin of named Op in AML - * UnnamedOp - Early Op (not a named Op) - * Op - Returned Op - * - * RETURN: Status - * - * DESCRIPTION: Parse a named Op - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiPsBuildNamedOp ( - ACPI_WALK_STATE *WalkState, - UINT8 *AmlOpStart, - ACPI_PARSE_OBJECT *UnnamedOp, - ACPI_PARSE_OBJECT **Op) -{ - ACPI_STATUS Status = AE_OK; - ACPI_PARSE_OBJECT *Arg = NULL; - - - ACPI_FUNCTION_TRACE_PTR (PsBuildNamedOp, WalkState); - - - UnnamedOp->Common.Value.Arg = NULL; - UnnamedOp->Common.ArgListLength = 0; - UnnamedOp->Common.AmlOpcode = WalkState->Opcode; - - /* - * Get and append arguments until we find the node that contains - * the name (the type ARGP_NAME). - */ - while (GET_CURRENT_ARG_TYPE (WalkState->ArgTypes) && - (GET_CURRENT_ARG_TYPE (WalkState->ArgTypes) != ARGP_NAME)) - { - Status = AcpiPsGetNextArg (WalkState, &(WalkState->ParserState), - GET_CURRENT_ARG_TYPE (WalkState->ArgTypes), &Arg); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - AcpiPsAppendArg (UnnamedOp, Arg); - INCREMENT_ARG_LIST (WalkState->ArgTypes); - } - - /* - * Make sure that we found a NAME and didn't run out of arguments - */ - if (!GET_CURRENT_ARG_TYPE (WalkState->ArgTypes)) - { - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } - - /* We know that this arg is a name, move to next arg */ - - INCREMENT_ARG_LIST (WalkState->ArgTypes); - - /* - * Find the object. This will either insert the object into - * the namespace or simply look it up - */ - WalkState->Op = NULL; - - Status = WalkState->DescendingCallback (WalkState, Op); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, "During name lookup/catalog")); - return_ACPI_STATUS (Status); - } - - if (!*Op) - { - return_ACPI_STATUS (AE_CTRL_PARSE_CONTINUE); - } - - Status = AcpiPsNextParseState (WalkState, *Op, Status); - if (ACPI_FAILURE (Status)) - { - if (Status == AE_CTRL_PENDING) - { - return_ACPI_STATUS (AE_CTRL_PARSE_PENDING); - } - return_ACPI_STATUS (Status); - } - - AcpiPsAppendArg (*Op, UnnamedOp->Common.Value.Arg); - AcpiGbl_Depth++; - - if ((*Op)->Common.AmlOpcode == AML_REGION_OP || - (*Op)->Common.AmlOpcode == AML_DATA_REGION_OP) - { - /* - * Defer final parsing of an OperationRegion body, because we don't - * have enough info in the first pass to parse it correctly (i.e., - * there may be method calls within the TermArg elements of the body.) - * - * However, we must continue parsing because the opregion is not a - * standalone package -- we don't know where the end is at this point. - * - * (Length is unknown until parse of the body complete) - */ - (*Op)->Named.Data = AmlOpStart; - (*Op)->Named.Length = 0; - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsCreateOp - * - * PARAMETERS: WalkState - Current state - * AmlOpStart - Op start in AML - * NewOp - Returned Op - * - * RETURN: Status - * - * DESCRIPTION: Get Op from AML - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiPsCreateOp ( - ACPI_WALK_STATE *WalkState, - UINT8 *AmlOpStart, - ACPI_PARSE_OBJECT **NewOp) -{ - ACPI_STATUS Status = AE_OK; - ACPI_PARSE_OBJECT *Op; - ACPI_PARSE_OBJECT *NamedOp = NULL; - ACPI_PARSE_OBJECT *ParentScope; - UINT8 ArgumentCount; - const ACPI_OPCODE_INFO *OpInfo; - - - ACPI_FUNCTION_TRACE_PTR (PsCreateOp, WalkState); - - - Status = AcpiPsGetAmlOpcode (WalkState); - if (Status == AE_CTRL_PARSE_CONTINUE) - { - return_ACPI_STATUS (AE_CTRL_PARSE_CONTINUE); - } - - /* Create Op structure and append to parent's argument list */ - - WalkState->OpInfo = AcpiPsGetOpcodeInfo (WalkState->Opcode); - Op = AcpiPsAllocOp (WalkState->Opcode); - if (!Op) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - if (WalkState->OpInfo->Flags & AML_NAMED) - { - Status = AcpiPsBuildNamedOp (WalkState, AmlOpStart, Op, &NamedOp); - AcpiPsFreeOp (Op); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - *NewOp = NamedOp; - return_ACPI_STATUS (AE_OK); - } - - /* Not a named opcode, just allocate Op and append to parent */ - - if (WalkState->OpInfo->Flags & AML_CREATE) - { - /* - * Backup to beginning of CreateXXXfield declaration - * BodyLength is unknown until we parse the body - */ - Op->Named.Data = AmlOpStart; - Op->Named.Length = 0; - } - - if (WalkState->Opcode == AML_BANK_FIELD_OP) - { - /* - * Backup to beginning of BankField declaration - * BodyLength is unknown until we parse the body - */ - Op->Named.Data = AmlOpStart; - Op->Named.Length = 0; - } - - ParentScope = AcpiPsGetParentScope (&(WalkState->ParserState)); - AcpiPsAppendArg (ParentScope, Op); - - if (ParentScope) - { - OpInfo = AcpiPsGetOpcodeInfo (ParentScope->Common.AmlOpcode); - if (OpInfo->Flags & AML_HAS_TARGET) - { - ArgumentCount = AcpiPsGetArgumentCount (OpInfo->Type); - if (ParentScope->Common.ArgListLength > ArgumentCount) - { - Op->Common.Flags |= ACPI_PARSEOP_TARGET; - } - } - else if (ParentScope->Common.AmlOpcode == AML_INCREMENT_OP) - { - Op->Common.Flags |= ACPI_PARSEOP_TARGET; - } - } - - if (WalkState->DescendingCallback != NULL) - { - /* - * Find the object. This will either insert the object into - * the namespace or simply look it up - */ - WalkState->Op = *NewOp = Op; - - Status = WalkState->DescendingCallback (WalkState, &Op); - Status = AcpiPsNextParseState (WalkState, Op, Status); - if (Status == AE_CTRL_PENDING) - { - Status = AE_CTRL_PARSE_PENDING; - } - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetArguments - * - * PARAMETERS: WalkState - Current state - * AmlOpStart - Op start in AML - * Op - Current Op - * - * RETURN: Status - * - * DESCRIPTION: Get arguments for passed Op. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiPsGetArguments ( - ACPI_WALK_STATE *WalkState, - UINT8 *AmlOpStart, - ACPI_PARSE_OBJECT *Op) -{ - ACPI_STATUS Status = AE_OK; - ACPI_PARSE_OBJECT *Arg = NULL; - const ACPI_OPCODE_INFO *OpInfo; - - - ACPI_FUNCTION_TRACE_PTR (PsGetArguments, WalkState); - - - switch (Op->Common.AmlOpcode) - { - case AML_BYTE_OP: /* AML_BYTEDATA_ARG */ - case AML_WORD_OP: /* AML_WORDDATA_ARG */ - case AML_DWORD_OP: /* AML_DWORDATA_ARG */ - case AML_QWORD_OP: /* AML_QWORDATA_ARG */ - case AML_STRING_OP: /* AML_ASCIICHARLIST_ARG */ - - /* Fill in constant or string argument directly */ - - AcpiPsGetNextSimpleArg (&(WalkState->ParserState), - GET_CURRENT_ARG_TYPE (WalkState->ArgTypes), Op); - break; - - case AML_INT_NAMEPATH_OP: /* AML_NAMESTRING_ARG */ - - Status = AcpiPsGetNextNamepath (WalkState, &(WalkState->ParserState), Op, 1); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - WalkState->ArgTypes = 0; - break; - - default: - /* - * Op is not a constant or string, append each argument to the Op - */ - while (GET_CURRENT_ARG_TYPE (WalkState->ArgTypes) && !WalkState->ArgCount) - { - WalkState->AmlOffset = (UINT32) ACPI_PTR_DIFF (WalkState->ParserState.Aml, - WalkState->ParserState.AmlStart); - - Status = AcpiPsGetNextArg (WalkState, &(WalkState->ParserState), - GET_CURRENT_ARG_TYPE (WalkState->ArgTypes), &Arg); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - if (Arg) - { - Arg->Common.AmlOffset = WalkState->AmlOffset; - AcpiPsAppendArg (Op, Arg); - } - - INCREMENT_ARG_LIST (WalkState->ArgTypes); - } - - - /* - * Handle executable code at "module-level". This refers to - * executable opcodes that appear outside of any control method. - */ - if ((WalkState->PassNumber <= ACPI_IMODE_LOAD_PASS2) && - ((WalkState->ParseFlags & ACPI_PARSE_DISASSEMBLE) == 0)) - { - /* - * We want to skip If/Else/While constructs during Pass1 because we - * want to actually conditionally execute the code during Pass2. - * - * Except for disassembly, where we always want to walk the - * If/Else/While packages - */ - switch (Op->Common.AmlOpcode) - { - case AML_IF_OP: - case AML_ELSE_OP: - case AML_WHILE_OP: - - /* - * Currently supported module-level opcodes are: - * IF/ELSE/WHILE. These appear to be the most common, - * and easiest to support since they open an AML - * package. - */ - if (WalkState->PassNumber == ACPI_IMODE_LOAD_PASS1) - { - AcpiPsLinkModuleCode (Op->Common.Parent, AmlOpStart, - (UINT32) (WalkState->ParserState.PkgEnd - AmlOpStart), - WalkState->OwnerId); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "Pass1: Skipping an If/Else/While body\n")); - - /* Skip body of if/else/while in pass 1 */ - - WalkState->ParserState.Aml = WalkState->ParserState.PkgEnd; - WalkState->ArgCount = 0; - break; - - default: - /* - * Check for an unsupported executable opcode at module - * level. We must be in PASS1, the parent must be a SCOPE, - * The opcode class must be EXECUTE, and the opcode must - * not be an argument to another opcode. - */ - if ((WalkState->PassNumber == ACPI_IMODE_LOAD_PASS1) && - (Op->Common.Parent->Common.AmlOpcode == AML_SCOPE_OP)) - { - OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); - if ((OpInfo->Class == AML_CLASS_EXECUTE) && - (!Arg)) - { - ACPI_WARNING ((AE_INFO, - "Detected an unsupported executable opcode " - "at module-level: [0x%.4X] at table offset 0x%.4X", - Op->Common.AmlOpcode, - (UINT32) (ACPI_PTR_DIFF (AmlOpStart, - WalkState->ParserState.AmlStart) + - sizeof (ACPI_TABLE_HEADER)))); - } - } - break; - } - } - - /* Special processing for certain opcodes */ - - switch (Op->Common.AmlOpcode) - { - case AML_METHOD_OP: - /* - * Skip parsing of control method because we don't have enough - * info in the first pass to parse it correctly. - * - * Save the length and address of the body - */ - Op->Named.Data = WalkState->ParserState.Aml; - Op->Named.Length = (UINT32) - (WalkState->ParserState.PkgEnd - WalkState->ParserState.Aml); - - /* Skip body of method */ - - WalkState->ParserState.Aml = WalkState->ParserState.PkgEnd; - WalkState->ArgCount = 0; - break; - - case AML_BUFFER_OP: - case AML_PACKAGE_OP: - case AML_VAR_PACKAGE_OP: - - if ((Op->Common.Parent) && - (Op->Common.Parent->Common.AmlOpcode == AML_NAME_OP) && - (WalkState->PassNumber <= ACPI_IMODE_LOAD_PASS2)) - { - /* - * Skip parsing of Buffers and Packages because we don't have - * enough info in the first pass to parse them correctly. - */ - Op->Named.Data = AmlOpStart; - Op->Named.Length = (UINT32) - (WalkState->ParserState.PkgEnd - AmlOpStart); - - /* Skip body */ - - WalkState->ParserState.Aml = WalkState->ParserState.PkgEnd; - WalkState->ArgCount = 0; - } - break; - - case AML_WHILE_OP: - - if (WalkState->ControlState) - { - WalkState->ControlState->Control.PackageEnd = - WalkState->ParserState.PkgEnd; - } - break; - - default: - - /* No action for all other opcodes */ - break; - } - - break; - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsLinkModuleCode - * - * PARAMETERS: ParentOp - Parent parser op - * AmlStart - Pointer to the AML - * AmlLength - Length of executable AML - * OwnerId - OwnerId of module level code - * - * RETURN: None. - * - * DESCRIPTION: Wrap the module-level code with a method object and link the - * object to the global list. Note, the mutex field of the method - * object is used to link multiple module-level code objects. - * - ******************************************************************************/ - -static void -AcpiPsLinkModuleCode ( - ACPI_PARSE_OBJECT *ParentOp, - UINT8 *AmlStart, - UINT32 AmlLength, - ACPI_OWNER_ID OwnerId) -{ - ACPI_OPERAND_OBJECT *Prev; - ACPI_OPERAND_OBJECT *Next; - ACPI_OPERAND_OBJECT *MethodObj; - ACPI_NAMESPACE_NODE *ParentNode; - - - /* Get the tail of the list */ - - Prev = Next = AcpiGbl_ModuleCodeList; - while (Next) - { - Prev = Next; - Next = Next->Method.Mutex; - } - - /* - * Insert the module level code into the list. Merge it if it is - * adjacent to the previous element. - */ - if (!Prev || - ((Prev->Method.AmlStart + Prev->Method.AmlLength) != AmlStart)) - { - /* Create, initialize, and link a new temporary method object */ - - MethodObj = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD); - if (!MethodObj) - { - return; - } - - if (ParentOp->Common.Node) - { - ParentNode = ParentOp->Common.Node; - } - else - { - ParentNode = AcpiGbl_RootNode; - } - - MethodObj->Method.AmlStart = AmlStart; - MethodObj->Method.AmlLength = AmlLength; - MethodObj->Method.OwnerId = OwnerId; - MethodObj->Method.Flags |= AOPOBJ_MODULE_LEVEL; - - /* - * Save the parent node in NextObject. This is cheating, but we - * don't want to expand the method object. - */ - MethodObj->Method.NextObject = - ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, ParentNode); - - if (!Prev) - { - AcpiGbl_ModuleCodeList = MethodObj; - } - else - { - Prev->Method.Mutex = MethodObj; - } - } - else - { - Prev->Method.AmlLength += AmlLength; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsCompleteOp - * - * PARAMETERS: WalkState - Current state - * Op - Returned Op - * Status - Parse status before complete Op - * - * RETURN: Status - * - * DESCRIPTION: Complete Op - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiPsCompleteOp ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT **Op, - ACPI_STATUS Status) -{ - ACPI_STATUS Status2; - - - ACPI_FUNCTION_TRACE_PTR (PsCompleteOp, WalkState); - - - /* - * Finished one argument of the containing scope - */ - WalkState->ParserState.Scope->ParseScope.ArgCount--; - - /* Close this Op (will result in parse subtree deletion) */ - - Status2 = AcpiPsCompleteThisOp (WalkState, *Op); - if (ACPI_FAILURE (Status2)) - { - return_ACPI_STATUS (Status2); - } - - *Op = NULL; - - switch (Status) - { - case AE_OK: - break; - - - case AE_CTRL_TRANSFER: - - /* We are about to transfer to a called method */ - - WalkState->PrevOp = NULL; - WalkState->PrevArgTypes = WalkState->ArgTypes; - return_ACPI_STATUS (Status); - - - case AE_CTRL_END: - - AcpiPsPopScope (&(WalkState->ParserState), Op, - &WalkState->ArgTypes, &WalkState->ArgCount); - - if (*Op) - { - WalkState->Op = *Op; - WalkState->OpInfo = AcpiPsGetOpcodeInfo ((*Op)->Common.AmlOpcode); - WalkState->Opcode = (*Op)->Common.AmlOpcode; - - Status = WalkState->AscendingCallback (WalkState); - Status = AcpiPsNextParseState (WalkState, *Op, Status); - - Status2 = AcpiPsCompleteThisOp (WalkState, *Op); - if (ACPI_FAILURE (Status2)) - { - return_ACPI_STATUS (Status2); - } - } - - Status = AE_OK; - break; - - - case AE_CTRL_BREAK: - case AE_CTRL_CONTINUE: - - /* Pop off scopes until we find the While */ - - while (!(*Op) || ((*Op)->Common.AmlOpcode != AML_WHILE_OP)) - { - AcpiPsPopScope (&(WalkState->ParserState), Op, - &WalkState->ArgTypes, &WalkState->ArgCount); - } - - /* Close this iteration of the While loop */ - - WalkState->Op = *Op; - WalkState->OpInfo = AcpiPsGetOpcodeInfo ((*Op)->Common.AmlOpcode); - WalkState->Opcode = (*Op)->Common.AmlOpcode; - - Status = WalkState->AscendingCallback (WalkState); - Status = AcpiPsNextParseState (WalkState, *Op, Status); - - Status2 = AcpiPsCompleteThisOp (WalkState, *Op); - if (ACPI_FAILURE (Status2)) - { - return_ACPI_STATUS (Status2); - } - - Status = AE_OK; - break; - - - case AE_CTRL_TERMINATE: - - /* Clean up */ - do - { - if (*Op) - { - Status2 = AcpiPsCompleteThisOp (WalkState, *Op); - if (ACPI_FAILURE (Status2)) - { - return_ACPI_STATUS (Status2); - } - - AcpiUtDeleteGenericState ( - AcpiUtPopGenericState (&WalkState->ControlState)); - } - - AcpiPsPopScope (&(WalkState->ParserState), Op, - &WalkState->ArgTypes, &WalkState->ArgCount); - - } while (*Op); - - return_ACPI_STATUS (AE_OK); - - - default: /* All other non-AE_OK status */ - - do - { - if (*Op) - { - Status2 = AcpiPsCompleteThisOp (WalkState, *Op); - if (ACPI_FAILURE (Status2)) - { - return_ACPI_STATUS (Status2); - } - } - - AcpiPsPopScope (&(WalkState->ParserState), Op, - &WalkState->ArgTypes, &WalkState->ArgCount); - - } while (*Op); - - -#if 0 - /* - * TBD: Cleanup parse ops on error - */ - if (*Op == NULL) - { - AcpiPsPopScope (ParserState, Op, - &WalkState->ArgTypes, &WalkState->ArgCount); - } -#endif - WalkState->PrevOp = NULL; - WalkState->PrevArgTypes = WalkState->ArgTypes; - return_ACPI_STATUS (Status); - } - - /* This scope complete? */ - - if (AcpiPsHasCompletedScope (&(WalkState->ParserState))) - { - AcpiPsPopScope (&(WalkState->ParserState), Op, - &WalkState->ArgTypes, &WalkState->ArgCount); - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Popped scope, Op=%p\n", *Op)); - } - else - { - *Op = NULL; - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsCompleteFinalOp - * - * PARAMETERS: WalkState - Current state - * Op - Current Op - * Status - Current parse status before complete last - * Op - * - * RETURN: Status - * - * DESCRIPTION: Complete last Op. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiPsCompleteFinalOp ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op, - ACPI_STATUS Status) -{ - ACPI_STATUS Status2; - - - ACPI_FUNCTION_TRACE_PTR (PsCompleteFinalOp, WalkState); - - - /* - * Complete the last Op (if not completed), and clear the scope stack. - * It is easily possible to end an AML "package" with an unbounded number - * of open scopes (such as when several ASL blocks are closed with - * sequential closing braces). We want to terminate each one cleanly. - */ - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "AML package complete at Op %p\n", Op)); - do - { - if (Op) - { - if (WalkState->AscendingCallback != NULL) - { - WalkState->Op = Op; - WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); - WalkState->Opcode = Op->Common.AmlOpcode; - - Status = WalkState->AscendingCallback (WalkState); - Status = AcpiPsNextParseState (WalkState, Op, Status); - if (Status == AE_CTRL_PENDING) - { - Status = AcpiPsCompleteOp (WalkState, &Op, AE_OK); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - if (Status == AE_CTRL_TERMINATE) - { - Status = AE_OK; - - /* Clean up */ - do - { - if (Op) - { - Status2 = AcpiPsCompleteThisOp (WalkState, Op); - if (ACPI_FAILURE (Status2)) - { - return_ACPI_STATUS (Status2); - } - } - - AcpiPsPopScope (&(WalkState->ParserState), &Op, - &WalkState->ArgTypes, &WalkState->ArgCount); - - } while (Op); - - return_ACPI_STATUS (Status); - } - - else if (ACPI_FAILURE (Status)) - { - /* First error is most important */ - - (void) AcpiPsCompleteThisOp (WalkState, Op); - return_ACPI_STATUS (Status); - } - } - - Status2 = AcpiPsCompleteThisOp (WalkState, Op); - if (ACPI_FAILURE (Status2)) - { - return_ACPI_STATUS (Status2); - } - } - - AcpiPsPopScope (&(WalkState->ParserState), &Op, &WalkState->ArgTypes, - &WalkState->ArgCount); - - } while (Op); - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsParseLoop - * - * PARAMETERS: WalkState - Current state - * - * RETURN: Status - * - * DESCRIPTION: Parse AML (pointed to by the current parser state) and return - * a tree of ops. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiPsParseLoop ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status = AE_OK; - ACPI_PARSE_OBJECT *Op = NULL; /* current op */ - ACPI_PARSE_STATE *ParserState; - UINT8 *AmlOpStart = NULL; - - - ACPI_FUNCTION_TRACE_PTR (PsParseLoop, WalkState); - - - if (WalkState->DescendingCallback == NULL) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - ParserState = &WalkState->ParserState; - WalkState->ArgTypes = 0; - -#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY)) - - if (WalkState->WalkType & ACPI_WALK_METHOD_RESTART) - { - /* We are restarting a preempted control method */ - - if (AcpiPsHasCompletedScope (ParserState)) - { - /* - * We must check if a predicate to an IF or WHILE statement - * was just completed - */ - if ((ParserState->Scope->ParseScope.Op) && - ((ParserState->Scope->ParseScope.Op->Common.AmlOpcode == AML_IF_OP) || - (ParserState->Scope->ParseScope.Op->Common.AmlOpcode == AML_WHILE_OP)) && - (WalkState->ControlState) && - (WalkState->ControlState->Common.State == - ACPI_CONTROL_PREDICATE_EXECUTING)) - { - /* - * A predicate was just completed, get the value of the - * predicate and branch based on that value - */ - WalkState->Op = NULL; - Status = AcpiDsGetPredicateValue (WalkState, ACPI_TO_POINTER (TRUE)); - if (ACPI_FAILURE (Status) && - ((Status & AE_CODE_MASK) != AE_CODE_CONTROL)) - { - if (Status == AE_AML_NO_RETURN_VALUE) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Invoked method did not return a value")); - - } - - ACPI_EXCEPTION ((AE_INFO, Status, "GetPredicate Failed")); - return_ACPI_STATUS (Status); - } - - Status = AcpiPsNextParseState (WalkState, Op, Status); - } - - AcpiPsPopScope (ParserState, &Op, - &WalkState->ArgTypes, &WalkState->ArgCount); - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Popped scope, Op=%p\n", Op)); - } - else if (WalkState->PrevOp) - { - /* We were in the middle of an op */ - - Op = WalkState->PrevOp; - WalkState->ArgTypes = WalkState->PrevArgTypes; - } - } -#endif - - /* Iterative parsing loop, while there is more AML to process: */ - - while ((ParserState->Aml < ParserState->AmlEnd) || (Op)) - { - AmlOpStart = ParserState->Aml; - if (!Op) - { - Status = AcpiPsCreateOp (WalkState, AmlOpStart, &Op); - if (ACPI_FAILURE (Status)) - { - if (Status == AE_CTRL_PARSE_CONTINUE) - { - continue; - } - - if (Status == AE_CTRL_PARSE_PENDING) - { - Status = AE_OK; - } - - Status = AcpiPsCompleteOp (WalkState, &Op, Status); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - continue; - } - - Op->Common.AmlOffset = WalkState->AmlOffset; - - if (WalkState->OpInfo) - { - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "Opcode %4.4X [%s] Op %p Aml %p AmlOffset %5.5X\n", - (UINT32) Op->Common.AmlOpcode, WalkState->OpInfo->Name, - Op, ParserState->Aml, Op->Common.AmlOffset)); - } - } - - - /* - * Start ArgCount at zero because we don't know if there are - * any args yet - */ - WalkState->ArgCount = 0; - - /* Are there any arguments that must be processed? */ - - if (WalkState->ArgTypes) - { - /* Get arguments */ - - Status = AcpiPsGetArguments (WalkState, AmlOpStart, Op); - if (ACPI_FAILURE (Status)) - { - Status = AcpiPsCompleteOp (WalkState, &Op, Status); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - continue; - } - } - - /* Check for arguments that need to be processed */ - - if (WalkState->ArgCount) - { - /* - * There are arguments (complex ones), push Op and - * prepare for argument - */ - Status = AcpiPsPushScope (ParserState, Op, - WalkState->ArgTypes, WalkState->ArgCount); - if (ACPI_FAILURE (Status)) - { - Status = AcpiPsCompleteOp (WalkState, &Op, Status); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - continue; - } - - Op = NULL; - continue; - } - - /* - * All arguments have been processed -- Op is complete, - * prepare for next - */ - WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); - if (WalkState->OpInfo->Flags & AML_NAMED) - { - if (AcpiGbl_Depth) - { - AcpiGbl_Depth--; - } - - if (Op->Common.AmlOpcode == AML_REGION_OP || - Op->Common.AmlOpcode == AML_DATA_REGION_OP) - { - /* - * Skip parsing of control method or opregion body, - * because we don't have enough info in the first pass - * to parse them correctly. - * - * Completed parsing an OpRegion declaration, we now - * know the length. - */ - Op->Named.Length = (UINT32) (ParserState->Aml - Op->Named.Data); - } - } - - if (WalkState->OpInfo->Flags & AML_CREATE) - { - /* - * Backup to beginning of CreateXXXfield declaration (1 for - * Opcode) - * - * BodyLength is unknown until we parse the body - */ - Op->Named.Length = (UINT32) (ParserState->Aml - Op->Named.Data); - } - - if (Op->Common.AmlOpcode == AML_BANK_FIELD_OP) - { - /* - * Backup to beginning of BankField declaration - * - * BodyLength is unknown until we parse the body - */ - Op->Named.Length = (UINT32) (ParserState->Aml - Op->Named.Data); - } - - /* This op complete, notify the dispatcher */ - - if (WalkState->AscendingCallback != NULL) - { - WalkState->Op = Op; - WalkState->Opcode = Op->Common.AmlOpcode; - - Status = WalkState->AscendingCallback (WalkState); - Status = AcpiPsNextParseState (WalkState, Op, Status); - if (Status == AE_CTRL_PENDING) - { - Status = AE_OK; - } - } - - Status = AcpiPsCompleteOp (WalkState, &Op, Status); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - } /* while ParserState->Aml */ - - Status = AcpiPsCompleteFinalOp (WalkState, Op, Status); - return_ACPI_STATUS (Status); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/parser/psopcode.c b/l4/pkg/acpica/lib-acpi/src/acpica/parser/psopcode.c deleted file mode 100644 index d107c5237..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/parser/psopcode.c +++ /dev/null @@ -1,589 +0,0 @@ -/****************************************************************************** - * - * Module Name: psopcode - Parser/Interpreter opcode information table - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "acopcode.h" -#include "amlcode.h" - - -#define _COMPONENT ACPI_PARSER - ACPI_MODULE_NAME ("psopcode") - - -static const UINT8 AcpiGbl_ArgumentCount[] = {0,1,1,1,1,2,2,2,2,3,3,6}; - - -/******************************************************************************* - * - * NAME: AcpiGbl_AmlOpInfo - * - * DESCRIPTION: Opcode table. Each entry contains - * The name is a simple ascii string, the operand specifier is an - * ascii string with one letter per operand. The letter specifies - * the operand type. - * - ******************************************************************************/ - -/* - * Summary of opcode types/flags - * - - Opcodes that have associated namespace objects (AML_NSOBJECT flag) - - AML_SCOPE_OP - AML_DEVICE_OP - AML_THERMAL_ZONE_OP - AML_METHOD_OP - AML_POWER_RES_OP - AML_PROCESSOR_OP - AML_FIELD_OP - AML_INDEX_FIELD_OP - AML_BANK_FIELD_OP - AML_NAME_OP - AML_ALIAS_OP - AML_MUTEX_OP - AML_EVENT_OP - AML_REGION_OP - AML_CREATE_FIELD_OP - AML_CREATE_BIT_FIELD_OP - AML_CREATE_BYTE_FIELD_OP - AML_CREATE_WORD_FIELD_OP - AML_CREATE_DWORD_FIELD_OP - AML_CREATE_QWORD_FIELD_OP - AML_INT_NAMEDFIELD_OP - AML_INT_METHODCALL_OP - AML_INT_NAMEPATH_OP - - Opcodes that are "namespace" opcodes (AML_NSOPCODE flag) - - AML_SCOPE_OP - AML_DEVICE_OP - AML_THERMAL_ZONE_OP - AML_METHOD_OP - AML_POWER_RES_OP - AML_PROCESSOR_OP - AML_FIELD_OP - AML_INDEX_FIELD_OP - AML_BANK_FIELD_OP - AML_NAME_OP - AML_ALIAS_OP - AML_MUTEX_OP - AML_EVENT_OP - AML_REGION_OP - AML_INT_NAMEDFIELD_OP - - Opcodes that have an associated namespace node (AML_NSNODE flag) - - AML_SCOPE_OP - AML_DEVICE_OP - AML_THERMAL_ZONE_OP - AML_METHOD_OP - AML_POWER_RES_OP - AML_PROCESSOR_OP - AML_NAME_OP - AML_ALIAS_OP - AML_MUTEX_OP - AML_EVENT_OP - AML_REGION_OP - AML_CREATE_FIELD_OP - AML_CREATE_BIT_FIELD_OP - AML_CREATE_BYTE_FIELD_OP - AML_CREATE_WORD_FIELD_OP - AML_CREATE_DWORD_FIELD_OP - AML_CREATE_QWORD_FIELD_OP - AML_INT_NAMEDFIELD_OP - AML_INT_METHODCALL_OP - AML_INT_NAMEPATH_OP - - Opcodes that define named ACPI objects (AML_NAMED flag) - - AML_SCOPE_OP - AML_DEVICE_OP - AML_THERMAL_ZONE_OP - AML_METHOD_OP - AML_POWER_RES_OP - AML_PROCESSOR_OP - AML_NAME_OP - AML_ALIAS_OP - AML_MUTEX_OP - AML_EVENT_OP - AML_REGION_OP - AML_INT_NAMEDFIELD_OP - - Opcodes that contain executable AML as part of the definition that - must be deferred until needed - - AML_METHOD_OP - AML_VAR_PACKAGE_OP - AML_CREATE_FIELD_OP - AML_CREATE_BIT_FIELD_OP - AML_CREATE_BYTE_FIELD_OP - AML_CREATE_WORD_FIELD_OP - AML_CREATE_DWORD_FIELD_OP - AML_CREATE_QWORD_FIELD_OP - AML_REGION_OP - AML_BUFFER_OP - - Field opcodes - - AML_CREATE_FIELD_OP - AML_FIELD_OP - AML_INDEX_FIELD_OP - AML_BANK_FIELD_OP - - Field "Create" opcodes - - AML_CREATE_FIELD_OP - AML_CREATE_BIT_FIELD_OP - AML_CREATE_BYTE_FIELD_OP - AML_CREATE_WORD_FIELD_OP - AML_CREATE_DWORD_FIELD_OP - AML_CREATE_QWORD_FIELD_OP - - ******************************************************************************/ - - -/* - * Master Opcode information table. A summary of everything we know about each - * opcode, all in one place. - */ -const ACPI_OPCODE_INFO AcpiGbl_AmlOpInfo[AML_NUM_OPCODES] = -{ -/*! [Begin] no source code translation */ -/* Index Name Parser Args Interpreter Args ObjectType Class Type Flags */ - -/* 00 */ ACPI_OP ("Zero", ARGP_ZERO_OP, ARGI_ZERO_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT), -/* 01 */ ACPI_OP ("One", ARGP_ONE_OP, ARGI_ONE_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT), -/* 02 */ ACPI_OP ("Alias", ARGP_ALIAS_OP, ARGI_ALIAS_OP, ACPI_TYPE_LOCAL_ALIAS, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), -/* 03 */ ACPI_OP ("Name", ARGP_NAME_OP, ARGI_NAME_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), -/* 04 */ ACPI_OP ("ByteConst", ARGP_BYTE_OP, ARGI_BYTE_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT), -/* 05 */ ACPI_OP ("WordConst", ARGP_WORD_OP, ARGI_WORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT), -/* 06 */ ACPI_OP ("DwordConst", ARGP_DWORD_OP, ARGI_DWORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT), -/* 07 */ ACPI_OP ("String", ARGP_STRING_OP, ARGI_STRING_OP, ACPI_TYPE_STRING, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT), -/* 08 */ ACPI_OP ("Scope", ARGP_SCOPE_OP, ARGI_SCOPE_OP, ACPI_TYPE_LOCAL_SCOPE, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), -/* 09 */ ACPI_OP ("Buffer", ARGP_BUFFER_OP, ARGI_BUFFER_OP, ACPI_TYPE_BUFFER, AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT, AML_HAS_ARGS | AML_DEFER | AML_CONSTANT), -/* 0A */ ACPI_OP ("Package", ARGP_PACKAGE_OP, ARGI_PACKAGE_OP, ACPI_TYPE_PACKAGE, AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT, AML_HAS_ARGS | AML_DEFER | AML_CONSTANT), -/* 0B */ ACPI_OP ("Method", ARGP_METHOD_OP, ARGI_METHOD_OP, ACPI_TYPE_METHOD, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER), -/* 0C */ ACPI_OP ("Local0", ARGP_LOCAL0, ARGI_LOCAL0, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), -/* 0D */ ACPI_OP ("Local1", ARGP_LOCAL1, ARGI_LOCAL1, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), -/* 0E */ ACPI_OP ("Local2", ARGP_LOCAL2, ARGI_LOCAL2, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), -/* 0F */ ACPI_OP ("Local3", ARGP_LOCAL3, ARGI_LOCAL3, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), -/* 10 */ ACPI_OP ("Local4", ARGP_LOCAL4, ARGI_LOCAL4, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), -/* 11 */ ACPI_OP ("Local5", ARGP_LOCAL5, ARGI_LOCAL5, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), -/* 12 */ ACPI_OP ("Local6", ARGP_LOCAL6, ARGI_LOCAL6, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), -/* 13 */ ACPI_OP ("Local7", ARGP_LOCAL7, ARGI_LOCAL7, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), -/* 14 */ ACPI_OP ("Arg0", ARGP_ARG0, ARGI_ARG0, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), -/* 15 */ ACPI_OP ("Arg1", ARGP_ARG1, ARGI_ARG1, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), -/* 16 */ ACPI_OP ("Arg2", ARGP_ARG2, ARGI_ARG2, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), -/* 17 */ ACPI_OP ("Arg3", ARGP_ARG3, ARGI_ARG3, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), -/* 18 */ ACPI_OP ("Arg4", ARGP_ARG4, ARGI_ARG4, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), -/* 19 */ ACPI_OP ("Arg5", ARGP_ARG5, ARGI_ARG5, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), -/* 1A */ ACPI_OP ("Arg6", ARGP_ARG6, ARGI_ARG6, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), -/* 1B */ ACPI_OP ("Store", ARGP_STORE_OP, ARGI_STORE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), -/* 1C */ ACPI_OP ("RefOf", ARGP_REF_OF_OP, ARGI_REF_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R), -/* 1D */ ACPI_OP ("Add", ARGP_ADD_OP, ARGI_ADD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), -/* 1E */ ACPI_OP ("Concatenate", ARGP_CONCAT_OP, ARGI_CONCAT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), -/* 1F */ ACPI_OP ("Subtract", ARGP_SUBTRACT_OP, ARGI_SUBTRACT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), -/* 20 */ ACPI_OP ("Increment", ARGP_INCREMENT_OP, ARGI_INCREMENT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT), -/* 21 */ ACPI_OP ("Decrement", ARGP_DECREMENT_OP, ARGI_DECREMENT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT), -/* 22 */ ACPI_OP ("Multiply", ARGP_MULTIPLY_OP, ARGI_MULTIPLY_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), -/* 23 */ ACPI_OP ("Divide", ARGP_DIVIDE_OP, ARGI_DIVIDE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_2T_1R, AML_FLAGS_EXEC_2A_2T_1R | AML_CONSTANT), -/* 24 */ ACPI_OP ("ShiftLeft", ARGP_SHIFT_LEFT_OP, ARGI_SHIFT_LEFT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), -/* 25 */ ACPI_OP ("ShiftRight", ARGP_SHIFT_RIGHT_OP, ARGI_SHIFT_RIGHT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), -/* 26 */ ACPI_OP ("And", ARGP_BIT_AND_OP, ARGI_BIT_AND_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), -/* 27 */ ACPI_OP ("NAnd", ARGP_BIT_NAND_OP, ARGI_BIT_NAND_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), -/* 28 */ ACPI_OP ("Or", ARGP_BIT_OR_OP, ARGI_BIT_OR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), -/* 29 */ ACPI_OP ("NOr", ARGP_BIT_NOR_OP, ARGI_BIT_NOR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), -/* 2A */ ACPI_OP ("XOr", ARGP_BIT_XOR_OP, ARGI_BIT_XOR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), -/* 2B */ ACPI_OP ("Not", ARGP_BIT_NOT_OP, ARGI_BIT_NOT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), -/* 2C */ ACPI_OP ("FindSetLeftBit", ARGP_FIND_SET_LEFT_BIT_OP, ARGI_FIND_SET_LEFT_BIT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), -/* 2D */ ACPI_OP ("FindSetRightBit", ARGP_FIND_SET_RIGHT_BIT_OP,ARGI_FIND_SET_RIGHT_BIT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), -/* 2E */ ACPI_OP ("DerefOf", ARGP_DEREF_OF_OP, ARGI_DEREF_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R), -/* 2F */ ACPI_OP ("Notify", ARGP_NOTIFY_OP, ARGI_NOTIFY_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_0R, AML_FLAGS_EXEC_2A_0T_0R), -/* 30 */ ACPI_OP ("SizeOf", ARGP_SIZE_OF_OP, ARGI_SIZE_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_NO_OPERAND_RESOLVE), -/* 31 */ ACPI_OP ("Index", ARGP_INDEX_OP, ARGI_INDEX_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R), -/* 32 */ ACPI_OP ("Match", ARGP_MATCH_OP, ARGI_MATCH_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R | AML_CONSTANT), -/* 33 */ ACPI_OP ("CreateDWordField", ARGP_CREATE_DWORD_FIELD_OP,ARGI_CREATE_DWORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), -/* 34 */ ACPI_OP ("CreateWordField", ARGP_CREATE_WORD_FIELD_OP, ARGI_CREATE_WORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), -/* 35 */ ACPI_OP ("CreateByteField", ARGP_CREATE_BYTE_FIELD_OP, ARGI_CREATE_BYTE_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), -/* 36 */ ACPI_OP ("CreateBitField", ARGP_CREATE_BIT_FIELD_OP, ARGI_CREATE_BIT_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), -/* 37 */ ACPI_OP ("ObjectType", ARGP_TYPE_OP, ARGI_TYPE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_NO_OPERAND_RESOLVE), -/* 38 */ ACPI_OP ("LAnd", ARGP_LAND_OP, ARGI_LAND_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL_NUMERIC | AML_CONSTANT), -/* 39 */ ACPI_OP ("LOr", ARGP_LOR_OP, ARGI_LOR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL_NUMERIC | AML_CONSTANT), -/* 3A */ ACPI_OP ("LNot", ARGP_LNOT_OP, ARGI_LNOT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT), -/* 3B */ ACPI_OP ("LEqual", ARGP_LEQUAL_OP, ARGI_LEQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT), -/* 3C */ ACPI_OP ("LGreater", ARGP_LGREATER_OP, ARGI_LGREATER_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT), -/* 3D */ ACPI_OP ("LLess", ARGP_LLESS_OP, ARGI_LLESS_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT), -/* 3E */ ACPI_OP ("If", ARGP_IF_OP, ARGI_IF_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), -/* 3F */ ACPI_OP ("Else", ARGP_ELSE_OP, ARGI_ELSE_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), -/* 40 */ ACPI_OP ("While", ARGP_WHILE_OP, ARGI_WHILE_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), -/* 41 */ ACPI_OP ("Noop", ARGP_NOOP_OP, ARGI_NOOP_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), -/* 42 */ ACPI_OP ("Return", ARGP_RETURN_OP, ARGI_RETURN_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), -/* 43 */ ACPI_OP ("Break", ARGP_BREAK_OP, ARGI_BREAK_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), -/* 44 */ ACPI_OP ("BreakPoint", ARGP_BREAK_POINT_OP, ARGI_BREAK_POINT_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), -/* 45 */ ACPI_OP ("Ones", ARGP_ONES_OP, ARGI_ONES_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT), - -/* Prefixed opcodes (Two-byte opcodes with a prefix op) */ - -/* 46 */ ACPI_OP ("Mutex", ARGP_MUTEX_OP, ARGI_MUTEX_OP, ACPI_TYPE_MUTEX, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), -/* 47 */ ACPI_OP ("Event", ARGP_EVENT_OP, ARGI_EVENT_OP, ACPI_TYPE_EVENT, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ), -/* 48 */ ACPI_OP ("CondRefOf", ARGP_COND_REF_OF_OP, ARGI_COND_REF_OF_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), -/* 49 */ ACPI_OP ("CreateField", ARGP_CREATE_FIELD_OP, ARGI_CREATE_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_FIELD | AML_CREATE), -/* 4A */ ACPI_OP ("Load", ARGP_LOAD_OP, ARGI_LOAD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_0R, AML_FLAGS_EXEC_1A_1T_0R), -/* 4B */ ACPI_OP ("Stall", ARGP_STALL_OP, ARGI_STALL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), -/* 4C */ ACPI_OP ("Sleep", ARGP_SLEEP_OP, ARGI_SLEEP_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), -/* 4D */ ACPI_OP ("Acquire", ARGP_ACQUIRE_OP, ARGI_ACQUIRE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R), -/* 4E */ ACPI_OP ("Signal", ARGP_SIGNAL_OP, ARGI_SIGNAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), -/* 4F */ ACPI_OP ("Wait", ARGP_WAIT_OP, ARGI_WAIT_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R), -/* 50 */ ACPI_OP ("Reset", ARGP_RESET_OP, ARGI_RESET_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), -/* 51 */ ACPI_OP ("Release", ARGP_RELEASE_OP, ARGI_RELEASE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), -/* 52 */ ACPI_OP ("FromBCD", ARGP_FROM_BCD_OP, ARGI_FROM_BCD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), -/* 53 */ ACPI_OP ("ToBCD", ARGP_TO_BCD_OP, ARGI_TO_BCD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), -/* 54 */ ACPI_OP ("Unload", ARGP_UNLOAD_OP, ARGI_UNLOAD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), -/* 55 */ ACPI_OP ("Revision", ARGP_REVISION_OP, ARGI_REVISION_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0), -/* 56 */ ACPI_OP ("Debug", ARGP_DEBUG_OP, ARGI_DEBUG_OP, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0), -/* 57 */ ACPI_OP ("Fatal", ARGP_FATAL_OP, ARGI_FATAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_0T_0R, AML_FLAGS_EXEC_3A_0T_0R), -/* 58 */ ACPI_OP ("OperationRegion", ARGP_REGION_OP, ARGI_REGION_OP, ACPI_TYPE_REGION, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER), -/* 59 */ ACPI_OP ("Field", ARGP_FIELD_OP, ARGI_FIELD_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD), -/* 5A */ ACPI_OP ("Device", ARGP_DEVICE_OP, ARGI_DEVICE_OP, ACPI_TYPE_DEVICE, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), -/* 5B */ ACPI_OP ("Processor", ARGP_PROCESSOR_OP, ARGI_PROCESSOR_OP, ACPI_TYPE_PROCESSOR, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), -/* 5C */ ACPI_OP ("PowerResource", ARGP_POWER_RES_OP, ARGI_POWER_RES_OP, ACPI_TYPE_POWER, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), -/* 5D */ ACPI_OP ("ThermalZone", ARGP_THERMAL_ZONE_OP, ARGI_THERMAL_ZONE_OP, ACPI_TYPE_THERMAL, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), -/* 5E */ ACPI_OP ("IndexField", ARGP_INDEX_FIELD_OP, ARGI_INDEX_FIELD_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD), -/* 5F */ ACPI_OP ("BankField", ARGP_BANK_FIELD_OP, ARGI_BANK_FIELD_OP, ACPI_TYPE_LOCAL_BANK_FIELD, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD | AML_DEFER), - -/* Internal opcodes that map to invalid AML opcodes */ - -/* 60 */ ACPI_OP ("LNotEqual", ARGP_LNOTEQUAL_OP, ARGI_LNOTEQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT), -/* 61 */ ACPI_OP ("LLessEqual", ARGP_LLESSEQUAL_OP, ARGI_LLESSEQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT), -/* 62 */ ACPI_OP ("LGreaterEqual", ARGP_LGREATEREQUAL_OP, ARGI_LGREATEREQUAL_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT), -/* 63 */ ACPI_OP ("-NamePath-", ARGP_NAMEPATH_OP, ARGI_NAMEPATH_OP, ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_NSOBJECT | AML_NSNODE ), -/* 64 */ ACPI_OP ("-MethodCall-", ARGP_METHODCALL_OP, ARGI_METHODCALL_OP, ACPI_TYPE_METHOD, AML_CLASS_METHOD_CALL, AML_TYPE_METHOD_CALL, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE), -/* 65 */ ACPI_OP ("-ByteList-", ARGP_BYTELIST_OP, ARGI_BYTELIST_OP, ACPI_TYPE_ANY, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0), -/* 66 */ ACPI_OP ("-ReservedField-", ARGP_RESERVEDFIELD_OP, ARGI_RESERVEDFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0), -/* 67 */ ACPI_OP ("-NamedField-", ARGP_NAMEDFIELD_OP, ARGI_NAMEDFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ), -/* 68 */ ACPI_OP ("-AccessField-", ARGP_ACCESSFIELD_OP, ARGI_ACCESSFIELD_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0), -/* 69 */ ACPI_OP ("-StaticString", ARGP_STATICSTRING_OP, ARGI_STATICSTRING_OP, ACPI_TYPE_ANY, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0), -/* 6A */ ACPI_OP ("-Return Value-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_RETURN_VALUE, AML_TYPE_RETURN, AML_HAS_ARGS | AML_HAS_RETVAL), -/* 6B */ ACPI_OP ("-UNKNOWN_OP-", ARG_NONE, ARG_NONE, ACPI_TYPE_INVALID, AML_CLASS_UNKNOWN, AML_TYPE_BOGUS, AML_HAS_ARGS), -/* 6C */ ACPI_OP ("-ASCII_ONLY-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_ASCII, AML_TYPE_BOGUS, AML_HAS_ARGS), -/* 6D */ ACPI_OP ("-PREFIX_ONLY-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, AML_CLASS_PREFIX, AML_TYPE_BOGUS, AML_HAS_ARGS), - -/* ACPI 2.0 opcodes */ - -/* 6E */ ACPI_OP ("QwordConst", ARGP_QWORD_OP, ARGI_QWORD_OP, ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT), -/* 6F */ ACPI_OP ("Package", /* Var */ ARGP_VAR_PACKAGE_OP, ARGI_VAR_PACKAGE_OP, ACPI_TYPE_PACKAGE, AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT, AML_HAS_ARGS | AML_DEFER), -/* 70 */ ACPI_OP ("ConcatenateResTemplate", ARGP_CONCAT_RES_OP, ARGI_CONCAT_RES_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), -/* 71 */ ACPI_OP ("Mod", ARGP_MOD_OP, ARGI_MOD_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), -/* 72 */ ACPI_OP ("CreateQWordField", ARGP_CREATE_QWORD_FIELD_OP,ARGI_CREATE_QWORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), -/* 73 */ ACPI_OP ("ToBuffer", ARGP_TO_BUFFER_OP, ARGI_TO_BUFFER_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), -/* 74 */ ACPI_OP ("ToDecimalString", ARGP_TO_DEC_STR_OP, ARGI_TO_DEC_STR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), -/* 75 */ ACPI_OP ("ToHexString", ARGP_TO_HEX_STR_OP, ARGI_TO_HEX_STR_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), -/* 76 */ ACPI_OP ("ToInteger", ARGP_TO_INTEGER_OP, ARGI_TO_INTEGER_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), -/* 77 */ ACPI_OP ("ToString", ARGP_TO_STRING_OP, ARGI_TO_STRING_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), -/* 78 */ ACPI_OP ("CopyObject", ARGP_COPY_OP, ARGI_COPY_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), -/* 79 */ ACPI_OP ("Mid", ARGP_MID_OP, ARGI_MID_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_1T_1R, AML_FLAGS_EXEC_3A_1T_1R | AML_CONSTANT), -/* 7A */ ACPI_OP ("Continue", ARGP_CONTINUE_OP, ARGI_CONTINUE_OP, ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), -/* 7B */ ACPI_OP ("LoadTable", ARGP_LOAD_TABLE_OP, ARGI_LOAD_TABLE_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R), -/* 7C */ ACPI_OP ("DataTableRegion", ARGP_DATA_REGION_OP, ARGI_DATA_REGION_OP, ACPI_TYPE_REGION, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER), -/* 7D */ ACPI_OP ("[EvalSubTree]", ARGP_SCOPE_OP, ARGI_SCOPE_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE), - -/* ACPI 3.0 opcodes */ - -/* 7E */ ACPI_OP ("Timer", ARGP_TIMER_OP, ARGI_TIMER_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE, AML_TYPE_EXEC_0A_0T_1R, AML_FLAGS_EXEC_0A_0T_1R) - -/*! [End] no source code translation !*/ -}; - -/* - * This table is directly indexed by the opcodes, and returns an - * index into the table above - */ -static const UINT8 AcpiGbl_ShortOpIndex[256] = -{ -/* 0 1 2 3 4 5 6 7 */ -/* 8 9 A B C D E F */ -/* 0x00 */ 0x00, 0x01, _UNK, _UNK, _UNK, _UNK, 0x02, _UNK, -/* 0x08 */ 0x03, _UNK, 0x04, 0x05, 0x06, 0x07, 0x6E, _UNK, -/* 0x10 */ 0x08, 0x09, 0x0a, 0x6F, 0x0b, _UNK, _UNK, _UNK, -/* 0x18 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x20 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x28 */ _UNK, _UNK, _UNK, _UNK, _UNK, 0x63, _PFX, _PFX, -/* 0x30 */ 0x67, 0x66, 0x68, 0x65, 0x69, 0x64, 0x6A, 0x7D, -/* 0x38 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x40 */ _UNK, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, -/* 0x48 */ _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, -/* 0x50 */ _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, -/* 0x58 */ _ASC, _ASC, _ASC, _UNK, _PFX, _UNK, _PFX, _ASC, -/* 0x60 */ 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, -/* 0x68 */ 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, _UNK, -/* 0x70 */ 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, -/* 0x78 */ 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, -/* 0x80 */ 0x2b, 0x2c, 0x2d, 0x2e, 0x70, 0x71, 0x2f, 0x30, -/* 0x88 */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x72, -/* 0x90 */ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x73, 0x74, -/* 0x98 */ 0x75, 0x76, _UNK, _UNK, 0x77, 0x78, 0x79, 0x7A, -/* 0xA0 */ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x60, 0x61, -/* 0xA8 */ 0x62, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0xB0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0xB8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0xC0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0xC8 */ _UNK, _UNK, _UNK, _UNK, 0x44, _UNK, _UNK, _UNK, -/* 0xD0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0xD8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0xE0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0xE8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0xF0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0xF8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x45, -}; - -/* - * This table is indexed by the second opcode of the extended opcode - * pair. It returns an index into the opcode table (AcpiGbl_AmlOpInfo) - */ -static const UINT8 AcpiGbl_LongOpIndex[NUM_EXTENDED_OPCODE] = -{ -/* 0 1 2 3 4 5 6 7 */ -/* 8 9 A B C D E F */ -/* 0x00 */ _UNK, 0x46, 0x47, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x08 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x10 */ _UNK, _UNK, 0x48, 0x49, _UNK, _UNK, _UNK, _UNK, -/* 0x18 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x7B, -/* 0x20 */ 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, -/* 0x28 */ 0x52, 0x53, 0x54, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x30 */ 0x55, 0x56, 0x57, 0x7e, _UNK, _UNK, _UNK, _UNK, -/* 0x38 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x40 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x48 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x50 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x58 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x60 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x68 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x70 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x78 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x80 */ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, -/* 0x88 */ 0x7C, -}; - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetOpcodeInfo - * - * PARAMETERS: Opcode - The AML opcode - * - * RETURN: A pointer to the info about the opcode. - * - * DESCRIPTION: Find AML opcode description based on the opcode. - * NOTE: This procedure must ALWAYS return a valid pointer! - * - ******************************************************************************/ - -const ACPI_OPCODE_INFO * -AcpiPsGetOpcodeInfo ( - UINT16 Opcode) -{ - ACPI_FUNCTION_NAME (PsGetOpcodeInfo); - - - /* - * Detect normal 8-bit opcode or extended 16-bit opcode - */ - if (!(Opcode & 0xFF00)) - { - /* Simple (8-bit) opcode: 0-255, can't index beyond table */ - - return (&AcpiGbl_AmlOpInfo [AcpiGbl_ShortOpIndex [(UINT8) Opcode]]); - } - - if (((Opcode & 0xFF00) == AML_EXTENDED_OPCODE) && - (((UINT8) Opcode) <= MAX_EXTENDED_OPCODE)) - { - /* Valid extended (16-bit) opcode */ - - return (&AcpiGbl_AmlOpInfo [AcpiGbl_LongOpIndex [(UINT8) Opcode]]); - } - - /* Unknown AML opcode */ - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Unknown AML opcode [%4.4X]\n", Opcode)); - - return (&AcpiGbl_AmlOpInfo [_UNK]); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetOpcodeName - * - * PARAMETERS: Opcode - The AML opcode - * - * RETURN: A pointer to the name of the opcode (ASCII String) - * Note: Never returns NULL. - * - * DESCRIPTION: Translate an opcode into a human-readable string - * - ******************************************************************************/ - -char * -AcpiPsGetOpcodeName ( - UINT16 Opcode) -{ -#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT) - - const ACPI_OPCODE_INFO *Op; - - - Op = AcpiPsGetOpcodeInfo (Opcode); - - /* Always guaranteed to return a valid pointer */ - - return (Op->Name); - -#else - return ("OpcodeName unavailable"); - -#endif -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetArgumentCount - * - * PARAMETERS: OpType - Type associated with the AML opcode - * - * RETURN: Argument count - * - * DESCRIPTION: Obtain the number of expected arguments for an AML opcode - * - ******************************************************************************/ - -UINT8 -AcpiPsGetArgumentCount ( - UINT32 OpType) -{ - - if (OpType <= AML_TYPE_EXEC_6A_0T_1R) - { - return (AcpiGbl_ArgumentCount[OpType]); - } - - return (0); -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/parser/psparse.c b/l4/pkg/acpica/lib-acpi/src/acpica/parser/psparse.c deleted file mode 100644 index 820f54bd0..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/parser/psparse.c +++ /dev/null @@ -1,791 +0,0 @@ -/****************************************************************************** - * - * Module Name: psparse - Parser top level AML parse routines - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -/* - * Parse the AML and build an operation tree as most interpreters, - * like Perl, do. Parsing is done by hand rather than with a YACC - * generated parser to tightly constrain stack and dynamic memory - * usage. At the same time, parsing is kept flexible and the code - * fairly compact by parsing based on a list of AML opcode - * templates in AmlOpInfo[] - */ - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "acdispat.h" -#include "amlcode.h" -#include "acnamesp.h" -#include "acinterp.h" - -#define _COMPONENT ACPI_PARSER - ACPI_MODULE_NAME ("psparse") - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetOpcodeSize - * - * PARAMETERS: Opcode - An AML opcode - * - * RETURN: Size of the opcode, in bytes (1 or 2) - * - * DESCRIPTION: Get the size of the current opcode. - * - ******************************************************************************/ - -UINT32 -AcpiPsGetOpcodeSize ( - UINT32 Opcode) -{ - - /* Extended (2-byte) opcode if > 255 */ - - if (Opcode > 0x00FF) - { - return (2); - } - - /* Otherwise, just a single byte opcode */ - - return (1); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsPeekOpcode - * - * PARAMETERS: ParserState - A parser state object - * - * RETURN: Next AML opcode - * - * DESCRIPTION: Get next AML opcode (without incrementing AML pointer) - * - ******************************************************************************/ - -UINT16 -AcpiPsPeekOpcode ( - ACPI_PARSE_STATE *ParserState) -{ - UINT8 *Aml; - UINT16 Opcode; - - - Aml = ParserState->Aml; - Opcode = (UINT16) ACPI_GET8 (Aml); - - if (Opcode == AML_EXTENDED_OP_PREFIX) - { - /* Extended opcode, get the second opcode byte */ - - Aml++; - Opcode = (UINT16) ((Opcode << 8) | ACPI_GET8 (Aml)); - } - - return (Opcode); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsCompleteThisOp - * - * PARAMETERS: WalkState - Current State - * Op - Op to complete - * - * RETURN: Status - * - * DESCRIPTION: Perform any cleanup at the completion of an Op. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiPsCompleteThisOp ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op) -{ - ACPI_PARSE_OBJECT *Prev; - ACPI_PARSE_OBJECT *Next; - const ACPI_OPCODE_INFO *ParentInfo; - ACPI_PARSE_OBJECT *ReplacementOp = NULL; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE_PTR (PsCompleteThisOp, Op); - - - /* Check for null Op, can happen if AML code is corrupt */ - - if (!Op) - { - return_ACPI_STATUS (AE_OK); /* OK for now */ - } - - /* Delete this op and the subtree below it if asked to */ - - if (((WalkState->ParseFlags & ACPI_PARSE_TREE_MASK) != ACPI_PARSE_DELETE_TREE) || - (WalkState->OpInfo->Class == AML_CLASS_ARGUMENT)) - { - return_ACPI_STATUS (AE_OK); - } - - /* Make sure that we only delete this subtree */ - - if (Op->Common.Parent) - { - Prev = Op->Common.Parent->Common.Value.Arg; - if (!Prev) - { - /* Nothing more to do */ - - goto Cleanup; - } - - /* - * Check if we need to replace the operator and its subtree - * with a return value op (placeholder op) - */ - ParentInfo = AcpiPsGetOpcodeInfo (Op->Common.Parent->Common.AmlOpcode); - - switch (ParentInfo->Class) - { - case AML_CLASS_CONTROL: - break; - - case AML_CLASS_CREATE: - - /* - * These opcodes contain TermArg operands. The current - * op must be replaced by a placeholder return op - */ - ReplacementOp = AcpiPsAllocOp (AML_INT_RETURN_VALUE_OP); - if (!ReplacementOp) - { - Status = AE_NO_MEMORY; - } - break; - - case AML_CLASS_NAMED_OBJECT: - - /* - * These opcodes contain TermArg operands. The current - * op must be replaced by a placeholder return op - */ - if ((Op->Common.Parent->Common.AmlOpcode == AML_REGION_OP) || - (Op->Common.Parent->Common.AmlOpcode == AML_DATA_REGION_OP) || - (Op->Common.Parent->Common.AmlOpcode == AML_BUFFER_OP) || - (Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) || - (Op->Common.Parent->Common.AmlOpcode == AML_BANK_FIELD_OP) || - (Op->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP)) - { - ReplacementOp = AcpiPsAllocOp (AML_INT_RETURN_VALUE_OP); - if (!ReplacementOp) - { - Status = AE_NO_MEMORY; - } - } - else if ((Op->Common.Parent->Common.AmlOpcode == AML_NAME_OP) && - (WalkState->PassNumber <= ACPI_IMODE_LOAD_PASS2)) - { - if ((Op->Common.AmlOpcode == AML_BUFFER_OP) || - (Op->Common.AmlOpcode == AML_PACKAGE_OP) || - (Op->Common.AmlOpcode == AML_VAR_PACKAGE_OP)) - { - ReplacementOp = AcpiPsAllocOp (Op->Common.AmlOpcode); - if (!ReplacementOp) - { - Status = AE_NO_MEMORY; - } - else - { - ReplacementOp->Named.Data = Op->Named.Data; - ReplacementOp->Named.Length = Op->Named.Length; - } - } - } - break; - - default: - - ReplacementOp = AcpiPsAllocOp (AML_INT_RETURN_VALUE_OP); - if (!ReplacementOp) - { - Status = AE_NO_MEMORY; - } - } - - /* We must unlink this op from the parent tree */ - - if (Prev == Op) - { - /* This op is the first in the list */ - - if (ReplacementOp) - { - ReplacementOp->Common.Parent = Op->Common.Parent; - ReplacementOp->Common.Value.Arg = NULL; - ReplacementOp->Common.Node = Op->Common.Node; - Op->Common.Parent->Common.Value.Arg = ReplacementOp; - ReplacementOp->Common.Next = Op->Common.Next; - } - else - { - Op->Common.Parent->Common.Value.Arg = Op->Common.Next; - } - } - - /* Search the parent list */ - - else while (Prev) - { - /* Traverse all siblings in the parent's argument list */ - - Next = Prev->Common.Next; - if (Next == Op) - { - if (ReplacementOp) - { - ReplacementOp->Common.Parent = Op->Common.Parent; - ReplacementOp->Common.Value.Arg = NULL; - ReplacementOp->Common.Node = Op->Common.Node; - Prev->Common.Next = ReplacementOp; - ReplacementOp->Common.Next = Op->Common.Next; - Next = NULL; - } - else - { - Prev->Common.Next = Op->Common.Next; - Next = NULL; - } - } - Prev = Next; - } - } - - -Cleanup: - - /* Now we can actually delete the subtree rooted at Op */ - - AcpiPsDeleteParseTree (Op); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsNextParseState - * - * PARAMETERS: WalkState - Current state - * Op - Current parse op - * CallbackStatus - Status from previous operation - * - * RETURN: Status - * - * DESCRIPTION: Update the parser state based upon the return exception from - * the parser callback. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiPsNextParseState ( - ACPI_WALK_STATE *WalkState, - ACPI_PARSE_OBJECT *Op, - ACPI_STATUS CallbackStatus) -{ - ACPI_PARSE_STATE *ParserState = &WalkState->ParserState; - ACPI_STATUS Status = AE_CTRL_PENDING; - - - ACPI_FUNCTION_TRACE_PTR (PsNextParseState, Op); - - - switch (CallbackStatus) - { - case AE_CTRL_TERMINATE: - /* - * A control method was terminated via a RETURN statement. - * The walk of this method is complete. - */ - ParserState->Aml = ParserState->AmlEnd; - Status = AE_CTRL_TERMINATE; - break; - - - case AE_CTRL_BREAK: - - ParserState->Aml = WalkState->AmlLastWhile; - WalkState->ControlState->Common.Value = FALSE; - Status = AE_CTRL_BREAK; - break; - - - case AE_CTRL_CONTINUE: - - ParserState->Aml = WalkState->AmlLastWhile; - Status = AE_CTRL_CONTINUE; - break; - - - case AE_CTRL_PENDING: - - ParserState->Aml = WalkState->AmlLastWhile; - break; - -#if 0 - case AE_CTRL_SKIP: - - ParserState->Aml = ParserState->Scope->ParseScope.PkgEnd; - Status = AE_OK; - break; -#endif - - case AE_CTRL_TRUE: - /* - * Predicate of an IF was true, and we are at the matching ELSE. - * Just close out this package - */ - ParserState->Aml = AcpiPsGetNextPackageEnd (ParserState); - Status = AE_CTRL_PENDING; - break; - - - case AE_CTRL_FALSE: - /* - * Either an IF/WHILE Predicate was false or we encountered a BREAK - * opcode. In both cases, we do not execute the rest of the - * package; We simply close out the parent (finishing the walk of - * this branch of the tree) and continue execution at the parent - * level. - */ - ParserState->Aml = ParserState->Scope->ParseScope.PkgEnd; - - /* In the case of a BREAK, just force a predicate (if any) to FALSE */ - - WalkState->ControlState->Common.Value = FALSE; - Status = AE_CTRL_END; - break; - - - case AE_CTRL_TRANSFER: - - /* A method call (invocation) -- transfer control */ - - Status = AE_CTRL_TRANSFER; - WalkState->PrevOp = Op; - WalkState->MethodCallOp = Op; - WalkState->MethodCallNode = (Op->Common.Value.Arg)->Common.Node; - - /* Will return value (if any) be used by the caller? */ - - WalkState->ReturnUsed = AcpiDsIsResultUsed (Op, WalkState); - break; - - - default: - - Status = CallbackStatus; - if ((CallbackStatus & AE_CODE_MASK) == AE_CODE_CONTROL) - { - Status = AE_OK; - } - break; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsParseAml - * - * PARAMETERS: WalkState - Current state - * - * - * RETURN: Status - * - * DESCRIPTION: Parse raw AML and return a tree of ops - * - ******************************************************************************/ - -ACPI_STATUS -AcpiPsParseAml ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - ACPI_THREAD_STATE *Thread; - ACPI_THREAD_STATE *PrevWalkList = AcpiGbl_CurrentWalkList; - ACPI_WALK_STATE *PreviousWalkState; - - - ACPI_FUNCTION_TRACE (PsParseAml); - - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "Entered with WalkState=%p Aml=%p size=%X\n", - WalkState, WalkState->ParserState.Aml, - WalkState->ParserState.AmlSize)); - - if (!WalkState->ParserState.Aml) - { - return_ACPI_STATUS (AE_NULL_OBJECT); - } - - /* Create and initialize a new thread state */ - - Thread = AcpiUtCreateThreadState (); - if (!Thread) - { - if (WalkState->MethodDesc) - { - /* Executing a control method - additional cleanup */ - - AcpiDsTerminateControlMethod (WalkState->MethodDesc, WalkState); - } - - AcpiDsDeleteWalkState (WalkState); - return_ACPI_STATUS (AE_NO_MEMORY); - } - - WalkState->Thread = Thread; - - /* - * If executing a method, the starting SyncLevel is this method's - * SyncLevel - */ - if (WalkState->MethodDesc) - { - WalkState->Thread->CurrentSyncLevel = WalkState->MethodDesc->Method.SyncLevel; - } - - AcpiDsPushWalkState (WalkState, Thread); - - /* - * This global allows the AML debugger to get a handle to the currently - * executing control method. - */ - AcpiGbl_CurrentWalkList = Thread; - - /* - * Execute the walk loop as long as there is a valid Walk State. This - * handles nested control method invocations without recursion. - */ - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "State=%p\n", WalkState)); - - Status = AE_OK; - while (WalkState) - { - if (ACPI_SUCCESS (Status)) - { - /* - * The ParseLoop executes AML until the method terminates - * or calls another method. - */ - Status = AcpiPsParseLoop (WalkState); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "Completed one call to walk loop, %s State=%p\n", - AcpiFormatException (Status), WalkState)); - - if (Status == AE_CTRL_TRANSFER) - { - /* - * A method call was detected. - * Transfer control to the called control method - */ - Status = AcpiDsCallControlMethod (Thread, WalkState, NULL); - if (ACPI_FAILURE (Status)) - { - Status = AcpiDsMethodError (Status, WalkState); - } - - /* - * If the transfer to the new method method call worked, a new walk - * state was created -- get it - */ - WalkState = AcpiDsGetCurrentWalkState (Thread); - continue; - } - else if (Status == AE_CTRL_TERMINATE) - { - Status = AE_OK; - } - else if ((Status != AE_OK) && (WalkState->MethodDesc)) - { - /* Either the method parse or actual execution failed */ - - ACPI_ERROR_METHOD ("Method parse/execution failed", - WalkState->MethodNode, NULL, Status); - - /* Check for possible multi-thread reentrancy problem */ - - if ((Status == AE_ALREADY_EXISTS) && - (!WalkState->MethodDesc->Method.Mutex)) - { - ACPI_INFO ((AE_INFO, - "Marking method %4.4s as Serialized because of AE_ALREADY_EXISTS error", - WalkState->MethodNode->Name.Ascii)); - - /* - * Method tried to create an object twice. The probable cause is - * that the method cannot handle reentrancy. - * - * The method is marked NotSerialized, but it tried to create - * a named object, causing the second thread entrance to fail. - * Workaround this problem by marking the method permanently - * as Serialized. - */ - WalkState->MethodDesc->Method.MethodFlags |= AML_METHOD_SERIALIZED; - WalkState->MethodDesc->Method.SyncLevel = 0; - } - } - - /* We are done with this walk, move on to the parent if any */ - - WalkState = AcpiDsPopWalkState (Thread); - - /* Reset the current scope to the beginning of scope stack */ - - AcpiDsScopeStackClear (WalkState); - - /* - * If we just returned from the execution of a control method or if we - * encountered an error during the method parse phase, there's lots of - * cleanup to do - */ - if (((WalkState->ParseFlags & ACPI_PARSE_MODE_MASK) == ACPI_PARSE_EXECUTE) || - (ACPI_FAILURE (Status))) - { - AcpiDsTerminateControlMethod (WalkState->MethodDesc, WalkState); - } - - /* Delete this walk state and all linked control states */ - - AcpiPsCleanupScope (&WalkState->ParserState); - PreviousWalkState = WalkState; - - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "ReturnValue=%p, ImplicitValue=%p State=%p\n", - WalkState->ReturnDesc, WalkState->ImplicitReturnObj, WalkState)); - - /* Check if we have restarted a preempted walk */ - - WalkState = AcpiDsGetCurrentWalkState (Thread); - if (WalkState) - { - if (ACPI_SUCCESS (Status)) - { - /* - * There is another walk state, restart it. - * If the method return value is not used by the parent, - * The object is deleted - */ - if (!PreviousWalkState->ReturnDesc) - { - /* - * In slack mode execution, if there is no return value - * we should implicitly return zero (0) as a default value. - */ - if (AcpiGbl_EnableInterpreterSlack && - !PreviousWalkState->ImplicitReturnObj) - { - PreviousWalkState->ImplicitReturnObj = - AcpiUtCreateIntegerObject ((UINT64) 0); - if (!PreviousWalkState->ImplicitReturnObj) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - } - - /* Restart the calling control method */ - - Status = AcpiDsRestartControlMethod (WalkState, - PreviousWalkState->ImplicitReturnObj); - } - else - { - /* - * We have a valid return value, delete any implicit - * return value. - */ - AcpiDsClearImplicitReturn (PreviousWalkState); - - Status = AcpiDsRestartControlMethod (WalkState, - PreviousWalkState->ReturnDesc); - } - if (ACPI_SUCCESS (Status)) - { - WalkState->WalkType |= ACPI_WALK_METHOD_RESTART; - } - } - else - { - /* On error, delete any return object or implicit return */ - - AcpiUtRemoveReference (PreviousWalkState->ReturnDesc); - AcpiDsClearImplicitReturn (PreviousWalkState); - } - } - - /* - * Just completed a 1st-level method, save the final internal return - * value (if any) - */ - else if (PreviousWalkState->CallerReturnDesc) - { - if (PreviousWalkState->ImplicitReturnObj) - { - *(PreviousWalkState->CallerReturnDesc) = - PreviousWalkState->ImplicitReturnObj; - } - else - { - /* NULL if no return value */ - - *(PreviousWalkState->CallerReturnDesc) = - PreviousWalkState->ReturnDesc; - } - } - else - { - if (PreviousWalkState->ReturnDesc) - { - /* Caller doesn't want it, must delete it */ - - AcpiUtRemoveReference (PreviousWalkState->ReturnDesc); - } - if (PreviousWalkState->ImplicitReturnObj) - { - /* Caller doesn't want it, must delete it */ - - AcpiUtRemoveReference (PreviousWalkState->ImplicitReturnObj); - } - } - - AcpiDsDeleteWalkState (PreviousWalkState); - } - - /* Normal exit */ - - AcpiExReleaseAllMutexes (Thread); - AcpiUtDeleteGenericState (ACPI_CAST_PTR (ACPI_GENERIC_STATE, Thread)); - AcpiGbl_CurrentWalkList = PrevWalkList; - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/parser/psscope.c b/l4/pkg/acpica/lib-acpi/src/acpica/parser/psscope.c deleted file mode 100644 index 979dbb151..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/parser/psscope.c +++ /dev/null @@ -1,374 +0,0 @@ -/****************************************************************************** - * - * Module Name: psscope - Parser scope stack management routines - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" - -#define _COMPONENT ACPI_PARSER - ACPI_MODULE_NAME ("psscope") - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetParentScope - * - * PARAMETERS: ParserState - Current parser state object - * - * RETURN: Pointer to an Op object - * - * DESCRIPTION: Get parent of current op being parsed - * - ******************************************************************************/ - -ACPI_PARSE_OBJECT * -AcpiPsGetParentScope ( - ACPI_PARSE_STATE *ParserState) -{ - - return (ParserState->Scope->ParseScope.Op); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsHasCompletedScope - * - * PARAMETERS: ParserState - Current parser state object - * - * RETURN: Boolean, TRUE = scope completed. - * - * DESCRIPTION: Is parsing of current argument complete? Determined by - * 1) AML pointer is at or beyond the end of the scope - * 2) The scope argument count has reached zero. - * - ******************************************************************************/ - -BOOLEAN -AcpiPsHasCompletedScope ( - ACPI_PARSE_STATE *ParserState) -{ - - return ((BOOLEAN) - ((ParserState->Aml >= ParserState->Scope->ParseScope.ArgEnd || - !ParserState->Scope->ParseScope.ArgCount))); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsInitScope - * - * PARAMETERS: ParserState - Current parser state object - * Root - the Root Node of this new scope - * - * RETURN: Status - * - * DESCRIPTION: Allocate and init a new scope object - * - ******************************************************************************/ - -ACPI_STATUS -AcpiPsInitScope ( - ACPI_PARSE_STATE *ParserState, - ACPI_PARSE_OBJECT *RootOp) -{ - ACPI_GENERIC_STATE *Scope; - - - ACPI_FUNCTION_TRACE_PTR (PsInitScope, RootOp); - - - Scope = AcpiUtCreateGenericState (); - if (!Scope) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - Scope->Common.DescriptorType = ACPI_DESC_TYPE_STATE_RPSCOPE; - Scope->ParseScope.Op = RootOp; - Scope->ParseScope.ArgCount = ACPI_VAR_ARGS; - Scope->ParseScope.ArgEnd = ParserState->AmlEnd; - Scope->ParseScope.PkgEnd = ParserState->AmlEnd; - - ParserState->Scope = Scope; - ParserState->StartOp = RootOp; - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsPushScope - * - * PARAMETERS: ParserState - Current parser state object - * Op - Current op to be pushed - * RemainingArgs - List of args remaining - * ArgCount - Fixed or variable number of args - * - * RETURN: Status - * - * DESCRIPTION: Push current op to begin parsing its argument - * - ******************************************************************************/ - -ACPI_STATUS -AcpiPsPushScope ( - ACPI_PARSE_STATE *ParserState, - ACPI_PARSE_OBJECT *Op, - UINT32 RemainingArgs, - UINT32 ArgCount) -{ - ACPI_GENERIC_STATE *Scope; - - - ACPI_FUNCTION_TRACE_PTR (PsPushScope, Op); - - - Scope = AcpiUtCreateGenericState (); - if (!Scope) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - Scope->Common.DescriptorType = ACPI_DESC_TYPE_STATE_PSCOPE; - Scope->ParseScope.Op = Op; - Scope->ParseScope.ArgList = RemainingArgs; - Scope->ParseScope.ArgCount = ArgCount; - Scope->ParseScope.PkgEnd = ParserState->PkgEnd; - - /* Push onto scope stack */ - - AcpiUtPushGenericState (&ParserState->Scope, Scope); - - if (ArgCount == ACPI_VAR_ARGS) - { - /* Multiple arguments */ - - Scope->ParseScope.ArgEnd = ParserState->PkgEnd; - } - else - { - /* Single argument */ - - Scope->ParseScope.ArgEnd = ACPI_TO_POINTER (ACPI_MAX_PTR); - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsPopScope - * - * PARAMETERS: ParserState - Current parser state object - * Op - Where the popped op is returned - * ArgList - Where the popped "next argument" is - * returned - * ArgCount - Count of objects in ArgList - * - * RETURN: Status - * - * DESCRIPTION: Return to parsing a previous op - * - ******************************************************************************/ - -void -AcpiPsPopScope ( - ACPI_PARSE_STATE *ParserState, - ACPI_PARSE_OBJECT **Op, - UINT32 *ArgList, - UINT32 *ArgCount) -{ - ACPI_GENERIC_STATE *Scope = ParserState->Scope; - - - ACPI_FUNCTION_TRACE (PsPopScope); - - - /* Only pop the scope if there is in fact a next scope */ - - if (Scope->Common.Next) - { - Scope = AcpiUtPopGenericState (&ParserState->Scope); - - /* Return to parsing previous op */ - - *Op = Scope->ParseScope.Op; - *ArgList = Scope->ParseScope.ArgList; - *ArgCount = Scope->ParseScope.ArgCount; - ParserState->PkgEnd = Scope->ParseScope.PkgEnd; - - /* All done with this scope state structure */ - - AcpiUtDeleteGenericState (Scope); - } - else - { - /* Empty parse stack, prepare to fetch next opcode */ - - *Op = NULL; - *ArgList = 0; - *ArgCount = 0; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "Popped Op %p Args %X\n", *Op, *ArgCount)); - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsCleanupScope - * - * PARAMETERS: ParserState - Current parser state object - * - * RETURN: None - * - * DESCRIPTION: Destroy available list, remaining stack levels, and return - * root scope - * - ******************************************************************************/ - -void -AcpiPsCleanupScope ( - ACPI_PARSE_STATE *ParserState) -{ - ACPI_GENERIC_STATE *Scope; - - - ACPI_FUNCTION_TRACE_PTR (PsCleanupScope, ParserState); - - - if (!ParserState) - { - return_VOID; - } - - /* Delete anything on the scope stack */ - - while (ParserState->Scope) - { - Scope = AcpiUtPopGenericState (&ParserState->Scope); - AcpiUtDeleteGenericState (Scope); - } - - return_VOID; -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/parser/pstree.c b/l4/pkg/acpica/lib-acpi/src/acpica/parser/pstree.c deleted file mode 100644 index 20ac405ca..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/parser/pstree.c +++ /dev/null @@ -1,427 +0,0 @@ -/****************************************************************************** - * - * Module Name: pstree - Parser op tree manipulation/traversal/search - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __PSTREE_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "amlcode.h" - -#define _COMPONENT ACPI_PARSER - ACPI_MODULE_NAME ("pstree") - -/* Local prototypes */ - -#ifdef ACPI_OBSOLETE_FUNCTIONS -ACPI_PARSE_OBJECT * -AcpiPsGetChild ( - ACPI_PARSE_OBJECT *op); -#endif - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetArg - * - * PARAMETERS: Op - Get an argument for this op - * Argn - Nth argument to get - * - * RETURN: The argument (as an Op object). NULL if argument does not exist - * - * DESCRIPTION: Get the specified op's argument. - * - ******************************************************************************/ - -ACPI_PARSE_OBJECT * -AcpiPsGetArg ( - ACPI_PARSE_OBJECT *Op, - UINT32 Argn) -{ - ACPI_PARSE_OBJECT *Arg = NULL; - const ACPI_OPCODE_INFO *OpInfo; - - - ACPI_FUNCTION_ENTRY (); - - - /* Get the info structure for this opcode */ - - OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); - if (OpInfo->Class == AML_CLASS_UNKNOWN) - { - /* Invalid opcode or ASCII character */ - - return (NULL); - } - - /* Check if this opcode requires argument sub-objects */ - - if (!(OpInfo->Flags & AML_HAS_ARGS)) - { - /* Has no linked argument objects */ - - return (NULL); - } - - /* Get the requested argument object */ - - Arg = Op->Common.Value.Arg; - while (Arg && Argn) - { - Argn--; - Arg = Arg->Common.Next; - } - - return (Arg); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsAppendArg - * - * PARAMETERS: Op - Append an argument to this Op. - * Arg - Argument Op to append - * - * RETURN: None. - * - * DESCRIPTION: Append an argument to an op's argument list (a NULL arg is OK) - * - ******************************************************************************/ - -void -AcpiPsAppendArg ( - ACPI_PARSE_OBJECT *Op, - ACPI_PARSE_OBJECT *Arg) -{ - ACPI_PARSE_OBJECT *PrevArg; - const ACPI_OPCODE_INFO *OpInfo; - - - ACPI_FUNCTION_ENTRY (); - - - if (!Op) - { - return; - } - - /* Get the info structure for this opcode */ - - OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); - if (OpInfo->Class == AML_CLASS_UNKNOWN) - { - /* Invalid opcode */ - - ACPI_ERROR ((AE_INFO, "Invalid AML Opcode: 0x%2.2X", - Op->Common.AmlOpcode)); - return; - } - - /* Check if this opcode requires argument sub-objects */ - - if (!(OpInfo->Flags & AML_HAS_ARGS)) - { - /* Has no linked argument objects */ - - return; - } - - /* Append the argument to the linked argument list */ - - if (Op->Common.Value.Arg) - { - /* Append to existing argument list */ - - PrevArg = Op->Common.Value.Arg; - while (PrevArg->Common.Next) - { - PrevArg = PrevArg->Common.Next; - } - PrevArg->Common.Next = Arg; - } - else - { - /* No argument list, this will be the first argument */ - - Op->Common.Value.Arg = Arg; - } - - /* Set the parent in this arg and any args linked after it */ - - while (Arg) - { - Arg->Common.Parent = Op; - Arg = Arg->Common.Next; - - Op->Common.ArgListLength++; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsGetDepthNext - * - * PARAMETERS: Origin - Root of subtree to search - * Op - Last (previous) Op that was found - * - * RETURN: Next Op found in the search. - * - * DESCRIPTION: Get next op in tree (walking the tree in depth-first order) - * Return NULL when reaching "origin" or when walking up from root - * - ******************************************************************************/ - -ACPI_PARSE_OBJECT * -AcpiPsGetDepthNext ( - ACPI_PARSE_OBJECT *Origin, - ACPI_PARSE_OBJECT *Op) -{ - ACPI_PARSE_OBJECT *Next = NULL; - ACPI_PARSE_OBJECT *Parent; - ACPI_PARSE_OBJECT *Arg; - - - ACPI_FUNCTION_ENTRY (); - - - if (!Op) - { - return (NULL); - } - - /* Look for an argument or child */ - - Next = AcpiPsGetArg (Op, 0); - if (Next) - { - return (Next); - } - - /* Look for a sibling */ - - Next = Op->Common.Next; - if (Next) - { - return (Next); - } - - /* Look for a sibling of parent */ - - Parent = Op->Common.Parent; - - while (Parent) - { - Arg = AcpiPsGetArg (Parent, 0); - while (Arg && (Arg != Origin) && (Arg != Op)) - { - Arg = Arg->Common.Next; - } - - if (Arg == Origin) - { - /* Reached parent of origin, end search */ - - return (NULL); - } - - if (Parent->Common.Next) - { - /* Found sibling of parent */ - - return (Parent->Common.Next); - } - - Op = Parent; - Parent = Parent->Common.Parent; - } - - return (Next); -} - - -#ifdef ACPI_OBSOLETE_FUNCTIONS -/******************************************************************************* - * - * FUNCTION: AcpiPsGetChild - * - * PARAMETERS: Op - Get the child of this Op - * - * RETURN: Child Op, Null if none is found. - * - * DESCRIPTION: Get op's children or NULL if none - * - ******************************************************************************/ - -ACPI_PARSE_OBJECT * -AcpiPsGetChild ( - ACPI_PARSE_OBJECT *Op) -{ - ACPI_PARSE_OBJECT *Child = NULL; - - - ACPI_FUNCTION_ENTRY (); - - - switch (Op->Common.AmlOpcode) - { - case AML_SCOPE_OP: - case AML_ELSE_OP: - case AML_DEVICE_OP: - case AML_THERMAL_ZONE_OP: - case AML_INT_METHODCALL_OP: - - Child = AcpiPsGetArg (Op, 0); - break; - - - case AML_BUFFER_OP: - case AML_PACKAGE_OP: - case AML_METHOD_OP: - case AML_IF_OP: - case AML_WHILE_OP: - case AML_FIELD_OP: - - Child = AcpiPsGetArg (Op, 1); - break; - - - case AML_POWER_RES_OP: - case AML_INDEX_FIELD_OP: - - Child = AcpiPsGetArg (Op, 2); - break; - - - case AML_PROCESSOR_OP: - case AML_BANK_FIELD_OP: - - Child = AcpiPsGetArg (Op, 3); - break; - - - default: - /* All others have no children */ - break; - } - - return (Child); -} -#endif - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/parser/psutils.c b/l4/pkg/acpica/lib-acpi/src/acpica/parser/psutils.c deleted file mode 100644 index 42f2b015d..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/parser/psutils.c +++ /dev/null @@ -1,362 +0,0 @@ -/****************************************************************************** - * - * Module Name: psutils - Parser miscellaneous utilities (Parser only) - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "amlcode.h" - -#define _COMPONENT ACPI_PARSER - ACPI_MODULE_NAME ("psutils") - - -/******************************************************************************* - * - * FUNCTION: AcpiPsCreateScopeOp - * - * PARAMETERS: None - * - * RETURN: A new Scope object, null on failure - * - * DESCRIPTION: Create a Scope and associated namepath op with the root name - * - ******************************************************************************/ - -ACPI_PARSE_OBJECT * -AcpiPsCreateScopeOp ( - void) -{ - ACPI_PARSE_OBJECT *ScopeOp; - - - ScopeOp = AcpiPsAllocOp (AML_SCOPE_OP); - if (!ScopeOp) - { - return (NULL); - } - - ScopeOp->Named.Name = ACPI_ROOT_NAME; - return (ScopeOp); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsInitOp - * - * PARAMETERS: Op - A newly allocated Op object - * Opcode - Opcode to store in the Op - * - * RETURN: None - * - * DESCRIPTION: Initialize a parse (Op) object - * - ******************************************************************************/ - -void -AcpiPsInitOp ( - ACPI_PARSE_OBJECT *Op, - UINT16 Opcode) -{ - ACPI_FUNCTION_ENTRY (); - - - Op->Common.DescriptorType = ACPI_DESC_TYPE_PARSER; - Op->Common.AmlOpcode = Opcode; - - ACPI_DISASM_ONLY_MEMBERS (ACPI_STRNCPY (Op->Common.AmlOpName, - (AcpiPsGetOpcodeInfo (Opcode))->Name, - sizeof (Op->Common.AmlOpName))); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsAllocOp - * - * PARAMETERS: Opcode - Opcode that will be stored in the new Op - * - * RETURN: Pointer to the new Op, null on failure - * - * DESCRIPTION: Allocate an acpi_op, choose op type (and thus size) based on - * opcode. A cache of opcodes is available for the pure - * GENERIC_OP, since this is by far the most commonly used. - * - ******************************************************************************/ - -ACPI_PARSE_OBJECT* -AcpiPsAllocOp ( - UINT16 Opcode) -{ - ACPI_PARSE_OBJECT *Op; - const ACPI_OPCODE_INFO *OpInfo; - UINT8 Flags = ACPI_PARSEOP_GENERIC; - - - ACPI_FUNCTION_ENTRY (); - - - OpInfo = AcpiPsGetOpcodeInfo (Opcode); - - /* Determine type of ParseOp required */ - - if (OpInfo->Flags & AML_DEFER) - { - Flags = ACPI_PARSEOP_DEFERRED; - } - else if (OpInfo->Flags & AML_NAMED) - { - Flags = ACPI_PARSEOP_NAMED; - } - else if (Opcode == AML_INT_BYTELIST_OP) - { - Flags = ACPI_PARSEOP_BYTELIST; - } - - /* Allocate the minimum required size object */ - - if (Flags == ACPI_PARSEOP_GENERIC) - { - /* The generic op (default) is by far the most common (16 to 1) */ - - Op = AcpiOsAcquireObject (AcpiGbl_PsNodeCache); - } - else - { - /* Extended parseop */ - - Op = AcpiOsAcquireObject (AcpiGbl_PsNodeExtCache); - } - - /* Initialize the Op */ - - if (Op) - { - AcpiPsInitOp (Op, Opcode); - Op->Common.Flags = Flags; - } - - return (Op); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsFreeOp - * - * PARAMETERS: Op - Op to be freed - * - * RETURN: None. - * - * DESCRIPTION: Free an Op object. Either put it on the GENERIC_OP cache list - * or actually free it. - * - ******************************************************************************/ - -void -AcpiPsFreeOp ( - ACPI_PARSE_OBJECT *Op) -{ - ACPI_FUNCTION_NAME (PsFreeOp); - - - if (Op->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP) - { - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Free retval op: %p\n", Op)); - } - - if (Op->Common.Flags & ACPI_PARSEOP_GENERIC) - { - (void) AcpiOsReleaseObject (AcpiGbl_PsNodeCache, Op); - } - else - { - (void) AcpiOsReleaseObject (AcpiGbl_PsNodeExtCache, Op); - } -} - - -/******************************************************************************* - * - * FUNCTION: Utility functions - * - * DESCRIPTION: Low level character and object functions - * - ******************************************************************************/ - - -/* - * Is "c" a namestring lead character? - */ -BOOLEAN -AcpiPsIsLeadingChar ( - UINT32 c) -{ - return ((BOOLEAN) (c == '_' || (c >= 'A' && c <= 'Z'))); -} - - -/* - * Is "c" a namestring prefix character? - */ -BOOLEAN -AcpiPsIsPrefixChar ( - UINT32 c) -{ - return ((BOOLEAN) (c == '\\' || c == '^')); -} - - -/* - * Get op's name (4-byte name segment) or 0 if unnamed - */ -UINT32 -AcpiPsGetName ( - ACPI_PARSE_OBJECT *Op) -{ - - /* The "generic" object has no name associated with it */ - - if (Op->Common.Flags & ACPI_PARSEOP_GENERIC) - { - return (0); - } - - /* Only the "Extended" parse objects have a name */ - - return (Op->Named.Name); -} - - -/* - * Set op's name - */ -void -AcpiPsSetName ( - ACPI_PARSE_OBJECT *Op, - UINT32 name) -{ - - /* The "generic" object has no name associated with it */ - - if (Op->Common.Flags & ACPI_PARSEOP_GENERIC) - { - return; - } - - Op->Named.Name = name; -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/parser/pswalk.c b/l4/pkg/acpica/lib-acpi/src/acpica/parser/pswalk.c deleted file mode 100644 index d8d5f5e6f..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/parser/pswalk.c +++ /dev/null @@ -1,193 +0,0 @@ -/****************************************************************************** - * - * Module Name: pswalk - Parser routines to walk parsed op tree(s) - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" - -#define _COMPONENT ACPI_PARSER - ACPI_MODULE_NAME ("pswalk") - - -/******************************************************************************* - * - * FUNCTION: AcpiPsDeleteParseTree - * - * PARAMETERS: SubtreeRoot - Root of tree (or subtree) to delete - * - * RETURN: None - * - * DESCRIPTION: Delete a portion of or an entire parse tree. - * - ******************************************************************************/ - -void -AcpiPsDeleteParseTree ( - ACPI_PARSE_OBJECT *SubtreeRoot) -{ - ACPI_PARSE_OBJECT *Op = SubtreeRoot; - ACPI_PARSE_OBJECT *Next = NULL; - ACPI_PARSE_OBJECT *Parent = NULL; - - - ACPI_FUNCTION_TRACE_PTR (PsDeleteParseTree, SubtreeRoot); - - - /* Visit all nodes in the subtree */ - - while (Op) - { - /* Check if we are not ascending */ - - if (Op != Parent) - { - /* Look for an argument or child of the current op */ - - Next = AcpiPsGetArg (Op, 0); - if (Next) - { - /* Still going downward in tree (Op is not completed yet) */ - - Op = Next; - continue; - } - } - - /* No more children, this Op is complete. */ - - Next = Op->Common.Next; - Parent = Op->Common.Parent; - - AcpiPsFreeOp (Op); - - /* If we are back to the starting point, the walk is complete. */ - - if (Op == SubtreeRoot) - { - return_VOID; - } - if (Next) - { - Op = Next; - } - else - { - Op = Parent; - } - } - - return_VOID; -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/parser/psxface.c b/l4/pkg/acpica/lib-acpi/src/acpica/parser/psxface.c deleted file mode 100644 index 1bf36e01c..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/parser/psxface.c +++ /dev/null @@ -1,510 +0,0 @@ -/****************************************************************************** - * - * Module Name: psxface - Parser external interfaces - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __PSXFACE_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acparser.h" -#include "acdispat.h" -#include "acinterp.h" -#include "amlcode.h" - - -#define _COMPONENT ACPI_PARSER - ACPI_MODULE_NAME ("psxface") - -/* Local Prototypes */ - -static void -AcpiPsStartTrace ( - ACPI_EVALUATE_INFO *Info); - -static void -AcpiPsStopTrace ( - ACPI_EVALUATE_INFO *Info); - -static void -AcpiPsUpdateParameterList ( - ACPI_EVALUATE_INFO *Info, - UINT16 Action); - - -/******************************************************************************* - * - * FUNCTION: AcpiDebugTrace - * - * PARAMETERS: MethodName - Valid ACPI name string - * DebugLevel - Optional level mask. 0 to use default - * DebugLayer - Optional layer mask. 0 to use default - * Flags - bit 1: one shot(1) or persistent(0) - * - * RETURN: Status - * - * DESCRIPTION: External interface to enable debug tracing during control - * method execution - * - ******************************************************************************/ - -ACPI_STATUS -AcpiDebugTrace ( - char *Name, - UINT32 DebugLevel, - UINT32 DebugLayer, - UINT32 Flags) -{ - ACPI_STATUS Status; - - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* TBDs: Validate name, allow full path or just nameseg */ - - AcpiGbl_TraceMethodName = *ACPI_CAST_PTR (UINT32, Name); - AcpiGbl_TraceFlags = Flags; - - if (DebugLevel) - { - AcpiGbl_TraceDbgLevel = DebugLevel; - } - if (DebugLayer) - { - AcpiGbl_TraceDbgLayer = DebugLayer; - } - - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsStartTrace - * - * PARAMETERS: Info - Method info struct - * - * RETURN: None - * - * DESCRIPTION: Start control method execution trace - * - ******************************************************************************/ - -static void -AcpiPsStartTrace ( - ACPI_EVALUATE_INFO *Info) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_ENTRY (); - - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return; - } - - if ((!AcpiGbl_TraceMethodName) || - (AcpiGbl_TraceMethodName != Info->ResolvedNode->Name.Integer)) - { - goto Exit; - } - - AcpiGbl_OriginalDbgLevel = AcpiDbgLevel; - AcpiGbl_OriginalDbgLayer = AcpiDbgLayer; - - AcpiDbgLevel = 0x00FFFFFF; - AcpiDbgLayer = ACPI_UINT32_MAX; - - if (AcpiGbl_TraceDbgLevel) - { - AcpiDbgLevel = AcpiGbl_TraceDbgLevel; - } - if (AcpiGbl_TraceDbgLayer) - { - AcpiDbgLayer = AcpiGbl_TraceDbgLayer; - } - - -Exit: - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsStopTrace - * - * PARAMETERS: Info - Method info struct - * - * RETURN: None - * - * DESCRIPTION: Stop control method execution trace - * - ******************************************************************************/ - -static void -AcpiPsStopTrace ( - ACPI_EVALUATE_INFO *Info) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_ENTRY (); - - - Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (Status)) - { - return; - } - - if ((!AcpiGbl_TraceMethodName) || - (AcpiGbl_TraceMethodName != Info->ResolvedNode->Name.Integer)) - { - goto Exit; - } - - /* Disable further tracing if type is one-shot */ - - if (AcpiGbl_TraceFlags & 1) - { - AcpiGbl_TraceMethodName = 0; - AcpiGbl_TraceDbgLevel = 0; - AcpiGbl_TraceDbgLayer = 0; - } - - AcpiDbgLevel = AcpiGbl_OriginalDbgLevel; - AcpiDbgLayer = AcpiGbl_OriginalDbgLayer; - -Exit: - (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsExecuteMethod - * - * PARAMETERS: Info - Method info block, contains: - * Node - Method Node to execute - * ObjDesc - Method object - * Parameters - List of parameters to pass to the method, - * terminated by NULL. Params itself may be - * NULL if no parameters are being passed. - * ReturnObject - Where to put method's return value (if - * any). If NULL, no value is returned. - * ParameterType - Type of Parameter list - * ReturnObject - Where to put method's return value (if - * any). If NULL, no value is returned. - * PassNumber - Parse or execute pass - * - * RETURN: Status - * - * DESCRIPTION: Execute a control method - * - ******************************************************************************/ - -ACPI_STATUS -AcpiPsExecuteMethod ( - ACPI_EVALUATE_INFO *Info) -{ - ACPI_STATUS Status; - ACPI_PARSE_OBJECT *Op; - ACPI_WALK_STATE *WalkState; - - - ACPI_FUNCTION_TRACE (PsExecuteMethod); - - - /* Validate the Info and method Node */ - - if (!Info || !Info->ResolvedNode) - { - return_ACPI_STATUS (AE_NULL_ENTRY); - } - - /* Init for new method, wait on concurrency semaphore */ - - Status = AcpiDsBeginMethodExecution (Info->ResolvedNode, Info->ObjDesc, NULL); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * The caller "owns" the parameters, so give each one an extra reference - */ - AcpiPsUpdateParameterList (Info, REF_INCREMENT); - - /* Begin tracing if requested */ - - AcpiPsStartTrace (Info); - - /* - * Execute the method. Performs parse simultaneously - */ - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "**** Begin Method Parse/Execute [%4.4s] **** Node=%p Obj=%p\n", - Info->ResolvedNode->Name.Ascii, Info->ResolvedNode, Info->ObjDesc)); - - /* Create and init a Root Node */ - - Op = AcpiPsCreateScopeOp (); - if (!Op) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* Create and initialize a new walk state */ - - Info->PassNumber = ACPI_IMODE_EXECUTE; - WalkState = AcpiDsCreateWalkState ( - Info->ObjDesc->Method.OwnerId, NULL, NULL, NULL); - if (!WalkState) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - Status = AcpiDsInitAmlWalk (WalkState, Op, Info->ResolvedNode, - Info->ObjDesc->Method.AmlStart, - Info->ObjDesc->Method.AmlLength, Info, Info->PassNumber); - if (ACPI_FAILURE (Status)) - { - AcpiDsDeleteWalkState (WalkState); - goto Cleanup; - } - - if (Info->ObjDesc->Method.Flags & AOPOBJ_MODULE_LEVEL) - { - WalkState->ParseFlags |= ACPI_PARSE_MODULE_LEVEL; - } - - /* Invoke an internal method if necessary */ - - if (Info->ObjDesc->Method.MethodFlags & AML_METHOD_INTERNAL_ONLY) - { - Status = Info->ObjDesc->Method.Extra.Implementation (WalkState); - Info->ReturnObject = WalkState->ReturnDesc; - - /* Cleanup states */ - - AcpiDsScopeStackClear (WalkState); - AcpiPsCleanupScope (&WalkState->ParserState); - AcpiDsTerminateControlMethod (WalkState->MethodDesc, WalkState); - AcpiDsDeleteWalkState (WalkState); - goto Cleanup; - } - - /* - * Start method evaluation with an implicit return of zero. This is done - * for Windows compatibility. - */ - if (AcpiGbl_EnableInterpreterSlack) - { - WalkState->ImplicitReturnObj = - AcpiUtCreateIntegerObject ((UINT64) 0); - if (!WalkState->ImplicitReturnObj) - { - Status = AE_NO_MEMORY; - AcpiDsDeleteWalkState (WalkState); - goto Cleanup; - } - } - - /* Parse the AML */ - - Status = AcpiPsParseAml (WalkState); - - /* WalkState was deleted by ParseAml */ - -Cleanup: - AcpiPsDeleteParseTree (Op); - - /* End optional tracing */ - - AcpiPsStopTrace (Info); - - /* Take away the extra reference that we gave the parameters above */ - - AcpiPsUpdateParameterList (Info, REF_DECREMENT); - - /* Exit now if error above */ - - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * If the method has returned an object, signal this to the caller with - * a control exception code - */ - if (Info->ReturnObject) - { - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Method returned ObjDesc=%p\n", - Info->ReturnObject)); - ACPI_DUMP_STACK_ENTRY (Info->ReturnObject); - - Status = AE_CTRL_RETURN_VALUE; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiPsUpdateParameterList - * - * PARAMETERS: Info - See ACPI_EVALUATE_INFO - * (Used: ParameterType and Parameters) - * Action - Add or Remove reference - * - * RETURN: Status - * - * DESCRIPTION: Update reference count on all method parameter objects - * - ******************************************************************************/ - -static void -AcpiPsUpdateParameterList ( - ACPI_EVALUATE_INFO *Info, - UINT16 Action) -{ - UINT32 i; - - - if (Info->Parameters) - { - /* Update reference count for each parameter */ - - for (i = 0; Info->Parameters[i]; i++) - { - /* Ignore errors, just do them all */ - - (void) AcpiUtUpdateObjectReference (Info->Parameters[i], Action); - } - } -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsaddr.c b/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsaddr.c deleted file mode 100644 index f2f3c4421..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsaddr.c +++ /dev/null @@ -1,479 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsaddr - Address resource descriptors (16/32/64) - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __RSADDR_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acresrc.h" - -#define _COMPONENT ACPI_RESOURCES - ACPI_MODULE_NAME ("rsaddr") - - -/******************************************************************************* - * - * AcpiRsConvertAddress16 - All WORD (16-bit) address resources - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsConvertAddress16[5] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_ADDRESS16, - ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS16), - ACPI_RSC_TABLE_SIZE (AcpiRsConvertAddress16)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_ADDRESS16, - sizeof (AML_RESOURCE_ADDRESS16), - 0}, - - /* Resource Type, General Flags, and Type-Specific Flags */ - - {ACPI_RSC_ADDRESS, 0, 0, 0}, - - /* - * These fields are contiguous in both the source and destination: - * Address Granularity - * Address Range Minimum - * Address Range Maximum - * Address Translation Offset - * Address Length - */ - {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.Address16.Granularity), - AML_OFFSET (Address16.Granularity), - 5}, - - /* Optional ResourceSource (Index and String) */ - - {ACPI_RSC_SOURCE, ACPI_RS_OFFSET (Data.Address16.ResourceSource), - 0, - sizeof (AML_RESOURCE_ADDRESS16)} -}; - - -/******************************************************************************* - * - * AcpiRsConvertAddress32 - All DWORD (32-bit) address resources - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsConvertAddress32[5] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_ADDRESS32, - ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS32), - ACPI_RSC_TABLE_SIZE (AcpiRsConvertAddress32)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_ADDRESS32, - sizeof (AML_RESOURCE_ADDRESS32), - 0}, - - /* Resource Type, General Flags, and Type-Specific Flags */ - - {ACPI_RSC_ADDRESS, 0, 0, 0}, - - /* - * These fields are contiguous in both the source and destination: - * Address Granularity - * Address Range Minimum - * Address Range Maximum - * Address Translation Offset - * Address Length - */ - {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.Address32.Granularity), - AML_OFFSET (Address32.Granularity), - 5}, - - /* Optional ResourceSource (Index and String) */ - - {ACPI_RSC_SOURCE, ACPI_RS_OFFSET (Data.Address32.ResourceSource), - 0, - sizeof (AML_RESOURCE_ADDRESS32)} -}; - - -/******************************************************************************* - * - * AcpiRsConvertAddress64 - All QWORD (64-bit) address resources - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsConvertAddress64[5] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_ADDRESS64, - ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS64), - ACPI_RSC_TABLE_SIZE (AcpiRsConvertAddress64)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_ADDRESS64, - sizeof (AML_RESOURCE_ADDRESS64), - 0}, - - /* Resource Type, General Flags, and Type-Specific Flags */ - - {ACPI_RSC_ADDRESS, 0, 0, 0}, - - /* - * These fields are contiguous in both the source and destination: - * Address Granularity - * Address Range Minimum - * Address Range Maximum - * Address Translation Offset - * Address Length - */ - {ACPI_RSC_MOVE64, ACPI_RS_OFFSET (Data.Address64.Granularity), - AML_OFFSET (Address64.Granularity), - 5}, - - /* Optional ResourceSource (Index and String) */ - - {ACPI_RSC_SOURCE, ACPI_RS_OFFSET (Data.Address64.ResourceSource), - 0, - sizeof (AML_RESOURCE_ADDRESS64)} -}; - - -/******************************************************************************* - * - * AcpiRsConvertExtAddress64 - All Extended (64-bit) address resources - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsConvertExtAddress64[5] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64, - ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_ADDRESS64), - ACPI_RSC_TABLE_SIZE (AcpiRsConvertExtAddress64)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64, - sizeof (AML_RESOURCE_EXTENDED_ADDRESS64), - 0}, - - /* Resource Type, General Flags, and Type-Specific Flags */ - - {ACPI_RSC_ADDRESS, 0, 0, 0}, - - /* Revision ID */ - - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.ExtAddress64.RevisionID), - AML_OFFSET (ExtAddress64.RevisionID), - 1}, - /* - * These fields are contiguous in both the source and destination: - * Address Granularity - * Address Range Minimum - * Address Range Maximum - * Address Translation Offset - * Address Length - * Type-Specific Attribute - */ - {ACPI_RSC_MOVE64, ACPI_RS_OFFSET (Data.ExtAddress64.Granularity), - AML_OFFSET (ExtAddress64.Granularity), - 6} -}; - - -/******************************************************************************* - * - * AcpiRsConvertGeneralFlags - Flags common to all address descriptors - * - ******************************************************************************/ - -static ACPI_RSCONVERT_INFO AcpiRsConvertGeneralFlags[6] = -{ - {ACPI_RSC_FLAGINIT, 0, AML_OFFSET (Address.Flags), - ACPI_RSC_TABLE_SIZE (AcpiRsConvertGeneralFlags)}, - - /* Resource Type (Memory, Io, BusNumber, etc.) */ - - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Address.ResourceType), - AML_OFFSET (Address.ResourceType), - 1}, - - /* General Flags - Consume, Decode, MinFixed, MaxFixed */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.ProducerConsumer), - AML_OFFSET (Address.Flags), - 0}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Decode), - AML_OFFSET (Address.Flags), - 1}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.MinAddressFixed), - AML_OFFSET (Address.Flags), - 2}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.MaxAddressFixed), - AML_OFFSET (Address.Flags), - 3} -}; - - -/******************************************************************************* - * - * AcpiRsConvertMemFlags - Flags common to Memory address descriptors - * - ******************************************************************************/ - -static ACPI_RSCONVERT_INFO AcpiRsConvertMemFlags[5] = -{ - {ACPI_RSC_FLAGINIT, 0, AML_OFFSET (Address.SpecificFlags), - ACPI_RSC_TABLE_SIZE (AcpiRsConvertMemFlags)}, - - /* Memory-specific flags */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.WriteProtect), - AML_OFFSET (Address.SpecificFlags), - 0}, - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.Caching), - AML_OFFSET (Address.SpecificFlags), - 1}, - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.RangeType), - AML_OFFSET (Address.SpecificFlags), - 3}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.Translation), - AML_OFFSET (Address.SpecificFlags), - 5} -}; - - -/******************************************************************************* - * - * AcpiRsConvertIoFlags - Flags common to I/O address descriptors - * - ******************************************************************************/ - -static ACPI_RSCONVERT_INFO AcpiRsConvertIoFlags[4] = -{ - {ACPI_RSC_FLAGINIT, 0, AML_OFFSET (Address.SpecificFlags), - ACPI_RSC_TABLE_SIZE (AcpiRsConvertIoFlags)}, - - /* I/O-specific flags */ - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Io.RangeType), - AML_OFFSET (Address.SpecificFlags), - 0}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Io.Translation), - AML_OFFSET (Address.SpecificFlags), - 4}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Io.TranslationType), - AML_OFFSET (Address.SpecificFlags), - 5} -}; - - -/******************************************************************************* - * - * FUNCTION: AcpiRsGetAddressCommon - * - * PARAMETERS: Resource - Pointer to the internal resource struct - * Aml - Pointer to the AML resource descriptor - * - * RETURN: TRUE if the ResourceType field is OK, FALSE otherwise - * - * DESCRIPTION: Convert common flag fields from a raw AML resource descriptor - * to an internal resource descriptor - * - ******************************************************************************/ - -BOOLEAN -AcpiRsGetAddressCommon ( - ACPI_RESOURCE *Resource, - AML_RESOURCE *Aml) -{ - ACPI_FUNCTION_ENTRY (); - - - /* Validate the Resource Type */ - - if ((Aml->Address.ResourceType > 2) && (Aml->Address.ResourceType < 0xC0)) - { - return (FALSE); - } - - /* Get the Resource Type and General Flags */ - - (void) AcpiRsConvertAmlToResource (Resource, Aml, AcpiRsConvertGeneralFlags); - - /* Get the Type-Specific Flags (Memory and I/O descriptors only) */ - - if (Resource->Data.Address.ResourceType == ACPI_MEMORY_RANGE) - { - (void) AcpiRsConvertAmlToResource (Resource, Aml, AcpiRsConvertMemFlags); - } - else if (Resource->Data.Address.ResourceType == ACPI_IO_RANGE) - { - (void) AcpiRsConvertAmlToResource (Resource, Aml, AcpiRsConvertIoFlags); - } - else - { - /* Generic resource type, just grab the TypeSpecific byte */ - - Resource->Data.Address.Info.TypeSpecific = Aml->Address.SpecificFlags; - } - - return (TRUE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsSetAddressCommon - * - * PARAMETERS: Aml - Pointer to the AML resource descriptor - * Resource - Pointer to the internal resource struct - * - * RETURN: None - * - * DESCRIPTION: Convert common flag fields from a resource descriptor to an - * AML descriptor - * - ******************************************************************************/ - -void -AcpiRsSetAddressCommon ( - AML_RESOURCE *Aml, - ACPI_RESOURCE *Resource) -{ - ACPI_FUNCTION_ENTRY (); - - - /* Set the Resource Type and General Flags */ - - (void) AcpiRsConvertResourceToAml (Resource, Aml, AcpiRsConvertGeneralFlags); - - /* Set the Type-Specific Flags (Memory and I/O descriptors only) */ - - if (Resource->Data.Address.ResourceType == ACPI_MEMORY_RANGE) - { - (void) AcpiRsConvertResourceToAml (Resource, Aml, AcpiRsConvertMemFlags); - } - else if (Resource->Data.Address.ResourceType == ACPI_IO_RANGE) - { - (void) AcpiRsConvertResourceToAml (Resource, Aml, AcpiRsConvertIoFlags); - } - else - { - /* Generic resource type, just copy the TypeSpecific byte */ - - Aml->Address.SpecificFlags = Resource->Data.Address.Info.TypeSpecific; - } -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rscalc.c b/l4/pkg/acpica/lib-acpi/src/acpica/resources/rscalc.c deleted file mode 100644 index 76aa44ff8..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rscalc.c +++ /dev/null @@ -1,745 +0,0 @@ -/******************************************************************************* - * - * Module Name: rscalc - Calculate stream and list lengths - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __RSCALC_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acresrc.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_RESOURCES - ACPI_MODULE_NAME ("rscalc") - - -/* Local prototypes */ - -static UINT8 -AcpiRsCountSetBits ( - UINT16 BitField); - -static ACPI_RS_LENGTH -AcpiRsStructOptionLength ( - ACPI_RESOURCE_SOURCE *ResourceSource); - -static UINT32 -AcpiRsStreamOptionLength ( - UINT32 ResourceLength, - UINT32 MinimumTotalLength); - - -/******************************************************************************* - * - * FUNCTION: AcpiRsCountSetBits - * - * PARAMETERS: BitField - Field in which to count bits - * - * RETURN: Number of bits set within the field - * - * DESCRIPTION: Count the number of bits set in a resource field. Used for - * (Short descriptor) interrupt and DMA lists. - * - ******************************************************************************/ - -static UINT8 -AcpiRsCountSetBits ( - UINT16 BitField) -{ - UINT8 BitsSet; - - - ACPI_FUNCTION_ENTRY (); - - - for (BitsSet = 0; BitField; BitsSet++) - { - /* Zero the least significant bit that is set */ - - BitField &= (UINT16) (BitField - 1); - } - - return (BitsSet); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsStructOptionLength - * - * PARAMETERS: ResourceSource - Pointer to optional descriptor field - * - * RETURN: Status - * - * DESCRIPTION: Common code to handle optional ResourceSourceIndex and - * ResourceSource fields in some Large descriptors. Used during - * list-to-stream conversion - * - ******************************************************************************/ - -static ACPI_RS_LENGTH -AcpiRsStructOptionLength ( - ACPI_RESOURCE_SOURCE *ResourceSource) -{ - ACPI_FUNCTION_ENTRY (); - - - /* - * If the ResourceSource string is valid, return the size of the string - * (StringLength includes the NULL terminator) plus the size of the - * ResourceSourceIndex (1). - */ - if (ResourceSource->StringPtr) - { - return ((ACPI_RS_LENGTH) (ResourceSource->StringLength + 1)); - } - - return (0); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsStreamOptionLength - * - * PARAMETERS: ResourceLength - Length from the resource header - * MinimumTotalLength - Minimum length of this resource, before - * any optional fields. Includes header size - * - * RETURN: Length of optional string (0 if no string present) - * - * DESCRIPTION: Common code to handle optional ResourceSourceIndex and - * ResourceSource fields in some Large descriptors. Used during - * stream-to-list conversion - * - ******************************************************************************/ - -static UINT32 -AcpiRsStreamOptionLength ( - UINT32 ResourceLength, - UINT32 MinimumAmlResourceLength) -{ - UINT32 StringLength = 0; - - - ACPI_FUNCTION_ENTRY (); - - - /* - * The ResourceSourceIndex and ResourceSource are optional elements of some - * Large-type resource descriptors. - */ - - /* - * If the length of the actual resource descriptor is greater than the ACPI - * spec-defined minimum length, it means that a ResourceSourceIndex exists - * and is followed by a (required) null terminated string. The string length - * (including the null terminator) is the resource length minus the minimum - * length, minus one byte for the ResourceSourceIndex itself. - */ - if (ResourceLength > MinimumAmlResourceLength) - { - /* Compute the length of the optional string */ - - StringLength = ResourceLength - MinimumAmlResourceLength - 1; - } - - /* - * Round the length up to a multiple of the native word in order to - * guarantee that the entire resource descriptor is native word aligned - */ - return ((UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (StringLength)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsGetAmlLength - * - * PARAMETERS: Resource - Pointer to the resource linked list - * SizeNeeded - Where the required size is returned - * - * RETURN: Status - * - * DESCRIPTION: Takes a linked list of internal resource descriptors and - * calculates the size buffer needed to hold the corresponding - * external resource byte stream. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRsGetAmlLength ( - ACPI_RESOURCE *Resource, - ACPI_SIZE *SizeNeeded) -{ - ACPI_SIZE AmlSizeNeeded = 0; - ACPI_RS_LENGTH TotalSize; - - - ACPI_FUNCTION_TRACE (RsGetAmlLength); - - - /* Traverse entire list of internal resource descriptors */ - - while (Resource) - { - /* Validate the descriptor type */ - - if (Resource->Type > ACPI_RESOURCE_TYPE_MAX) - { - return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE); - } - - /* Get the base size of the (external stream) resource descriptor */ - - TotalSize = AcpiGbl_AmlResourceSizes [Resource->Type]; - - /* - * Augment the base size for descriptors with optional and/or - * variable-length fields - */ - switch (Resource->Type) - { - case ACPI_RESOURCE_TYPE_IRQ: - - /* Length can be 3 or 2 */ - - if (Resource->Data.Irq.DescriptorLength == 2) - { - TotalSize--; - } - break; - - - case ACPI_RESOURCE_TYPE_START_DEPENDENT: - - /* Length can be 1 or 0 */ - - if (Resource->Data.Irq.DescriptorLength == 0) - { - TotalSize--; - } - break; - - - case ACPI_RESOURCE_TYPE_VENDOR: - /* - * Vendor Defined Resource: - * For a Vendor Specific resource, if the Length is between 1 and 7 - * it will be created as a Small Resource data type, otherwise it - * is a Large Resource data type. - */ - if (Resource->Data.Vendor.ByteLength > 7) - { - /* Base size of a Large resource descriptor */ - - TotalSize = sizeof (AML_RESOURCE_LARGE_HEADER); - } - - /* Add the size of the vendor-specific data */ - - TotalSize = (ACPI_RS_LENGTH) - (TotalSize + Resource->Data.Vendor.ByteLength); - break; - - - case ACPI_RESOURCE_TYPE_END_TAG: - /* - * End Tag: - * We are done -- return the accumulated total size. - */ - *SizeNeeded = AmlSizeNeeded + TotalSize; - - /* Normal exit */ - - return_ACPI_STATUS (AE_OK); - - - case ACPI_RESOURCE_TYPE_ADDRESS16: - /* - * 16-Bit Address Resource: - * Add the size of the optional ResourceSource info - */ - TotalSize = (ACPI_RS_LENGTH) - (TotalSize + AcpiRsStructOptionLength ( - &Resource->Data.Address16.ResourceSource)); - break; - - - case ACPI_RESOURCE_TYPE_ADDRESS32: - /* - * 32-Bit Address Resource: - * Add the size of the optional ResourceSource info - */ - TotalSize = (ACPI_RS_LENGTH) - (TotalSize + AcpiRsStructOptionLength ( - &Resource->Data.Address32.ResourceSource)); - break; - - - case ACPI_RESOURCE_TYPE_ADDRESS64: - /* - * 64-Bit Address Resource: - * Add the size of the optional ResourceSource info - */ - TotalSize = (ACPI_RS_LENGTH) - (TotalSize + AcpiRsStructOptionLength ( - &Resource->Data.Address64.ResourceSource)); - break; - - - case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: - /* - * Extended IRQ Resource: - * Add the size of each additional optional interrupt beyond the - * required 1 (4 bytes for each UINT32 interrupt number) - */ - TotalSize = (ACPI_RS_LENGTH) - (TotalSize + - ((Resource->Data.ExtendedIrq.InterruptCount - 1) * 4) + - - /* Add the size of the optional ResourceSource info */ - - AcpiRsStructOptionLength ( - &Resource->Data.ExtendedIrq.ResourceSource)); - break; - - - default: - break; - } - - /* Update the total */ - - AmlSizeNeeded += TotalSize; - - /* Point to the next object */ - - Resource = ACPI_ADD_PTR (ACPI_RESOURCE, Resource, Resource->Length); - } - - /* Did not find an EndTag resource descriptor */ - - return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsGetListLength - * - * PARAMETERS: AmlBuffer - Pointer to the resource byte stream - * AmlBufferLength - Size of AmlBuffer - * SizeNeeded - Where the size needed is returned - * - * RETURN: Status - * - * DESCRIPTION: Takes an external resource byte stream and calculates the size - * buffer needed to hold the corresponding internal resource - * descriptor linked list. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRsGetListLength ( - UINT8 *AmlBuffer, - UINT32 AmlBufferLength, - ACPI_SIZE *SizeNeeded) -{ - ACPI_STATUS Status; - UINT8 *EndAml; - UINT8 *Buffer; - UINT32 BufferSize; - UINT16 Temp16; - UINT16 ResourceLength; - UINT32 ExtraStructBytes; - UINT8 ResourceIndex; - UINT8 MinimumAmlResourceLength; - - - ACPI_FUNCTION_TRACE (RsGetListLength); - - - *SizeNeeded = 0; - EndAml = AmlBuffer + AmlBufferLength; - - /* Walk the list of AML resource descriptors */ - - while (AmlBuffer < EndAml) - { - /* Validate the Resource Type and Resource Length */ - - Status = AcpiUtValidateResource (AmlBuffer, &ResourceIndex); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Get the resource length and base (minimum) AML size */ - - ResourceLength = AcpiUtGetResourceLength (AmlBuffer); - MinimumAmlResourceLength = AcpiGbl_ResourceAmlSizes[ResourceIndex]; - - /* - * Augment the size for descriptors with optional - * and/or variable length fields - */ - ExtraStructBytes = 0; - Buffer = AmlBuffer + AcpiUtGetResourceHeaderLength (AmlBuffer); - - switch (AcpiUtGetResourceType (AmlBuffer)) - { - case ACPI_RESOURCE_NAME_IRQ: - /* - * IRQ Resource: - * Get the number of bits set in the 16-bit IRQ mask - */ - ACPI_MOVE_16_TO_16 (&Temp16, Buffer); - ExtraStructBytes = AcpiRsCountSetBits (Temp16); - break; - - - case ACPI_RESOURCE_NAME_DMA: - /* - * DMA Resource: - * Get the number of bits set in the 8-bit DMA mask - */ - ExtraStructBytes = AcpiRsCountSetBits (*Buffer); - break; - - - case ACPI_RESOURCE_NAME_VENDOR_SMALL: - case ACPI_RESOURCE_NAME_VENDOR_LARGE: - /* - * Vendor Resource: - * Get the number of vendor data bytes - */ - ExtraStructBytes = ResourceLength; - break; - - - case ACPI_RESOURCE_NAME_END_TAG: - /* - * End Tag: - * This is the normal exit, add size of EndTag - */ - *SizeNeeded += ACPI_RS_SIZE_MIN; - return_ACPI_STATUS (AE_OK); - - - case ACPI_RESOURCE_NAME_ADDRESS32: - case ACPI_RESOURCE_NAME_ADDRESS16: - case ACPI_RESOURCE_NAME_ADDRESS64: - /* - * Address Resource: - * Add the size of the optional ResourceSource - */ - ExtraStructBytes = AcpiRsStreamOptionLength ( - ResourceLength, MinimumAmlResourceLength); - break; - - - case ACPI_RESOURCE_NAME_EXTENDED_IRQ: - /* - * Extended IRQ Resource: - * Using the InterruptTableLength, add 4 bytes for each additional - * interrupt. Note: at least one interrupt is required and is - * included in the minimum descriptor size (reason for the -1) - */ - ExtraStructBytes = (Buffer[1] - 1) * sizeof (UINT32); - - /* Add the size of the optional ResourceSource */ - - ExtraStructBytes += AcpiRsStreamOptionLength ( - ResourceLength - ExtraStructBytes, MinimumAmlResourceLength); - break; - - - default: - break; - } - - /* - * Update the required buffer size for the internal descriptor structs - * - * Important: Round the size up for the appropriate alignment. This - * is a requirement on IA64. - */ - BufferSize = AcpiGbl_ResourceStructSizes[ResourceIndex] + - ExtraStructBytes; - BufferSize = (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (BufferSize); - - *SizeNeeded += BufferSize; - - ACPI_DEBUG_PRINT ((ACPI_DB_RESOURCES, - "Type %.2X, AmlLength %.2X InternalLength %.2X\n", - AcpiUtGetResourceType (AmlBuffer), - AcpiUtGetDescriptorLength (AmlBuffer), BufferSize)); - - /* - * Point to the next resource within the AML stream using the length - * contained in the resource descriptor header - */ - AmlBuffer += AcpiUtGetDescriptorLength (AmlBuffer); - } - - /* Did not find an EndTag resource descriptor */ - - return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsGetPciRoutingTableLength - * - * PARAMETERS: PackageObject - Pointer to the package object - * BufferSizeNeeded - UINT32 pointer of the size buffer - * needed to properly return the - * parsed data - * - * RETURN: Status - * - * DESCRIPTION: Given a package representing a PCI routing table, this - * calculates the size of the corresponding linked list of - * descriptions. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRsGetPciRoutingTableLength ( - ACPI_OPERAND_OBJECT *PackageObject, - ACPI_SIZE *BufferSizeNeeded) -{ - UINT32 NumberOfElements; - ACPI_SIZE TempSizeNeeded = 0; - ACPI_OPERAND_OBJECT **TopObjectList; - UINT32 Index; - ACPI_OPERAND_OBJECT *PackageElement; - ACPI_OPERAND_OBJECT **SubObjectList; - BOOLEAN NameFound; - UINT32 TableIndex; - - - ACPI_FUNCTION_TRACE (RsGetPciRoutingTableLength); - - - NumberOfElements = PackageObject->Package.Count; - - /* - * Calculate the size of the return buffer. - * The base size is the number of elements * the sizes of the - * structures. Additional space for the strings is added below. - * The minus one is to subtract the size of the UINT8 Source[1] - * member because it is added below. - * - * But each PRT_ENTRY structure has a pointer to a string and - * the size of that string must be found. - */ - TopObjectList = PackageObject->Package.Elements; - - for (Index = 0; Index < NumberOfElements; Index++) - { - /* Dereference the sub-package */ - - PackageElement = *TopObjectList; - - /* We must have a valid Package object */ - - if (!PackageElement || - (PackageElement->Common.Type != ACPI_TYPE_PACKAGE)) - { - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - /* - * The SubObjectList will now point to an array of the - * four IRQ elements: Address, Pin, Source and SourceIndex - */ - SubObjectList = PackageElement->Package.Elements; - - /* Scan the IrqTableElements for the Source Name String */ - - NameFound = FALSE; - - for (TableIndex = 0; TableIndex < 4 && !NameFound; TableIndex++) - { - if (*SubObjectList && /* Null object allowed */ - - ((ACPI_TYPE_STRING == - (*SubObjectList)->Common.Type) || - - ((ACPI_TYPE_LOCAL_REFERENCE == - (*SubObjectList)->Common.Type) && - - ((*SubObjectList)->Reference.Class == - ACPI_REFCLASS_NAME)))) - { - NameFound = TRUE; - } - else - { - /* Look at the next element */ - - SubObjectList++; - } - } - - TempSizeNeeded += (sizeof (ACPI_PCI_ROUTING_TABLE) - 4); - - /* Was a String type found? */ - - if (NameFound) - { - if ((*SubObjectList)->Common.Type == ACPI_TYPE_STRING) - { - /* - * The length String.Length field does not include the - * terminating NULL, add 1 - */ - TempSizeNeeded += ((ACPI_SIZE) - (*SubObjectList)->String.Length + 1); - } - else - { - TempSizeNeeded += AcpiNsGetPathnameLength ( - (*SubObjectList)->Reference.Node); - } - } - else - { - /* - * If no name was found, then this is a NULL, which is - * translated as a UINT32 zero. - */ - TempSizeNeeded += sizeof (UINT32); - } - - /* Round up the size since each element must be aligned */ - - TempSizeNeeded = ACPI_ROUND_UP_TO_64BIT (TempSizeNeeded); - - /* Point to the next ACPI_OPERAND_OBJECT */ - - TopObjectList++; - } - - /* - * Add an extra element to the end of the list, essentially a - * NULL terminator - */ - *BufferSizeNeeded = TempSizeNeeded + sizeof (ACPI_PCI_ROUTING_TABLE); - return_ACPI_STATUS (AE_OK); -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rscreate.c b/l4/pkg/acpica/lib-acpi/src/acpica/resources/rscreate.c deleted file mode 100644 index e9c840b64..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rscreate.c +++ /dev/null @@ -1,533 +0,0 @@ -/******************************************************************************* - * - * Module Name: rscreate - Create resource lists/tables - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __RSCREATE_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acresrc.h" -#include "acnamesp.h" - -#define _COMPONENT ACPI_RESOURCES - ACPI_MODULE_NAME ("rscreate") - - -/******************************************************************************* - * - * FUNCTION: AcpiRsCreateResourceList - * - * PARAMETERS: AmlBuffer - Pointer to the resource byte stream - * OutputBuffer - Pointer to the user's buffer - * - * RETURN: Status: AE_OK if okay, else a valid ACPI_STATUS code - * If OutputBuffer is not large enough, OutputBufferLength - * indicates how large OutputBuffer should be, else it - * indicates how may UINT8 elements of OutputBuffer are valid. - * - * DESCRIPTION: Takes the byte stream returned from a _CRS, _PRS control method - * execution and parses the stream to create a linked list - * of device resources. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRsCreateResourceList ( - ACPI_OPERAND_OBJECT *AmlBuffer, - ACPI_BUFFER *OutputBuffer) -{ - - ACPI_STATUS Status; - UINT8 *AmlStart; - ACPI_SIZE ListSizeNeeded = 0; - UINT32 AmlBufferLength; - void *Resource; - - - ACPI_FUNCTION_TRACE (RsCreateResourceList); - - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "AmlBuffer = %p\n", - AmlBuffer)); - - /* Params already validated, so we don't re-validate here */ - - AmlBufferLength = AmlBuffer->Buffer.Length; - AmlStart = AmlBuffer->Buffer.Pointer; - - /* - * Pass the AmlBuffer into a module that can calculate - * the buffer size needed for the linked list - */ - Status = AcpiRsGetListLength (AmlStart, AmlBufferLength, - &ListSizeNeeded); - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Status=%X ListSizeNeeded=%X\n", - Status, (UINT32) ListSizeNeeded)); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Validate/Allocate/Clear caller buffer */ - - Status = AcpiUtInitializeBuffer (OutputBuffer, ListSizeNeeded); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Do the conversion */ - - Resource = OutputBuffer->Pointer; - Status = AcpiUtWalkAmlResources (AmlStart, AmlBufferLength, - AcpiRsConvertAmlToResources, &Resource); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "OutputBuffer %p Length %X\n", - OutputBuffer->Pointer, (UINT32) OutputBuffer->Length)); - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsCreatePciRoutingTable - * - * PARAMETERS: PackageObject - Pointer to an ACPI_OPERAND_OBJECT - * package - * OutputBuffer - Pointer to the user's buffer - * - * RETURN: Status AE_OK if okay, else a valid ACPI_STATUS code. - * If the OutputBuffer is too small, the error will be - * AE_BUFFER_OVERFLOW and OutputBuffer->Length will point - * to the size buffer needed. - * - * DESCRIPTION: Takes the ACPI_OPERAND_OBJECT package and creates a - * linked list of PCI interrupt descriptions - * - * NOTE: It is the caller's responsibility to ensure that the start of the - * output buffer is aligned properly (if necessary). - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRsCreatePciRoutingTable ( - ACPI_OPERAND_OBJECT *PackageObject, - ACPI_BUFFER *OutputBuffer) -{ - UINT8 *Buffer; - ACPI_OPERAND_OBJECT **TopObjectList; - ACPI_OPERAND_OBJECT **SubObjectList; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_SIZE BufferSizeNeeded = 0; - UINT32 NumberOfElements; - UINT32 Index; - ACPI_PCI_ROUTING_TABLE *UserPrt; - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - ACPI_BUFFER PathBuffer; - - - ACPI_FUNCTION_TRACE (RsCreatePciRoutingTable); - - - /* Params already validated, so we don't re-validate here */ - - /* Get the required buffer length */ - - Status = AcpiRsGetPciRoutingTableLength (PackageObject, - &BufferSizeNeeded); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "BufferSizeNeeded = %X\n", - (UINT32) BufferSizeNeeded)); - - /* Validate/Allocate/Clear caller buffer */ - - Status = AcpiUtInitializeBuffer (OutputBuffer, BufferSizeNeeded); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Loop through the ACPI_INTERNAL_OBJECTS - Each object should be a - * package that in turn contains an ACPI_INTEGER Address, a UINT8 Pin, - * a Name, and a UINT8 SourceIndex. - */ - TopObjectList = PackageObject->Package.Elements; - NumberOfElements = PackageObject->Package.Count; - Buffer = OutputBuffer->Pointer; - UserPrt = ACPI_CAST_PTR (ACPI_PCI_ROUTING_TABLE, Buffer); - - for (Index = 0; Index < NumberOfElements; Index++) - { - /* - * Point UserPrt past this current structure - * - * NOTE: On the first iteration, UserPrt->Length will - * be zero because we cleared the return buffer earlier - */ - Buffer += UserPrt->Length; - UserPrt = ACPI_CAST_PTR (ACPI_PCI_ROUTING_TABLE, Buffer); - - /* - * Fill in the Length field with the information we have at this point. - * The minus four is to subtract the size of the UINT8 Source[4] member - * because it is added below. - */ - UserPrt->Length = (sizeof (ACPI_PCI_ROUTING_TABLE) - 4); - - /* Each element of the top-level package must also be a package */ - - if ((*TopObjectList)->Common.Type != ACPI_TYPE_PACKAGE) - { - ACPI_ERROR ((AE_INFO, - "(PRT[%X]) Need sub-package, found %s", - Index, AcpiUtGetObjectTypeName (*TopObjectList))); - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } - - /* Each sub-package must be of length 4 */ - - if ((*TopObjectList)->Package.Count != 4) - { - ACPI_ERROR ((AE_INFO, - "(PRT[%X]) Need package of length 4, found length %d", - Index, (*TopObjectList)->Package.Count)); - return_ACPI_STATUS (AE_AML_PACKAGE_LIMIT); - } - - /* - * Dereference the sub-package. - * The SubObjectList will now point to an array of the four IRQ - * elements: [Address, Pin, Source, SourceIndex] - */ - SubObjectList = (*TopObjectList)->Package.Elements; - - /* 1) First subobject: Dereference the PRT.Address */ - - ObjDesc = SubObjectList[0]; - if (ObjDesc->Common.Type != ACPI_TYPE_INTEGER) - { - ACPI_ERROR ((AE_INFO, "(PRT[%X].Address) Need Integer, found %s", - Index, AcpiUtGetObjectTypeName (ObjDesc))); - return_ACPI_STATUS (AE_BAD_DATA); - } - - UserPrt->Address = ObjDesc->Integer.Value; - - /* 2) Second subobject: Dereference the PRT.Pin */ - - ObjDesc = SubObjectList[1]; - if (ObjDesc->Common.Type != ACPI_TYPE_INTEGER) - { - ACPI_ERROR ((AE_INFO, "(PRT[%X].Pin) Need Integer, found %s", - Index, AcpiUtGetObjectTypeName (ObjDesc))); - return_ACPI_STATUS (AE_BAD_DATA); - } - - UserPrt->Pin = (UINT32) ObjDesc->Integer.Value; - - /* - * If the BIOS has erroneously reversed the _PRT SourceName (index 2) - * and the SourceIndex (index 3), fix it. _PRT is important enough to - * workaround this BIOS error. This also provides compatibility with - * other ACPI implementations. - */ - ObjDesc = SubObjectList[3]; - if (!ObjDesc || (ObjDesc->Common.Type != ACPI_TYPE_INTEGER)) - { - SubObjectList[3] = SubObjectList[2]; - SubObjectList[2] = ObjDesc; - - ACPI_WARNING ((AE_INFO, - "(PRT[%X].Source) SourceName and SourceIndex are reversed, fixed", - Index)); - } - - /* - * 3) Third subobject: Dereference the PRT.SourceName - * The name may be unresolved (slack mode), so allow a null object - */ - ObjDesc = SubObjectList[2]; - if (ObjDesc) - { - switch (ObjDesc->Common.Type) - { - case ACPI_TYPE_LOCAL_REFERENCE: - - if (ObjDesc->Reference.Class != ACPI_REFCLASS_NAME) - { - ACPI_ERROR ((AE_INFO, - "(PRT[%X].Source) Need name, found Reference Class %X", - Index, ObjDesc->Reference.Class)); - return_ACPI_STATUS (AE_BAD_DATA); - } - - Node = ObjDesc->Reference.Node; - - /* Use *remaining* length of the buffer as max for pathname */ - - PathBuffer.Length = OutputBuffer->Length - - (UINT32) ((UINT8 *) UserPrt->Source - - (UINT8 *) OutputBuffer->Pointer); - PathBuffer.Pointer = UserPrt->Source; - - Status = AcpiNsHandleToPathname ((ACPI_HANDLE) Node, &PathBuffer); - - /* +1 to include null terminator */ - - UserPrt->Length += (UINT32) ACPI_STRLEN (UserPrt->Source) + 1; - break; - - - case ACPI_TYPE_STRING: - - ACPI_STRCPY (UserPrt->Source, ObjDesc->String.Pointer); - - /* - * Add to the Length field the length of the string - * (add 1 for terminator) - */ - UserPrt->Length += ObjDesc->String.Length + 1; - break; - - - case ACPI_TYPE_INTEGER: - /* - * If this is a number, then the Source Name is NULL, since the - * entire buffer was zeroed out, we can leave this alone. - * - * Add to the Length field the length of the UINT32 NULL - */ - UserPrt->Length += sizeof (UINT32); - break; - - - default: - - ACPI_ERROR ((AE_INFO, - "(PRT[%X].Source) Need Ref/String/Integer, found %s", - Index, AcpiUtGetObjectTypeName (ObjDesc))); - return_ACPI_STATUS (AE_BAD_DATA); - } - } - - /* Now align the current length */ - - UserPrt->Length = (UINT32) ACPI_ROUND_UP_TO_64BIT (UserPrt->Length); - - /* 4) Fourth subobject: Dereference the PRT.SourceIndex */ - - ObjDesc = SubObjectList[3]; - if (ObjDesc->Common.Type != ACPI_TYPE_INTEGER) - { - ACPI_ERROR ((AE_INFO, - "(PRT[%X].SourceIndex) Need Integer, found %s", - Index, AcpiUtGetObjectTypeName (ObjDesc))); - return_ACPI_STATUS (AE_BAD_DATA); - } - - UserPrt->SourceIndex = (UINT32) ObjDesc->Integer.Value; - - /* Point to the next ACPI_OPERAND_OBJECT in the top level package */ - - TopObjectList++; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "OutputBuffer %p Length %X\n", - OutputBuffer->Pointer, (UINT32) OutputBuffer->Length)); - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsCreateAmlResources - * - * PARAMETERS: LinkedListBuffer - Pointer to the resource linked list - * OutputBuffer - Pointer to the user's buffer - * - * RETURN: Status AE_OK if okay, else a valid ACPI_STATUS code. - * If the OutputBuffer is too small, the error will be - * AE_BUFFER_OVERFLOW and OutputBuffer->Length will point - * to the size buffer needed. - * - * DESCRIPTION: Takes the linked list of device resources and - * creates a bytestream to be used as input for the - * _SRS control method. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRsCreateAmlResources ( - ACPI_RESOURCE *LinkedListBuffer, - ACPI_BUFFER *OutputBuffer) -{ - ACPI_STATUS Status; - ACPI_SIZE AmlSizeNeeded = 0; - - - ACPI_FUNCTION_TRACE (RsCreateAmlResources); - - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "LinkedListBuffer = %p\n", - LinkedListBuffer)); - - /* - * Params already validated, so we don't re-validate here - * - * Pass the LinkedListBuffer into a module that calculates - * the buffer size needed for the byte stream. - */ - Status = AcpiRsGetAmlLength (LinkedListBuffer, - &AmlSizeNeeded); - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "AmlSizeNeeded=%X, %s\n", - (UINT32) AmlSizeNeeded, AcpiFormatException (Status))); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Validate/Allocate/Clear caller buffer */ - - Status = AcpiUtInitializeBuffer (OutputBuffer, AmlSizeNeeded); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Do the conversion */ - - Status = AcpiRsConvertResourcesToAml (LinkedListBuffer, AmlSizeNeeded, - OutputBuffer->Pointer); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "OutputBuffer %p Length %X\n", - OutputBuffer->Pointer, (UINT32) OutputBuffer->Length)); - return_ACPI_STATUS (AE_OK); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsdump.c b/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsdump.c deleted file mode 100644 index 62db284c6..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsdump.c +++ /dev/null @@ -1,872 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsdump - Functions to display the resource structures. - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __RSDUMP_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acresrc.h" - -#define _COMPONENT ACPI_RESOURCES - ACPI_MODULE_NAME ("rsdump") - - -#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) - -/* Local prototypes */ - -static void -AcpiRsOutString ( - char *Title, - char *Value); - -static void -AcpiRsOutInteger8 ( - char *Title, - UINT8 Value); - -static void -AcpiRsOutInteger16 ( - char *Title, - UINT16 Value); - -static void -AcpiRsOutInteger32 ( - char *Title, - UINT32 Value); - -static void -AcpiRsOutInteger64 ( - char *Title, - UINT64 Value); - -static void -AcpiRsOutTitle ( - char *Title); - -static void -AcpiRsDumpByteList ( - UINT16 Length, - UINT8 *Data); - -static void -AcpiRsDumpDwordList ( - UINT8 Length, - UINT32 *Data); - -static void -AcpiRsDumpShortByteList ( - UINT8 Length, - UINT8 *Data); - -static void -AcpiRsDumpResourceSource ( - ACPI_RESOURCE_SOURCE *ResourceSource); - -static void -AcpiRsDumpAddressCommon ( - ACPI_RESOURCE_DATA *Resource); - -static void -AcpiRsDumpDescriptor ( - void *Resource, - ACPI_RSDUMP_INFO *Table); - - -#define ACPI_RSD_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_RESOURCE_DATA,f) -#define ACPI_PRT_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_PCI_ROUTING_TABLE,f) -#define ACPI_RSD_TABLE_SIZE(name) (sizeof(name) / sizeof (ACPI_RSDUMP_INFO)) - - -/******************************************************************************* - * - * Resource Descriptor info tables - * - * Note: The first table entry must be a Title or Literal and must contain - * the table length (number of table entries) - * - ******************************************************************************/ - -ACPI_RSDUMP_INFO AcpiRsDumpIrq[7] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpIrq), "IRQ", NULL}, - {ACPI_RSD_UINT8 , ACPI_RSD_OFFSET (Irq.DescriptorLength), "Descriptor Length", NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Irq.Triggering), "Triggering", AcpiGbl_HeDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Irq.Polarity), "Polarity", AcpiGbl_LlDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Irq.Sharable), "Sharing", AcpiGbl_ShrDecode}, - {ACPI_RSD_UINT8 , ACPI_RSD_OFFSET (Irq.InterruptCount), "Interrupt Count", NULL}, - {ACPI_RSD_SHORTLIST,ACPI_RSD_OFFSET (Irq.Interrupts[0]), "Interrupt List", NULL} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpDma[6] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpDma), "DMA", NULL}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Dma.Type), "Speed", AcpiGbl_TypDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Dma.BusMaster), "Mastering", AcpiGbl_BmDecode}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Dma.Transfer), "Transfer Type", AcpiGbl_SizDecode}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (Dma.ChannelCount), "Channel Count", NULL}, - {ACPI_RSD_SHORTLIST,ACPI_RSD_OFFSET (Dma.Channels[0]), "Channel List", NULL} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpStartDpf[4] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpStartDpf), "Start-Dependent-Functions",NULL}, - {ACPI_RSD_UINT8 , ACPI_RSD_OFFSET (StartDpf.DescriptorLength), "Descriptor Length", NULL}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (StartDpf.CompatibilityPriority), "Compatibility Priority", AcpiGbl_ConfigDecode}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (StartDpf.PerformanceRobustness), "Performance/Robustness", AcpiGbl_ConfigDecode} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpEndDpf[1] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpEndDpf), "End-Dependent-Functions", NULL} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpIo[6] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpIo), "I/O", NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Io.IoDecode), "Address Decoding", AcpiGbl_IoDecode}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Io.Minimum), "Address Minimum", NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Io.Maximum), "Address Maximum", NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (Io.Alignment), "Alignment", NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (Io.AddressLength), "Address Length", NULL} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpFixedIo[3] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpFixedIo), "Fixed I/O", NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (FixedIo.Address), "Address", NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (FixedIo.AddressLength), "Address Length", NULL} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpVendor[3] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpVendor), "Vendor Specific", NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Vendor.ByteLength), "Length", NULL}, - {ACPI_RSD_LONGLIST, ACPI_RSD_OFFSET (Vendor.ByteData[0]), "Vendor Data", NULL} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpEndTag[1] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpEndTag), "EndTag", NULL} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpMemory24[6] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpMemory24), "24-Bit Memory Range", NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Memory24.WriteProtect), "Write Protect", AcpiGbl_RwDecode}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Memory24.Minimum), "Address Minimum", NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Memory24.Maximum), "Address Maximum", NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Memory24.Alignment), "Alignment", NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Memory24.AddressLength), "Address Length", NULL} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpMemory32[6] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpMemory32), "32-Bit Memory Range", NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Memory32.WriteProtect), "Write Protect", AcpiGbl_RwDecode}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Memory32.Minimum), "Address Minimum", NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Memory32.Maximum), "Address Maximum", NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Memory32.Alignment), "Alignment", NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Memory32.AddressLength), "Address Length", NULL} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpFixedMemory32[4] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpFixedMemory32), "32-Bit Fixed Memory Range",NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (FixedMemory32.WriteProtect), "Write Protect", AcpiGbl_RwDecode}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (FixedMemory32.Address), "Address", NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (FixedMemory32.AddressLength), "Address Length", NULL} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpAddress16[8] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpAddress16), "16-Bit WORD Address Space",NULL}, - {ACPI_RSD_ADDRESS, 0, NULL, NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Address16.Granularity), "Granularity", NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Address16.Minimum), "Address Minimum", NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Address16.Maximum), "Address Maximum", NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Address16.TranslationOffset), "Translation Offset", NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (Address16.AddressLength), "Address Length", NULL}, - {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (Address16.ResourceSource), NULL, NULL} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpAddress32[8] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpAddress32), "32-Bit DWORD Address Space", NULL}, - {ACPI_RSD_ADDRESS, 0, NULL, NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Address32.Granularity), "Granularity", NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Address32.Minimum), "Address Minimum", NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Address32.Maximum), "Address Maximum", NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Address32.TranslationOffset), "Translation Offset", NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (Address32.AddressLength), "Address Length", NULL}, - {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (Address32.ResourceSource), NULL, NULL} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpAddress64[8] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpAddress64), "64-Bit QWORD Address Space", NULL}, - {ACPI_RSD_ADDRESS, 0, NULL, NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (Address64.Granularity), "Granularity", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (Address64.Minimum), "Address Minimum", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (Address64.Maximum), "Address Maximum", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (Address64.TranslationOffset), "Translation Offset", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (Address64.AddressLength), "Address Length", NULL}, - {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (Address64.ResourceSource), NULL, NULL} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpExtAddress64[8] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpExtAddress64), "64-Bit Extended Address Space", NULL}, - {ACPI_RSD_ADDRESS, 0, NULL, NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (ExtAddress64.Granularity), "Granularity", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (ExtAddress64.Minimum), "Address Minimum", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (ExtAddress64.Maximum), "Address Maximum", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (ExtAddress64.TranslationOffset), "Translation Offset", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (ExtAddress64.AddressLength), "Address Length", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (ExtAddress64.TypeSpecific), "Type-Specific Attribute", NULL} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpExtIrq[8] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpExtIrq), "Extended IRQ", NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ExtendedIrq.ProducerConsumer), "Type", AcpiGbl_ConsumeDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ExtendedIrq.Triggering), "Triggering", AcpiGbl_HeDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ExtendedIrq.Polarity), "Polarity", AcpiGbl_LlDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (ExtendedIrq.Sharable), "Sharing", AcpiGbl_ShrDecode}, - {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (ExtendedIrq.ResourceSource), NULL, NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (ExtendedIrq.InterruptCount), "Interrupt Count", NULL}, - {ACPI_RSD_DWORDLIST,ACPI_RSD_OFFSET (ExtendedIrq.Interrupts[0]), "Interrupt List", NULL} -}; - -ACPI_RSDUMP_INFO AcpiRsDumpGenericReg[6] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpGenericReg), "Generic Register", NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (GenericReg.SpaceId), "Space ID", NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (GenericReg.BitWidth), "Bit Width", NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (GenericReg.BitOffset), "Bit Offset", NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (GenericReg.AccessSize), "Access Size", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET (GenericReg.Address), "Address", NULL} -}; - - -/* - * Tables used for common address descriptor flag fields - */ -static ACPI_RSDUMP_INFO AcpiRsDumpGeneralFlags[5] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpGeneralFlags), NULL, NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.ProducerConsumer), "Consumer/Producer", AcpiGbl_ConsumeDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Decode), "Address Decode", AcpiGbl_DecDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.MinAddressFixed), "Min Relocatability", AcpiGbl_MinDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.MaxAddressFixed), "Max Relocatability", AcpiGbl_MaxDecode} -}; - -static ACPI_RSDUMP_INFO AcpiRsDumpMemoryFlags[5] = -{ - {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE (AcpiRsDumpMemoryFlags), "Resource Type", (void *) "Memory Range"}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.WriteProtect), "Write Protect", AcpiGbl_RwDecode}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.Caching), "Caching", AcpiGbl_MemDecode}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.RangeType), "Range Type", AcpiGbl_MtpDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Mem.Translation), "Translation", AcpiGbl_TtpDecode} -}; - -static ACPI_RSDUMP_INFO AcpiRsDumpIoFlags[4] = -{ - {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE (AcpiRsDumpIoFlags), "Resource Type", (void *) "I/O Range"}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET (Address.Info.Io.RangeType), "Range Type", AcpiGbl_RngDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Io.Translation), "Translation", AcpiGbl_TtpDecode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (Address.Info.Io.TranslationType), "Translation Type", AcpiGbl_TrsDecode} -}; - - -/* - * Table used to dump _PRT contents - */ -static ACPI_RSDUMP_INFO AcpiRsDumpPrt[5] = -{ - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPrt), NULL, NULL}, - {ACPI_RSD_UINT64, ACPI_PRT_OFFSET (Address), "Address", NULL}, - {ACPI_RSD_UINT32, ACPI_PRT_OFFSET (Pin), "Pin", NULL}, - {ACPI_RSD_STRING, ACPI_PRT_OFFSET (Source[0]), "Source", NULL}, - {ACPI_RSD_UINT32, ACPI_PRT_OFFSET (SourceIndex), "Source Index", NULL} -}; - - -/******************************************************************************* - * - * FUNCTION: AcpiRsDumpDescriptor - * - * PARAMETERS: Resource - * - * RETURN: None - * - * DESCRIPTION: - * - ******************************************************************************/ - -static void -AcpiRsDumpDescriptor ( - void *Resource, - ACPI_RSDUMP_INFO *Table) -{ - UINT8 *Target = NULL; - UINT8 *PreviousTarget; - char *Name; - UINT8 Count; - - - /* First table entry must contain the table length (# of table entries) */ - - Count = Table->Offset; - - while (Count) - { - PreviousTarget = Target; - Target = ACPI_ADD_PTR (UINT8, Resource, Table->Offset); - Name = Table->Name; - - switch (Table->Opcode) - { - case ACPI_RSD_TITLE: - /* - * Optional resource title - */ - if (Table->Name) - { - AcpiOsPrintf ("%s Resource\n", Name); - } - break; - - /* Strings */ - - case ACPI_RSD_LITERAL: - AcpiRsOutString (Name, ACPI_CAST_PTR (char, Table->Pointer)); - break; - - case ACPI_RSD_STRING: - AcpiRsOutString (Name, ACPI_CAST_PTR (char, Target)); - break; - - /* Data items, 8/16/32/64 bit */ - - case ACPI_RSD_UINT8: - AcpiRsOutInteger8 (Name, ACPI_GET8 (Target)); - break; - - case ACPI_RSD_UINT16: - AcpiRsOutInteger16 (Name, ACPI_GET16 (Target)); - break; - - case ACPI_RSD_UINT32: - AcpiRsOutInteger32 (Name, ACPI_GET32 (Target)); - break; - - case ACPI_RSD_UINT64: - AcpiRsOutInteger64 (Name, ACPI_GET64 (Target)); - break; - - /* Flags: 1-bit and 2-bit flags supported */ - - case ACPI_RSD_1BITFLAG: - AcpiRsOutString (Name, ACPI_CAST_PTR (char, - Table->Pointer [*Target & 0x01])); - break; - - case ACPI_RSD_2BITFLAG: - AcpiRsOutString (Name, ACPI_CAST_PTR (char, - Table->Pointer [*Target & 0x03])); - break; - - case ACPI_RSD_SHORTLIST: - /* - * Short byte list (single line output) for DMA and IRQ resources - * Note: The list length is obtained from the previous table entry - */ - if (PreviousTarget) - { - AcpiRsOutTitle (Name); - AcpiRsDumpShortByteList (*PreviousTarget, Target); - } - break; - - case ACPI_RSD_LONGLIST: - /* - * Long byte list for Vendor resource data - * Note: The list length is obtained from the previous table entry - */ - if (PreviousTarget) - { - AcpiRsDumpByteList (ACPI_GET16 (PreviousTarget), Target); - } - break; - - case ACPI_RSD_DWORDLIST: - /* - * Dword list for Extended Interrupt resources - * Note: The list length is obtained from the previous table entry - */ - if (PreviousTarget) - { - AcpiRsDumpDwordList (*PreviousTarget, - ACPI_CAST_PTR (UINT32, Target)); - } - break; - - case ACPI_RSD_ADDRESS: - /* - * Common flags for all Address resources - */ - AcpiRsDumpAddressCommon (ACPI_CAST_PTR (ACPI_RESOURCE_DATA, Target)); - break; - - case ACPI_RSD_SOURCE: - /* - * Optional ResourceSource for Address resources - */ - AcpiRsDumpResourceSource (ACPI_CAST_PTR (ACPI_RESOURCE_SOURCE, Target)); - break; - - default: - AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n", - Table->Opcode); - return; - } - - Table++; - Count--; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsDumpResourceSource - * - * PARAMETERS: ResourceSource - Pointer to a Resource Source struct - * - * RETURN: None - * - * DESCRIPTION: Common routine for dumping the optional ResourceSource and the - * corresponding ResourceSourceIndex. - * - ******************************************************************************/ - -static void -AcpiRsDumpResourceSource ( - ACPI_RESOURCE_SOURCE *ResourceSource) -{ - ACPI_FUNCTION_ENTRY (); - - - if (ResourceSource->Index == 0xFF) - { - return; - } - - AcpiRsOutInteger8 ("Resource Source Index", - ResourceSource->Index); - - AcpiRsOutString ("Resource Source", - ResourceSource->StringPtr ? - ResourceSource->StringPtr : "[Not Specified]"); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsDumpAddressCommon - * - * PARAMETERS: Resource - Pointer to an internal resource descriptor - * - * RETURN: None - * - * DESCRIPTION: Dump the fields that are common to all Address resource - * descriptors - * - ******************************************************************************/ - -static void -AcpiRsDumpAddressCommon ( - ACPI_RESOURCE_DATA *Resource) -{ - ACPI_FUNCTION_ENTRY (); - - - /* Decode the type-specific flags */ - - switch (Resource->Address.ResourceType) - { - case ACPI_MEMORY_RANGE: - - AcpiRsDumpDescriptor (Resource, AcpiRsDumpMemoryFlags); - break; - - case ACPI_IO_RANGE: - - AcpiRsDumpDescriptor (Resource, AcpiRsDumpIoFlags); - break; - - case ACPI_BUS_NUMBER_RANGE: - - AcpiRsOutString ("Resource Type", "Bus Number Range"); - break; - - default: - - AcpiRsOutInteger8 ("Resource Type", - (UINT8) Resource->Address.ResourceType); - break; - } - - /* Decode the general flags */ - - AcpiRsDumpDescriptor (Resource, AcpiRsDumpGeneralFlags); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsDumpResourceList - * - * PARAMETERS: ResourceList - Pointer to a resource descriptor list - * - * RETURN: None - * - * DESCRIPTION: Dispatches the structure to the correct dump routine. - * - ******************************************************************************/ - -void -AcpiRsDumpResourceList ( - ACPI_RESOURCE *ResourceList) -{ - UINT32 Count = 0; - UINT32 Type; - - - ACPI_FUNCTION_ENTRY (); - - - if (!(AcpiDbgLevel & ACPI_LV_RESOURCES) || !( _COMPONENT & AcpiDbgLayer)) - { - return; - } - - /* Walk list and dump all resource descriptors (END_TAG terminates) */ - - do - { - AcpiOsPrintf ("\n[%02X] ", Count); - Count++; - - /* Validate Type before dispatch */ - - Type = ResourceList->Type; - if (Type > ACPI_RESOURCE_TYPE_MAX) - { - AcpiOsPrintf ( - "Invalid descriptor type (%X) in resource list\n", - ResourceList->Type); - return; - } - - /* Dump the resource descriptor */ - - AcpiRsDumpDescriptor (&ResourceList->Data, - AcpiGbl_DumpResourceDispatch[Type]); - - /* Point to the next resource structure */ - - ResourceList = ACPI_ADD_PTR (ACPI_RESOURCE, ResourceList, - ResourceList->Length); - - /* Exit when END_TAG descriptor is reached */ - - } while (Type != ACPI_RESOURCE_TYPE_END_TAG); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsDumpIrqList - * - * PARAMETERS: RouteTable - Pointer to the routing table to dump. - * - * RETURN: None - * - * DESCRIPTION: Print IRQ routing table - * - ******************************************************************************/ - -void -AcpiRsDumpIrqList ( - UINT8 *RouteTable) -{ - ACPI_PCI_ROUTING_TABLE *PrtElement; - UINT8 Count; - - - ACPI_FUNCTION_ENTRY (); - - - if (!(AcpiDbgLevel & ACPI_LV_RESOURCES) || !( _COMPONENT & AcpiDbgLayer)) - { - return; - } - - PrtElement = ACPI_CAST_PTR (ACPI_PCI_ROUTING_TABLE, RouteTable); - - /* Dump all table elements, Exit on zero length element */ - - for (Count = 0; PrtElement->Length; Count++) - { - AcpiOsPrintf ("\n[%02X] PCI IRQ Routing Table Package\n", Count); - AcpiRsDumpDescriptor (PrtElement, AcpiRsDumpPrt); - - PrtElement = ACPI_ADD_PTR (ACPI_PCI_ROUTING_TABLE, - PrtElement, PrtElement->Length); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsOut* - * - * PARAMETERS: Title - Name of the resource field - * Value - Value of the resource field - * - * RETURN: None - * - * DESCRIPTION: Miscellaneous helper functions to consistently format the - * output of the resource dump routines - * - ******************************************************************************/ - -static void -AcpiRsOutString ( - char *Title, - char *Value) -{ - AcpiOsPrintf ("%27s : %s", Title, Value); - if (!*Value) - { - AcpiOsPrintf ("[NULL NAMESTRING]"); - } - AcpiOsPrintf ("\n"); -} - -static void -AcpiRsOutInteger8 ( - char *Title, - UINT8 Value) -{ - AcpiOsPrintf ("%27s : %2.2X\n", Title, Value); -} - -static void -AcpiRsOutInteger16 ( - char *Title, - UINT16 Value) -{ - AcpiOsPrintf ("%27s : %4.4X\n", Title, Value); -} - -static void -AcpiRsOutInteger32 ( - char *Title, - UINT32 Value) -{ - AcpiOsPrintf ("%27s : %8.8X\n", Title, Value); -} - -static void -AcpiRsOutInteger64 ( - char *Title, - UINT64 Value) -{ - AcpiOsPrintf ("%27s : %8.8X%8.8X\n", Title, - ACPI_FORMAT_UINT64 (Value)); -} - -static void -AcpiRsOutTitle ( - char *Title) -{ - AcpiOsPrintf ("%27s : ", Title); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsDump*List - * - * PARAMETERS: Length - Number of elements in the list - * Data - Start of the list - * - * RETURN: None - * - * DESCRIPTION: Miscellaneous functions to dump lists of raw data - * - ******************************************************************************/ - -static void -AcpiRsDumpByteList ( - UINT16 Length, - UINT8 *Data) -{ - UINT8 i; - - - for (i = 0; i < Length; i++) - { - AcpiOsPrintf ("%25s%2.2X : %2.2X\n", - "Byte", i, Data[i]); - } -} - -static void -AcpiRsDumpShortByteList ( - UINT8 Length, - UINT8 *Data) -{ - UINT8 i; - - - for (i = 0; i < Length; i++) - { - AcpiOsPrintf ("%X ", Data[i]); - } - AcpiOsPrintf ("\n"); -} - -static void -AcpiRsDumpDwordList ( - UINT8 Length, - UINT32 *Data) -{ - UINT8 i; - - - for (i = 0; i < Length; i++) - { - AcpiOsPrintf ("%25s%2.2X : %8.8X\n", - "Dword", i, Data[i]); - } -} - -#endif - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsinfo.c b/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsinfo.c deleted file mode 100644 index abf79943d..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsinfo.c +++ /dev/null @@ -1,290 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsinfo - Dispatch and Info tables - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __RSINFO_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acresrc.h" - -#define _COMPONENT ACPI_RESOURCES - ACPI_MODULE_NAME ("rsinfo") - -/* - * Resource dispatch and information tables. Any new resource types (either - * Large or Small) must be reflected in each of these tables, so they are here - * in one place. - * - * The tables for Large descriptors are indexed by bits 6:0 of the AML - * descriptor type byte. The tables for Small descriptors are indexed by - * bits 6:3 of the descriptor byte. The tables for internal resource - * descriptors are indexed by the ACPI_RESOURCE_TYPE field. - */ - - -/* Dispatch table for resource-to-AML (Set Resource) conversion functions */ - -ACPI_RSCONVERT_INFO *AcpiGbl_SetResourceDispatch[] = -{ - AcpiRsSetIrq, /* 0x00, ACPI_RESOURCE_TYPE_IRQ */ - AcpiRsConvertDma, /* 0x01, ACPI_RESOURCE_TYPE_DMA */ - AcpiRsSetStartDpf, /* 0x02, ACPI_RESOURCE_TYPE_START_DEPENDENT */ - AcpiRsConvertEndDpf, /* 0x03, ACPI_RESOURCE_TYPE_END_DEPENDENT */ - AcpiRsConvertIo, /* 0x04, ACPI_RESOURCE_TYPE_IO */ - AcpiRsConvertFixedIo, /* 0x05, ACPI_RESOURCE_TYPE_FIXED_IO */ - AcpiRsSetVendor, /* 0x06, ACPI_RESOURCE_TYPE_VENDOR */ - AcpiRsConvertEndTag, /* 0x07, ACPI_RESOURCE_TYPE_END_TAG */ - AcpiRsConvertMemory24, /* 0x08, ACPI_RESOURCE_TYPE_MEMORY24 */ - AcpiRsConvertMemory32, /* 0x09, ACPI_RESOURCE_TYPE_MEMORY32 */ - AcpiRsConvertFixedMemory32, /* 0x0A, ACPI_RESOURCE_TYPE_FIXED_MEMORY32 */ - AcpiRsConvertAddress16, /* 0x0B, ACPI_RESOURCE_TYPE_ADDRESS16 */ - AcpiRsConvertAddress32, /* 0x0C, ACPI_RESOURCE_TYPE_ADDRESS32 */ - AcpiRsConvertAddress64, /* 0x0D, ACPI_RESOURCE_TYPE_ADDRESS64 */ - AcpiRsConvertExtAddress64, /* 0x0E, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */ - AcpiRsConvertExtIrq, /* 0x0F, ACPI_RESOURCE_TYPE_EXTENDED_IRQ */ - AcpiRsConvertGenericReg /* 0x10, ACPI_RESOURCE_TYPE_GENERIC_REGISTER */ -}; - -/* Dispatch tables for AML-to-resource (Get Resource) conversion functions */ - -ACPI_RSCONVERT_INFO *AcpiGbl_GetResourceDispatch[] = -{ - /* Small descriptors */ - - NULL, /* 0x00, Reserved */ - NULL, /* 0x01, Reserved */ - NULL, /* 0x02, Reserved */ - NULL, /* 0x03, Reserved */ - AcpiRsGetIrq, /* 0x04, ACPI_RESOURCE_NAME_IRQ */ - AcpiRsConvertDma, /* 0x05, ACPI_RESOURCE_NAME_DMA */ - AcpiRsGetStartDpf, /* 0x06, ACPI_RESOURCE_NAME_START_DEPENDENT */ - AcpiRsConvertEndDpf, /* 0x07, ACPI_RESOURCE_NAME_END_DEPENDENT */ - AcpiRsConvertIo, /* 0x08, ACPI_RESOURCE_NAME_IO */ - AcpiRsConvertFixedIo, /* 0x09, ACPI_RESOURCE_NAME_FIXED_IO */ - NULL, /* 0x0A, Reserved */ - NULL, /* 0x0B, Reserved */ - NULL, /* 0x0C, Reserved */ - NULL, /* 0x0D, Reserved */ - AcpiRsGetVendorSmall, /* 0x0E, ACPI_RESOURCE_NAME_VENDOR_SMALL */ - AcpiRsConvertEndTag, /* 0x0F, ACPI_RESOURCE_NAME_END_TAG */ - - /* Large descriptors */ - - NULL, /* 0x00, Reserved */ - AcpiRsConvertMemory24, /* 0x01, ACPI_RESOURCE_NAME_MEMORY24 */ - AcpiRsConvertGenericReg, /* 0x02, ACPI_RESOURCE_NAME_GENERIC_REGISTER */ - NULL, /* 0x03, Reserved */ - AcpiRsGetVendorLarge, /* 0x04, ACPI_RESOURCE_NAME_VENDOR_LARGE */ - AcpiRsConvertMemory32, /* 0x05, ACPI_RESOURCE_NAME_MEMORY32 */ - AcpiRsConvertFixedMemory32, /* 0x06, ACPI_RESOURCE_NAME_FIXED_MEMORY32 */ - AcpiRsConvertAddress32, /* 0x07, ACPI_RESOURCE_NAME_ADDRESS32 */ - AcpiRsConvertAddress16, /* 0x08, ACPI_RESOURCE_NAME_ADDRESS16 */ - AcpiRsConvertExtIrq, /* 0x09, ACPI_RESOURCE_NAME_EXTENDED_IRQ */ - AcpiRsConvertAddress64, /* 0x0A, ACPI_RESOURCE_NAME_ADDRESS64 */ - AcpiRsConvertExtAddress64 /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 */ -}; - - -#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) - -/* Dispatch table for resource dump functions */ - -ACPI_RSDUMP_INFO *AcpiGbl_DumpResourceDispatch[] = -{ - AcpiRsDumpIrq, /* ACPI_RESOURCE_TYPE_IRQ */ - AcpiRsDumpDma, /* ACPI_RESOURCE_TYPE_DMA */ - AcpiRsDumpStartDpf, /* ACPI_RESOURCE_TYPE_START_DEPENDENT */ - AcpiRsDumpEndDpf, /* ACPI_RESOURCE_TYPE_END_DEPENDENT */ - AcpiRsDumpIo, /* ACPI_RESOURCE_TYPE_IO */ - AcpiRsDumpFixedIo, /* ACPI_RESOURCE_TYPE_FIXED_IO */ - AcpiRsDumpVendor, /* ACPI_RESOURCE_TYPE_VENDOR */ - AcpiRsDumpEndTag, /* ACPI_RESOURCE_TYPE_END_TAG */ - AcpiRsDumpMemory24, /* ACPI_RESOURCE_TYPE_MEMORY24 */ - AcpiRsDumpMemory32, /* ACPI_RESOURCE_TYPE_MEMORY32 */ - AcpiRsDumpFixedMemory32, /* ACPI_RESOURCE_TYPE_FIXED_MEMORY32 */ - AcpiRsDumpAddress16, /* ACPI_RESOURCE_TYPE_ADDRESS16 */ - AcpiRsDumpAddress32, /* ACPI_RESOURCE_TYPE_ADDRESS32 */ - AcpiRsDumpAddress64, /* ACPI_RESOURCE_TYPE_ADDRESS64 */ - AcpiRsDumpExtAddress64, /* ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */ - AcpiRsDumpExtIrq, /* ACPI_RESOURCE_TYPE_EXTENDED_IRQ */ - AcpiRsDumpGenericReg, /* ACPI_RESOURCE_TYPE_GENERIC_REGISTER */ -}; -#endif - - -/* - * Base sizes for external AML resource descriptors, indexed by internal type. - * Includes size of the descriptor header (1 byte for small descriptors, - * 3 bytes for large descriptors) - */ -const UINT8 AcpiGbl_AmlResourceSizes[] = -{ - sizeof (AML_RESOURCE_IRQ), /* ACPI_RESOURCE_TYPE_IRQ (optional Byte 3 always created) */ - sizeof (AML_RESOURCE_DMA), /* ACPI_RESOURCE_TYPE_DMA */ - sizeof (AML_RESOURCE_START_DEPENDENT), /* ACPI_RESOURCE_TYPE_START_DEPENDENT (optional Byte 1 always created) */ - sizeof (AML_RESOURCE_END_DEPENDENT), /* ACPI_RESOURCE_TYPE_END_DEPENDENT */ - sizeof (AML_RESOURCE_IO), /* ACPI_RESOURCE_TYPE_IO */ - sizeof (AML_RESOURCE_FIXED_IO), /* ACPI_RESOURCE_TYPE_FIXED_IO */ - sizeof (AML_RESOURCE_VENDOR_SMALL), /* ACPI_RESOURCE_TYPE_VENDOR */ - sizeof (AML_RESOURCE_END_TAG), /* ACPI_RESOURCE_TYPE_END_TAG */ - sizeof (AML_RESOURCE_MEMORY24), /* ACPI_RESOURCE_TYPE_MEMORY24 */ - sizeof (AML_RESOURCE_MEMORY32), /* ACPI_RESOURCE_TYPE_MEMORY32 */ - sizeof (AML_RESOURCE_FIXED_MEMORY32), /* ACPI_RESOURCE_TYPE_FIXED_MEMORY32 */ - sizeof (AML_RESOURCE_ADDRESS16), /* ACPI_RESOURCE_TYPE_ADDRESS16 */ - sizeof (AML_RESOURCE_ADDRESS32), /* ACPI_RESOURCE_TYPE_ADDRESS32 */ - sizeof (AML_RESOURCE_ADDRESS64), /* ACPI_RESOURCE_TYPE_ADDRESS64 */ - sizeof (AML_RESOURCE_EXTENDED_ADDRESS64),/*ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */ - sizeof (AML_RESOURCE_EXTENDED_IRQ), /* ACPI_RESOURCE_TYPE_EXTENDED_IRQ */ - sizeof (AML_RESOURCE_GENERIC_REGISTER) /* ACPI_RESOURCE_TYPE_GENERIC_REGISTER */ -}; - - -const UINT8 AcpiGbl_ResourceStructSizes[] = -{ - /* Small descriptors */ - - 0, - 0, - 0, - 0, - ACPI_RS_SIZE (ACPI_RESOURCE_IRQ), - ACPI_RS_SIZE (ACPI_RESOURCE_DMA), - ACPI_RS_SIZE (ACPI_RESOURCE_START_DEPENDENT), - ACPI_RS_SIZE_MIN, - ACPI_RS_SIZE (ACPI_RESOURCE_IO), - ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_IO), - 0, - 0, - 0, - 0, - ACPI_RS_SIZE (ACPI_RESOURCE_VENDOR), - ACPI_RS_SIZE_MIN, - - /* Large descriptors */ - - 0, - ACPI_RS_SIZE (ACPI_RESOURCE_MEMORY24), - ACPI_RS_SIZE (ACPI_RESOURCE_GENERIC_REGISTER), - 0, - ACPI_RS_SIZE (ACPI_RESOURCE_VENDOR), - ACPI_RS_SIZE (ACPI_RESOURCE_MEMORY32), - ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_MEMORY32), - ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS32), - ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS16), - ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_IRQ), - ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS64), - ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_ADDRESS64) -}; - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsio.c b/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsio.c deleted file mode 100644 index fb9213dd7..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsio.c +++ /dev/null @@ -1,376 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsio - IO and DMA resource descriptors - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __RSIO_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acresrc.h" - -#define _COMPONENT ACPI_RESOURCES - ACPI_MODULE_NAME ("rsio") - - -/******************************************************************************* - * - * AcpiRsConvertIo - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsConvertIo[5] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_IO, - ACPI_RS_SIZE (ACPI_RESOURCE_IO), - ACPI_RSC_TABLE_SIZE (AcpiRsConvertIo)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_IO, - sizeof (AML_RESOURCE_IO), - 0}, - - /* Decode flag */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Io.IoDecode), - AML_OFFSET (Io.Flags), - 0}, - /* - * These fields are contiguous in both the source and destination: - * Address Alignment - * Length - * Minimum Base Address - * Maximum Base Address - */ - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Io.Alignment), - AML_OFFSET (Io.Alignment), - 2}, - - {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.Io.Minimum), - AML_OFFSET (Io.Minimum), - 2} -}; - - -/******************************************************************************* - * - * AcpiRsConvertFixedIo - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsConvertFixedIo[4] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_IO, - ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_IO), - ACPI_RSC_TABLE_SIZE (AcpiRsConvertFixedIo)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_IO, - sizeof (AML_RESOURCE_FIXED_IO), - 0}, - /* - * These fields are contiguous in both the source and destination: - * Base Address - * Length - */ - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.FixedIo.AddressLength), - AML_OFFSET (FixedIo.AddressLength), - 1}, - - {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.FixedIo.Address), - AML_OFFSET (FixedIo.Address), - 1} -}; - - -/******************************************************************************* - * - * AcpiRsConvertGenericReg - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsConvertGenericReg[4] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_GENERIC_REGISTER, - ACPI_RS_SIZE (ACPI_RESOURCE_GENERIC_REGISTER), - ACPI_RSC_TABLE_SIZE (AcpiRsConvertGenericReg)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_GENERIC_REGISTER, - sizeof (AML_RESOURCE_GENERIC_REGISTER), - 0}, - /* - * These fields are contiguous in both the source and destination: - * Address Space ID - * Register Bit Width - * Register Bit Offset - * Access Size - */ - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.GenericReg.SpaceId), - AML_OFFSET (GenericReg.AddressSpaceId), - 4}, - - /* Get the Register Address */ - - {ACPI_RSC_MOVE64, ACPI_RS_OFFSET (Data.GenericReg.Address), - AML_OFFSET (GenericReg.Address), - 1} -}; - - -/******************************************************************************* - * - * AcpiRsConvertEndDpf - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsConvertEndDpf[2] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_END_DEPENDENT, - ACPI_RS_SIZE_MIN, - ACPI_RSC_TABLE_SIZE (AcpiRsConvertEndDpf)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_END_DEPENDENT, - sizeof (AML_RESOURCE_END_DEPENDENT), - 0} -}; - - -/******************************************************************************* - * - * AcpiRsConvertEndTag - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsConvertEndTag[2] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_END_TAG, - ACPI_RS_SIZE_MIN, - ACPI_RSC_TABLE_SIZE (AcpiRsConvertEndTag)}, - - /* - * Note: The checksum field is set to zero, meaning that the resource - * data is treated as if the checksum operation succeeded. - * (ACPI Spec 1.0b Section 6.4.2.8) - */ - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_END_TAG, - sizeof (AML_RESOURCE_END_TAG), - 0} -}; - - -/******************************************************************************* - * - * AcpiRsGetStartDpf - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsGetStartDpf[6] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_START_DEPENDENT, - ACPI_RS_SIZE (ACPI_RESOURCE_START_DEPENDENT), - ACPI_RSC_TABLE_SIZE (AcpiRsGetStartDpf)}, - - /* Defaults for Compatibility and Performance priorities */ - - {ACPI_RSC_SET8, ACPI_RS_OFFSET (Data.StartDpf.CompatibilityPriority), - ACPI_ACCEPTABLE_CONFIGURATION, - 2}, - - /* Get the descriptor length (0 or 1 for Start Dpf descriptor) */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.StartDpf.DescriptorLength), - AML_OFFSET (StartDpf.DescriptorType), - 0}, - - /* All done if there is no flag byte present in the descriptor */ - - {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_AML_LENGTH, 0, 1}, - - /* Flag byte is present, get the flags */ - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.StartDpf.CompatibilityPriority), - AML_OFFSET (StartDpf.Flags), - 0}, - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.StartDpf.PerformanceRobustness), - AML_OFFSET (StartDpf.Flags), - 2} -}; - - -/******************************************************************************* - * - * AcpiRsSetStartDpf - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsSetStartDpf[10] = -{ - /* Start with a default descriptor of length 1 */ - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_START_DEPENDENT, - sizeof (AML_RESOURCE_START_DEPENDENT), - ACPI_RSC_TABLE_SIZE (AcpiRsSetStartDpf)}, - - /* Set the default flag values */ - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.StartDpf.CompatibilityPriority), - AML_OFFSET (StartDpf.Flags), - 0}, - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.StartDpf.PerformanceRobustness), - AML_OFFSET (StartDpf.Flags), - 2}, - /* - * All done if the output descriptor length is required to be 1 - * (i.e., optimization to 0 bytes cannot be attempted) - */ - {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET(Data.StartDpf.DescriptorLength), - 1}, - - /* Set length to 0 bytes (no flags byte) */ - - {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_START_DEPENDENT_NOPRIO)}, - - /* - * All done if the output descriptor length is required to be 0. - * - * TBD: Perhaps we should check for error if input flags are not - * compatible with a 0-byte descriptor. - */ - {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET(Data.StartDpf.DescriptorLength), - 0}, - - /* Reset length to 1 byte (descriptor with flags byte) */ - - {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_START_DEPENDENT)}, - - - /* - * All done if flags byte is necessary -- if either priority value - * is not ACPI_ACCEPTABLE_CONFIGURATION - */ - {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET (Data.StartDpf.CompatibilityPriority), - ACPI_ACCEPTABLE_CONFIGURATION}, - - {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET (Data.StartDpf.PerformanceRobustness), - ACPI_ACCEPTABLE_CONFIGURATION}, - - /* Flag byte is not necessary */ - - {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_START_DEPENDENT_NOPRIO)} -}; - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsirq.c b/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsirq.c deleted file mode 100644 index 7eab43513..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsirq.c +++ /dev/null @@ -1,348 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsirq - IRQ resource descriptors - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __RSIRQ_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acresrc.h" - -#define _COMPONENT ACPI_RESOURCES - ACPI_MODULE_NAME ("rsirq") - - -/******************************************************************************* - * - * AcpiRsGetIrq - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsGetIrq[8] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_IRQ, - ACPI_RS_SIZE (ACPI_RESOURCE_IRQ), - ACPI_RSC_TABLE_SIZE (AcpiRsGetIrq)}, - - /* Get the IRQ mask (bytes 1:2) */ - - {ACPI_RSC_BITMASK16,ACPI_RS_OFFSET (Data.Irq.Interrupts[0]), - AML_OFFSET (Irq.IrqMask), - ACPI_RS_OFFSET (Data.Irq.InterruptCount)}, - - /* Set default flags (others are zero) */ - - {ACPI_RSC_SET8, ACPI_RS_OFFSET (Data.Irq.Triggering), - ACPI_EDGE_SENSITIVE, - 1}, - - /* Get the descriptor length (2 or 3 for IRQ descriptor) */ - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Irq.DescriptorLength), - AML_OFFSET (Irq.DescriptorType), - 0}, - - /* All done if no flag byte present in descriptor */ - - {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_AML_LENGTH, 0, 3}, - - /* Get flags: Triggering[0], Polarity[3], Sharing[4] */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Triggering), - AML_OFFSET (Irq.Flags), - 0}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Polarity), - AML_OFFSET (Irq.Flags), - 3}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Sharable), - AML_OFFSET (Irq.Flags), - 4} -}; - - -/******************************************************************************* - * - * AcpiRsSetIrq - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsSetIrq[13] = -{ - /* Start with a default descriptor of length 3 */ - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_IRQ, - sizeof (AML_RESOURCE_IRQ), - ACPI_RSC_TABLE_SIZE (AcpiRsSetIrq)}, - - /* Convert interrupt list to 16-bit IRQ bitmask */ - - {ACPI_RSC_BITMASK16,ACPI_RS_OFFSET (Data.Irq.Interrupts[0]), - AML_OFFSET (Irq.IrqMask), - ACPI_RS_OFFSET (Data.Irq.InterruptCount)}, - - /* Set the flags byte */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Triggering), - AML_OFFSET (Irq.Flags), - 0}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Polarity), - AML_OFFSET (Irq.Flags), - 3}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Sharable), - AML_OFFSET (Irq.Flags), - 4}, - - /* - * All done if the output descriptor length is required to be 3 - * (i.e., optimization to 2 bytes cannot be attempted) - */ - {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET(Data.Irq.DescriptorLength), - 3}, - - /* Set length to 2 bytes (no flags byte) */ - - {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_IRQ_NOFLAGS)}, - - /* - * All done if the output descriptor length is required to be 2. - * - * TBD: Perhaps we should check for error if input flags are not - * compatible with a 2-byte descriptor. - */ - {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET(Data.Irq.DescriptorLength), - 2}, - - /* Reset length to 3 bytes (descriptor with flags byte) */ - - {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_IRQ)}, - - /* - * Check if the flags byte is necessary. Not needed if the flags are: - * ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_HIGH, ACPI_EXCLUSIVE - */ - {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET (Data.Irq.Triggering), - ACPI_EDGE_SENSITIVE}, - - {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET (Data.Irq.Polarity), - ACPI_ACTIVE_HIGH}, - - {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET (Data.Irq.Sharable), - ACPI_EXCLUSIVE}, - - /* We can optimize to a 2-byte IrqNoFlags() descriptor */ - - {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_IRQ_NOFLAGS)} -}; - - -/******************************************************************************* - * - * AcpiRsConvertExtIrq - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsConvertExtIrq[9] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_EXTENDED_IRQ, - ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_IRQ), - ACPI_RSC_TABLE_SIZE (AcpiRsConvertExtIrq)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_EXTENDED_IRQ, - sizeof (AML_RESOURCE_EXTENDED_IRQ), - 0}, - - /* Flag bits */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.ProducerConsumer), - AML_OFFSET (ExtendedIrq.Flags), - 0}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.Triggering), - AML_OFFSET (ExtendedIrq.Flags), - 1}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.Polarity), - AML_OFFSET (ExtendedIrq.Flags), - 2}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.Sharable), - AML_OFFSET (ExtendedIrq.Flags), - 3}, - - /* IRQ Table length (Byte4) */ - - {ACPI_RSC_COUNT, ACPI_RS_OFFSET (Data.ExtendedIrq.InterruptCount), - AML_OFFSET (ExtendedIrq.InterruptCount), - sizeof (UINT32)}, - - /* Copy every IRQ in the table, each is 32 bits */ - - {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.ExtendedIrq.Interrupts[0]), - AML_OFFSET (ExtendedIrq.Interrupts[0]), - 0}, - - /* Optional ResourceSource (Index and String) */ - - {ACPI_RSC_SOURCEX, ACPI_RS_OFFSET (Data.ExtendedIrq.ResourceSource), - ACPI_RS_OFFSET (Data.ExtendedIrq.Interrupts[0]), - sizeof (AML_RESOURCE_EXTENDED_IRQ)} -}; - - -/******************************************************************************* - * - * AcpiRsConvertDma - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsConvertDma[6] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_DMA, - ACPI_RS_SIZE (ACPI_RESOURCE_DMA), - ACPI_RSC_TABLE_SIZE (AcpiRsConvertDma)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_DMA, - sizeof (AML_RESOURCE_DMA), - 0}, - - /* Flags: transfer preference, bus mastering, channel speed */ - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Dma.Transfer), - AML_OFFSET (Dma.Flags), - 0}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Dma.BusMaster), - AML_OFFSET (Dma.Flags), - 2}, - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Dma.Type), - AML_OFFSET (Dma.Flags), - 5}, - - /* DMA channel mask bits */ - - {ACPI_RSC_BITMASK, ACPI_RS_OFFSET (Data.Dma.Channels[0]), - AML_OFFSET (Dma.DmaChannelMask), - ACPI_RS_OFFSET (Data.Dma.ChannelCount)} -}; - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rslist.c b/l4/pkg/acpica/lib-acpi/src/acpica/resources/rslist.c deleted file mode 100644 index 3adce2b39..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rslist.c +++ /dev/null @@ -1,286 +0,0 @@ -/******************************************************************************* - * - * Module Name: rslist - Linked list utilities - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __RSLIST_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acresrc.h" - -#define _COMPONENT ACPI_RESOURCES - ACPI_MODULE_NAME ("rslist") - - -/******************************************************************************* - * - * FUNCTION: AcpiRsConvertAmlToResources - * - * PARAMETERS: ACPI_WALK_AML_CALLBACK - * ResourcePtr - Pointer to the buffer that will - * contain the output structures - * - * RETURN: Status - * - * DESCRIPTION: Convert an AML resource to an internal representation of the - * resource that is aligned and easier to access. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRsConvertAmlToResources ( - UINT8 *Aml, - UINT32 Length, - UINT32 Offset, - UINT8 ResourceIndex, - void *Context) -{ - ACPI_RESOURCE **ResourcePtr = ACPI_CAST_INDIRECT_PTR ( - ACPI_RESOURCE, Context); - ACPI_RESOURCE *Resource; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (RsConvertAmlToResources); - - - /* - * Check that the input buffer and all subsequent pointers into it - * are aligned on a native word boundary. Most important on IA64 - */ - Resource = *ResourcePtr; - if (ACPI_IS_MISALIGNED (Resource)) - { - ACPI_WARNING ((AE_INFO, - "Misaligned resource pointer %p", Resource)); - } - - /* Convert the AML byte stream resource to a local resource struct */ - - Status = AcpiRsConvertAmlToResource ( - Resource, ACPI_CAST_PTR (AML_RESOURCE, Aml), - AcpiGbl_GetResourceDispatch[ResourceIndex]); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not convert AML resource (Type %X)", *Aml)); - return_ACPI_STATUS (Status); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_RESOURCES, - "Type %.2X, AmlLength %.2X InternalLength %.2X\n", - AcpiUtGetResourceType (Aml), Length, - Resource->Length)); - - /* Point to the next structure in the output buffer */ - - *ResourcePtr = ACPI_ADD_PTR (void, Resource, Resource->Length); - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsConvertResourcesToAml - * - * PARAMETERS: Resource - Pointer to the resource linked list - * AmlSizeNeeded - Calculated size of the byte stream - * needed from calling AcpiRsGetAmlLength() - * The size of the OutputBuffer is - * guaranteed to be >= AmlSizeNeeded - * OutputBuffer - Pointer to the buffer that will - * contain the byte stream - * - * RETURN: Status - * - * DESCRIPTION: Takes the resource linked list and parses it, creating a - * byte stream of resources in the caller's output buffer - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRsConvertResourcesToAml ( - ACPI_RESOURCE *Resource, - ACPI_SIZE AmlSizeNeeded, - UINT8 *OutputBuffer) -{ - UINT8 *Aml = OutputBuffer; - UINT8 *EndAml = OutputBuffer + AmlSizeNeeded; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (RsConvertResourcesToAml); - - - /* Walk the resource descriptor list, convert each descriptor */ - - while (Aml < EndAml) - { - /* Validate the (internal) Resource Type */ - - if (Resource->Type > ACPI_RESOURCE_TYPE_MAX) - { - ACPI_ERROR ((AE_INFO, - "Invalid descriptor type (%X) in resource list", - Resource->Type)); - return_ACPI_STATUS (AE_BAD_DATA); - } - - /* Perform the conversion */ - - Status = AcpiRsConvertResourceToAml (Resource, - ACPI_CAST_PTR (AML_RESOURCE, Aml), - AcpiGbl_SetResourceDispatch[Resource->Type]); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not convert resource (type %X) to AML", - Resource->Type)); - return_ACPI_STATUS (Status); - } - - /* Perform final sanity check on the new AML resource descriptor */ - - Status = AcpiUtValidateResource ( - ACPI_CAST_PTR (AML_RESOURCE, Aml), NULL); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Check for end-of-list, normal exit */ - - if (Resource->Type == ACPI_RESOURCE_TYPE_END_TAG) - { - /* An End Tag indicates the end of the input Resource Template */ - - return_ACPI_STATUS (AE_OK); - } - - /* - * Extract the total length of the new descriptor and set the - * Aml to point to the next (output) resource descriptor - */ - Aml += AcpiUtGetDescriptorLength (Aml); - - /* Point to the next input resource descriptor */ - - Resource = ACPI_ADD_PTR (ACPI_RESOURCE, Resource, Resource->Length); - } - - /* Completed buffer, but did not find an EndTag resource descriptor */ - - return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsmemory.c b/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsmemory.c deleted file mode 100644 index a3d08c01a..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsmemory.c +++ /dev/null @@ -1,323 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsmem24 - Memory resource descriptors - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __RSMEMORY_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acresrc.h" - -#define _COMPONENT ACPI_RESOURCES - ACPI_MODULE_NAME ("rsmemory") - - -/******************************************************************************* - * - * AcpiRsConvertMemory24 - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsConvertMemory24[4] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY24, - ACPI_RS_SIZE (ACPI_RESOURCE_MEMORY24), - ACPI_RSC_TABLE_SIZE (AcpiRsConvertMemory24)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY24, - sizeof (AML_RESOURCE_MEMORY24), - 0}, - - /* Read/Write bit */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Memory24.WriteProtect), - AML_OFFSET (Memory24.Flags), - 0}, - /* - * These fields are contiguous in both the source and destination: - * Minimum Base Address - * Maximum Base Address - * Address Base Alignment - * Range Length - */ - {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.Memory24.Minimum), - AML_OFFSET (Memory24.Minimum), - 4} -}; - - -/******************************************************************************* - * - * AcpiRsConvertMemory32 - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsConvertMemory32[4] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY32, - ACPI_RS_SIZE (ACPI_RESOURCE_MEMORY32), - ACPI_RSC_TABLE_SIZE (AcpiRsConvertMemory32)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY32, - sizeof (AML_RESOURCE_MEMORY32), - 0}, - - /* Read/Write bit */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Memory32.WriteProtect), - AML_OFFSET (Memory32.Flags), - 0}, - /* - * These fields are contiguous in both the source and destination: - * Minimum Base Address - * Maximum Base Address - * Address Base Alignment - * Range Length - */ - {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.Memory32.Minimum), - AML_OFFSET (Memory32.Minimum), - 4} -}; - - -/******************************************************************************* - * - * AcpiRsConvertFixedMemory32 - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsConvertFixedMemory32[4] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_MEMORY32, - ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_MEMORY32), - ACPI_RSC_TABLE_SIZE (AcpiRsConvertFixedMemory32)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_MEMORY32, - sizeof (AML_RESOURCE_FIXED_MEMORY32), - 0}, - - /* Read/Write bit */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.FixedMemory32.WriteProtect), - AML_OFFSET (FixedMemory32.Flags), - 0}, - /* - * These fields are contiguous in both the source and destination: - * Base Address - * Range Length - */ - {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.FixedMemory32.Address), - AML_OFFSET (FixedMemory32.Address), - 2} -}; - - -/******************************************************************************* - * - * AcpiRsGetVendorSmall - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsGetVendorSmall[3] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR, - ACPI_RS_SIZE (ACPI_RESOURCE_VENDOR), - ACPI_RSC_TABLE_SIZE (AcpiRsGetVendorSmall)}, - - /* Length of the vendor data (byte count) */ - - {ACPI_RSC_COUNT16, ACPI_RS_OFFSET (Data.Vendor.ByteLength), - 0, - sizeof (UINT8)}, - - /* Vendor data */ - - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Vendor.ByteData[0]), - sizeof (AML_RESOURCE_SMALL_HEADER), - 0} -}; - - -/******************************************************************************* - * - * AcpiRsGetVendorLarge - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsGetVendorLarge[3] = -{ - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR, - ACPI_RS_SIZE (ACPI_RESOURCE_VENDOR), - ACPI_RSC_TABLE_SIZE (AcpiRsGetVendorLarge)}, - - /* Length of the vendor data (byte count) */ - - {ACPI_RSC_COUNT16, ACPI_RS_OFFSET (Data.Vendor.ByteLength), - 0, - sizeof (UINT8)}, - - /* Vendor data */ - - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Vendor.ByteData[0]), - sizeof (AML_RESOURCE_LARGE_HEADER), - 0} -}; - - -/******************************************************************************* - * - * AcpiRsSetVendor - * - ******************************************************************************/ - -ACPI_RSCONVERT_INFO AcpiRsSetVendor[7] = -{ - /* Default is a small vendor descriptor */ - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_SMALL, - sizeof (AML_RESOURCE_SMALL_HEADER), - ACPI_RSC_TABLE_SIZE (AcpiRsSetVendor)}, - - /* Get the length and copy the data */ - - {ACPI_RSC_COUNT16, ACPI_RS_OFFSET (Data.Vendor.ByteLength), - 0, - 0}, - - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Vendor.ByteData[0]), - sizeof (AML_RESOURCE_SMALL_HEADER), - 0}, - - /* - * All done if the Vendor byte length is 7 or less, meaning that it will - * fit within a small descriptor - */ - {ACPI_RSC_EXIT_LE, 0, 0, 7}, - - /* Must create a large vendor descriptor */ - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_LARGE, - sizeof (AML_RESOURCE_LARGE_HEADER), - 0}, - - {ACPI_RSC_COUNT16, ACPI_RS_OFFSET (Data.Vendor.ByteLength), - 0, - 0}, - - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.Vendor.ByteData[0]), - sizeof (AML_RESOURCE_LARGE_HEADER), - 0} -}; - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsmisc.c b/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsmisc.c deleted file mode 100644 index 3565334e7..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsmisc.c +++ /dev/null @@ -1,683 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsmisc - Miscellaneous resource descriptors - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __RSMISC_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acresrc.h" - -#define _COMPONENT ACPI_RESOURCES - ACPI_MODULE_NAME ("rsmisc") - - -#define INIT_RESOURCE_TYPE(i) i->ResourceOffset -#define INIT_RESOURCE_LENGTH(i) i->AmlOffset -#define INIT_TABLE_LENGTH(i) i->Value - -#define COMPARE_OPCODE(i) i->ResourceOffset -#define COMPARE_TARGET(i) i->AmlOffset -#define COMPARE_VALUE(i) i->Value - - -/******************************************************************************* - * - * FUNCTION: AcpiRsConvertAmlToResource - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Aml - Where the AML descriptor is returned - * Info - Pointer to appropriate conversion table - * - * RETURN: Status - * - * DESCRIPTION: Convert an external AML resource descriptor to the corresponding - * internal resource descriptor - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRsConvertAmlToResource ( - ACPI_RESOURCE *Resource, - AML_RESOURCE *Aml, - ACPI_RSCONVERT_INFO *Info) -{ - ACPI_RS_LENGTH AmlResourceLength; - void *Source; - void *Destination; - char *Target; - UINT8 Count; - UINT8 FlagsMode = FALSE; - UINT16 ItemCount = 0; - UINT16 Temp16 = 0; - - - ACPI_FUNCTION_TRACE (RsConvertAmlToResource); - - - if (((ACPI_SIZE) Resource) & 0x3) - { - /* Each internal resource struct is expected to be 32-bit aligned */ - - ACPI_WARNING ((AE_INFO, - "Misaligned resource pointer (get): %p Type %2.2X Len %X", - Resource, Resource->Type, Resource->Length)); - } - - /* Extract the resource Length field (does not include header length) */ - - AmlResourceLength = AcpiUtGetResourceLength (Aml); - - /* - * First table entry must be ACPI_RSC_INITxxx and must contain the - * table length (# of table entries) - */ - Count = INIT_TABLE_LENGTH (Info); - - while (Count) - { - /* - * Source is the external AML byte stream buffer, - * destination is the internal resource descriptor - */ - Source = ACPI_ADD_PTR (void, Aml, Info->AmlOffset); - Destination = ACPI_ADD_PTR (void, Resource, Info->ResourceOffset); - - switch (Info->Opcode) - { - case ACPI_RSC_INITGET: - /* - * Get the resource type and the initial (minimum) length - */ - ACPI_MEMSET (Resource, 0, INIT_RESOURCE_LENGTH (Info)); - Resource->Type = INIT_RESOURCE_TYPE (Info); - Resource->Length = INIT_RESOURCE_LENGTH (Info); - break; - - - case ACPI_RSC_INITSET: - break; - - - case ACPI_RSC_FLAGINIT: - - FlagsMode = TRUE; - break; - - - case ACPI_RSC_1BITFLAG: - /* - * Mask and shift the flag bit - */ - ACPI_SET8 (Destination) = (UINT8) - ((ACPI_GET8 (Source) >> Info->Value) & 0x01); - break; - - - case ACPI_RSC_2BITFLAG: - /* - * Mask and shift the flag bits - */ - ACPI_SET8 (Destination) = (UINT8) - ((ACPI_GET8 (Source) >> Info->Value) & 0x03); - break; - - - case ACPI_RSC_COUNT: - - ItemCount = ACPI_GET8 (Source); - ACPI_SET8 (Destination) = (UINT8) ItemCount; - - Resource->Length = Resource->Length + - (Info->Value * (ItemCount - 1)); - break; - - - case ACPI_RSC_COUNT16: - - ItemCount = AmlResourceLength; - ACPI_SET16 (Destination) = ItemCount; - - Resource->Length = Resource->Length + - (Info->Value * (ItemCount - 1)); - break; - - - case ACPI_RSC_LENGTH: - - Resource->Length = Resource->Length + Info->Value; - break; - - - case ACPI_RSC_MOVE8: - case ACPI_RSC_MOVE16: - case ACPI_RSC_MOVE32: - case ACPI_RSC_MOVE64: - /* - * Raw data move. Use the Info value field unless ItemCount has - * been previously initialized via a COUNT opcode - */ - if (Info->Value) - { - ItemCount = Info->Value; - } - AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode); - break; - - - case ACPI_RSC_SET8: - - ACPI_MEMSET (Destination, Info->AmlOffset, Info->Value); - break; - - - case ACPI_RSC_DATA8: - - Target = ACPI_ADD_PTR (char, Resource, Info->Value); - ACPI_MEMCPY (Destination, Source, ACPI_GET16 (Target)); - break; - - - case ACPI_RSC_ADDRESS: - /* - * Common handler for address descriptor flags - */ - if (!AcpiRsGetAddressCommon (Resource, Aml)) - { - return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE); - } - break; - - - case ACPI_RSC_SOURCE: - /* - * Optional ResourceSource (Index and String) - */ - Resource->Length += - AcpiRsGetResourceSource (AmlResourceLength, Info->Value, - Destination, Aml, NULL); - break; - - - case ACPI_RSC_SOURCEX: - /* - * Optional ResourceSource (Index and String). This is the more - * complicated case used by the Interrupt() macro - */ - Target = ACPI_ADD_PTR (char, Resource, Info->AmlOffset + (ItemCount * 4)); - - Resource->Length += - AcpiRsGetResourceSource (AmlResourceLength, - (ACPI_RS_LENGTH) (((ItemCount - 1) * sizeof (UINT32)) + Info->Value), - Destination, Aml, Target); - break; - - - case ACPI_RSC_BITMASK: - /* - * 8-bit encoded bitmask (DMA macro) - */ - ItemCount = AcpiRsDecodeBitmask (ACPI_GET8 (Source), Destination); - if (ItemCount) - { - Resource->Length += (ItemCount - 1); - } - - Target = ACPI_ADD_PTR (char, Resource, Info->Value); - ACPI_SET8 (Target) = (UINT8) ItemCount; - break; - - - case ACPI_RSC_BITMASK16: - /* - * 16-bit encoded bitmask (IRQ macro) - */ - ACPI_MOVE_16_TO_16 (&Temp16, Source); - - ItemCount = AcpiRsDecodeBitmask (Temp16, Destination); - if (ItemCount) - { - Resource->Length += (ItemCount - 1); - } - - Target = ACPI_ADD_PTR (char, Resource, Info->Value); - ACPI_SET8 (Target) = (UINT8) ItemCount; - break; - - - case ACPI_RSC_EXIT_NE: - /* - * Control - Exit conversion if not equal - */ - switch (Info->ResourceOffset) - { - case ACPI_RSC_COMPARE_AML_LENGTH: - if (AmlResourceLength != Info->Value) - { - goto Exit; - } - break; - - case ACPI_RSC_COMPARE_VALUE: - if (ACPI_GET8 (Source) != Info->Value) - { - goto Exit; - } - break; - - default: - - ACPI_ERROR ((AE_INFO, "Invalid conversion sub-opcode")); - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Invalid conversion opcode")); - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Count--; - Info++; - } - -Exit: - if (!FlagsMode) - { - /* Round the resource struct length up to the next boundary (32 or 64) */ - - Resource->Length = (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (Resource->Length); - } - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsConvertResourceToAml - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Aml - Where the AML descriptor is returned - * Info - Pointer to appropriate conversion table - * - * RETURN: Status - * - * DESCRIPTION: Convert an internal resource descriptor to the corresponding - * external AML resource descriptor. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRsConvertResourceToAml ( - ACPI_RESOURCE *Resource, - AML_RESOURCE *Aml, - ACPI_RSCONVERT_INFO *Info) -{ - void *Source = NULL; - void *Destination; - ACPI_RSDESC_SIZE AmlLength = 0; - UINT8 Count; - UINT16 Temp16 = 0; - UINT16 ItemCount = 0; - - - ACPI_FUNCTION_TRACE (RsConvertResourceToAml); - - - /* - * First table entry must be ACPI_RSC_INITxxx and must contain the - * table length (# of table entries) - */ - Count = INIT_TABLE_LENGTH (Info); - - while (Count) - { - /* - * Source is the internal resource descriptor, - * destination is the external AML byte stream buffer - */ - Source = ACPI_ADD_PTR (void, Resource, Info->ResourceOffset); - Destination = ACPI_ADD_PTR (void, Aml, Info->AmlOffset); - - switch (Info->Opcode) - { - case ACPI_RSC_INITSET: - - ACPI_MEMSET (Aml, 0, INIT_RESOURCE_LENGTH (Info)); - AmlLength = INIT_RESOURCE_LENGTH (Info); - AcpiRsSetResourceHeader (INIT_RESOURCE_TYPE (Info), AmlLength, Aml); - break; - - - case ACPI_RSC_INITGET: - break; - - - case ACPI_RSC_FLAGINIT: - /* - * Clear the flag byte - */ - ACPI_SET8 (Destination) = 0; - break; - - - case ACPI_RSC_1BITFLAG: - /* - * Mask and shift the flag bit - */ - ACPI_SET8 (Destination) |= (UINT8) - ((ACPI_GET8 (Source) & 0x01) << Info->Value); - break; - - - case ACPI_RSC_2BITFLAG: - /* - * Mask and shift the flag bits - */ - ACPI_SET8 (Destination) |= (UINT8) - ((ACPI_GET8 (Source) & 0x03) << Info->Value); - break; - - - case ACPI_RSC_COUNT: - - ItemCount = ACPI_GET8 (Source); - ACPI_SET8 (Destination) = (UINT8) ItemCount; - - AmlLength = (UINT16) (AmlLength + (Info->Value * (ItemCount - 1))); - break; - - - case ACPI_RSC_COUNT16: - - ItemCount = ACPI_GET16 (Source); - AmlLength = (UINT16) (AmlLength + ItemCount); - AcpiRsSetResourceLength (AmlLength, Aml); - break; - - - case ACPI_RSC_LENGTH: - - AcpiRsSetResourceLength (Info->Value, Aml); - break; - - - case ACPI_RSC_MOVE8: - case ACPI_RSC_MOVE16: - case ACPI_RSC_MOVE32: - case ACPI_RSC_MOVE64: - - if (Info->Value) - { - ItemCount = Info->Value; - } - AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode); - break; - - - case ACPI_RSC_ADDRESS: - - /* Set the Resource Type, General Flags, and Type-Specific Flags */ - - AcpiRsSetAddressCommon (Aml, Resource); - break; - - - case ACPI_RSC_SOURCEX: - /* - * Optional ResourceSource (Index and String) - */ - AmlLength = AcpiRsSetResourceSource ( - Aml, (ACPI_RS_LENGTH) AmlLength, Source); - AcpiRsSetResourceLength (AmlLength, Aml); - break; - - - case ACPI_RSC_SOURCE: - /* - * Optional ResourceSource (Index and String). This is the more - * complicated case used by the Interrupt() macro - */ - AmlLength = AcpiRsSetResourceSource (Aml, Info->Value, Source); - AcpiRsSetResourceLength (AmlLength, Aml); - break; - - - case ACPI_RSC_BITMASK: - /* - * 8-bit encoded bitmask (DMA macro) - */ - ACPI_SET8 (Destination) = (UINT8) - AcpiRsEncodeBitmask (Source, - *ACPI_ADD_PTR (UINT8, Resource, Info->Value)); - break; - - - case ACPI_RSC_BITMASK16: - /* - * 16-bit encoded bitmask (IRQ macro) - */ - Temp16 = AcpiRsEncodeBitmask (Source, - *ACPI_ADD_PTR (UINT8, Resource, Info->Value)); - ACPI_MOVE_16_TO_16 (Destination, &Temp16); - break; - - - case ACPI_RSC_EXIT_LE: - /* - * Control - Exit conversion if less than or equal - */ - if (ItemCount <= Info->Value) - { - goto Exit; - } - break; - - - case ACPI_RSC_EXIT_NE: - /* - * Control - Exit conversion if not equal - */ - switch (COMPARE_OPCODE (Info)) - { - case ACPI_RSC_COMPARE_VALUE: - - if (*ACPI_ADD_PTR (UINT8, Resource, - COMPARE_TARGET (Info)) != COMPARE_VALUE (Info)) - { - goto Exit; - } - break; - - default: - - ACPI_ERROR ((AE_INFO, "Invalid conversion sub-opcode")); - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - break; - - - case ACPI_RSC_EXIT_EQ: - /* - * Control - Exit conversion if equal - */ - if (*ACPI_ADD_PTR (UINT8, Resource, - COMPARE_TARGET (Info)) == COMPARE_VALUE (Info)) - { - goto Exit; - } - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Invalid conversion opcode")); - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Count--; - Info++; - } - -Exit: - return_ACPI_STATUS (AE_OK); -} - - -#if 0 -/* Previous resource validations */ - - if (Aml->ExtAddress64.RevisionID != AML_RESOURCE_EXTENDED_ADDRESS_REVISION) - { - return_ACPI_STATUS (AE_SUPPORT); - } - - if (Resource->Data.StartDpf.PerformanceRobustness >= 3) - { - return_ACPI_STATUS (AE_AML_BAD_RESOURCE_VALUE); - } - - if (((Aml->Irq.Flags & 0x09) == 0x00) || - ((Aml->Irq.Flags & 0x09) == 0x09)) - { - /* - * Only [ActiveHigh, EdgeSensitive] or [ActiveLow, LevelSensitive] - * polarity/trigger interrupts are allowed (ACPI spec, section - * "IRQ Format"), so 0x00 and 0x09 are illegal. - */ - ACPI_ERROR ((AE_INFO, - "Invalid interrupt polarity/trigger in resource list, %X", - Aml->Irq.Flags)); - return_ACPI_STATUS (AE_BAD_DATA); - } - - Resource->Data.ExtendedIrq.InterruptCount = Temp8; - if (Temp8 < 1) - { - /* Must have at least one IRQ */ - - return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH); - } - - if (Resource->Data.Dma.Transfer == 0x03) - { - ACPI_ERROR ((AE_INFO, - "Invalid DMA.Transfer preference (3)")); - return_ACPI_STATUS (AE_BAD_DATA); - } -#endif - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsutils.c b/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsutils.c deleted file mode 100644 index 4e0f04ce8..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsutils.c +++ /dev/null @@ -1,874 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsutils - Utilities for the resource manager - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __RSUTILS_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "acresrc.h" - - -#define _COMPONENT ACPI_RESOURCES - ACPI_MODULE_NAME ("rsutils") - - -/******************************************************************************* - * - * FUNCTION: AcpiRsDecodeBitmask - * - * PARAMETERS: Mask - Bitmask to decode - * List - Where the converted list is returned - * - * RETURN: Count of bits set (length of list) - * - * DESCRIPTION: Convert a bit mask into a list of values - * - ******************************************************************************/ - -UINT8 -AcpiRsDecodeBitmask ( - UINT16 Mask, - UINT8 *List) -{ - UINT8 i; - UINT8 BitCount; - - - ACPI_FUNCTION_ENTRY (); - - - /* Decode the mask bits */ - - for (i = 0, BitCount = 0; Mask; i++) - { - if (Mask & 0x0001) - { - List[BitCount] = i; - BitCount++; - } - - Mask >>= 1; - } - - return (BitCount); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsEncodeBitmask - * - * PARAMETERS: List - List of values to encode - * Count - Length of list - * - * RETURN: Encoded bitmask - * - * DESCRIPTION: Convert a list of values to an encoded bitmask - * - ******************************************************************************/ - -UINT16 -AcpiRsEncodeBitmask ( - UINT8 *List, - UINT8 Count) -{ - UINT32 i; - UINT16 Mask; - - - ACPI_FUNCTION_ENTRY (); - - - /* Encode the list into a single bitmask */ - - for (i = 0, Mask = 0; i < Count; i++) - { - Mask |= (0x1 << List[i]); - } - - return (Mask); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsMoveData - * - * PARAMETERS: Destination - Pointer to the destination descriptor - * Source - Pointer to the source descriptor - * ItemCount - How many items to move - * MoveType - Byte width - * - * RETURN: None - * - * DESCRIPTION: Move multiple data items from one descriptor to another. Handles - * alignment issues and endian issues if necessary, as configured - * via the ACPI_MOVE_* macros. (This is why a memcpy is not used) - * - ******************************************************************************/ - -void -AcpiRsMoveData ( - void *Destination, - void *Source, - UINT16 ItemCount, - UINT8 MoveType) -{ - UINT32 i; - - - ACPI_FUNCTION_ENTRY (); - - - /* One move per item */ - - for (i = 0; i < ItemCount; i++) - { - switch (MoveType) - { - /* - * For the 8-bit case, we can perform the move all at once - * since there are no alignment or endian issues - */ - case ACPI_RSC_MOVE8: - ACPI_MEMCPY (Destination, Source, ItemCount); - return; - - /* - * 16-, 32-, and 64-bit cases must use the move macros that perform - * endian conversion and/or accomodate hardware that cannot perform - * misaligned memory transfers - */ - case ACPI_RSC_MOVE16: - ACPI_MOVE_16_TO_16 (&ACPI_CAST_PTR (UINT16, Destination)[i], - &ACPI_CAST_PTR (UINT16, Source)[i]); - break; - - case ACPI_RSC_MOVE32: - ACPI_MOVE_32_TO_32 (&ACPI_CAST_PTR (UINT32, Destination)[i], - &ACPI_CAST_PTR (UINT32, Source)[i]); - break; - - case ACPI_RSC_MOVE64: - ACPI_MOVE_64_TO_64 (&ACPI_CAST_PTR (UINT64, Destination)[i], - &ACPI_CAST_PTR (UINT64, Source)[i]); - break; - - default: - return; - } - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsSetResourceLength - * - * PARAMETERS: TotalLength - Length of the AML descriptor, including - * the header and length fields. - * Aml - Pointer to the raw AML descriptor - * - * RETURN: None - * - * DESCRIPTION: Set the ResourceLength field of an AML - * resource descriptor, both Large and Small descriptors are - * supported automatically. Note: Descriptor Type field must - * be valid. - * - ******************************************************************************/ - -void -AcpiRsSetResourceLength ( - ACPI_RSDESC_SIZE TotalLength, - AML_RESOURCE *Aml) -{ - ACPI_RS_LENGTH ResourceLength; - - - ACPI_FUNCTION_ENTRY (); - - - /* Length is the total descriptor length minus the header length */ - - ResourceLength = (ACPI_RS_LENGTH) - (TotalLength - AcpiUtGetResourceHeaderLength (Aml)); - - /* Length is stored differently for large and small descriptors */ - - if (Aml->SmallHeader.DescriptorType & ACPI_RESOURCE_NAME_LARGE) - { - /* Large descriptor -- bytes 1-2 contain the 16-bit length */ - - ACPI_MOVE_16_TO_16 (&Aml->LargeHeader.ResourceLength, &ResourceLength); - } - else - { - /* Small descriptor -- bits 2:0 of byte 0 contain the length */ - - Aml->SmallHeader.DescriptorType = (UINT8) - - /* Clear any existing length, preserving descriptor type bits */ - - ((Aml->SmallHeader.DescriptorType & ~ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK) - - | ResourceLength); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsSetResourceHeader - * - * PARAMETERS: DescriptorType - Byte to be inserted as the type - * TotalLength - Length of the AML descriptor, including - * the header and length fields. - * Aml - Pointer to the raw AML descriptor - * - * RETURN: None - * - * DESCRIPTION: Set the DescriptorType and ResourceLength fields of an AML - * resource descriptor, both Large and Small descriptors are - * supported automatically - * - ******************************************************************************/ - -void -AcpiRsSetResourceHeader ( - UINT8 DescriptorType, - ACPI_RSDESC_SIZE TotalLength, - AML_RESOURCE *Aml) -{ - ACPI_FUNCTION_ENTRY (); - - - /* Set the Resource Type */ - - Aml->SmallHeader.DescriptorType = DescriptorType; - - /* Set the Resource Length */ - - AcpiRsSetResourceLength (TotalLength, Aml); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsStrcpy - * - * PARAMETERS: Destination - Pointer to the destination string - * Source - Pointer to the source string - * - * RETURN: String length, including NULL terminator - * - * DESCRIPTION: Local string copy that returns the string length, saving a - * strcpy followed by a strlen. - * - ******************************************************************************/ - -static UINT16 -AcpiRsStrcpy ( - char *Destination, - char *Source) -{ - UINT16 i; - - - ACPI_FUNCTION_ENTRY (); - - - for (i = 0; Source[i]; i++) - { - Destination[i] = Source[i]; - } - - Destination[i] = 0; - - /* Return string length including the NULL terminator */ - - return ((UINT16) (i + 1)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsGetResourceSource - * - * PARAMETERS: ResourceLength - Length field of the descriptor - * MinimumLength - Minimum length of the descriptor (minus - * any optional fields) - * ResourceSource - Where the ResourceSource is returned - * Aml - Pointer to the raw AML descriptor - * StringPtr - (optional) where to store the actual - * ResourceSource string - * - * RETURN: Length of the string plus NULL terminator, rounded up to native - * word boundary - * - * DESCRIPTION: Copy the optional ResourceSource data from a raw AML descriptor - * to an internal resource descriptor - * - ******************************************************************************/ - -ACPI_RS_LENGTH -AcpiRsGetResourceSource ( - ACPI_RS_LENGTH ResourceLength, - ACPI_RS_LENGTH MinimumLength, - ACPI_RESOURCE_SOURCE *ResourceSource, - AML_RESOURCE *Aml, - char *StringPtr) -{ - ACPI_RSDESC_SIZE TotalLength; - UINT8 *AmlResourceSource; - - - ACPI_FUNCTION_ENTRY (); - - - TotalLength = ResourceLength + sizeof (AML_RESOURCE_LARGE_HEADER); - AmlResourceSource = ACPI_ADD_PTR (UINT8, Aml, MinimumLength); - - /* - * ResourceSource is present if the length of the descriptor is longer than - * the minimum length. - * - * Note: Some resource descriptors will have an additional null, so - * we add 1 to the minimum length. - */ - if (TotalLength > (ACPI_RSDESC_SIZE) (MinimumLength + 1)) - { - /* Get the ResourceSourceIndex */ - - ResourceSource->Index = AmlResourceSource[0]; - - ResourceSource->StringPtr = StringPtr; - if (!StringPtr) - { - /* - * String destination pointer is not specified; Set the String - * pointer to the end of the current ResourceSource structure. - */ - ResourceSource->StringPtr = ACPI_ADD_PTR (char, ResourceSource, - sizeof (ACPI_RESOURCE_SOURCE)); - } - - /* - * In order for the Resource length to be a multiple of the native - * word, calculate the length of the string (+1 for NULL terminator) - * and expand to the next word multiple. - * - * Zero the entire area of the buffer. - */ - TotalLength = (UINT32) ACPI_STRLEN ( - ACPI_CAST_PTR (char, &AmlResourceSource[1])) + 1; - TotalLength = (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (TotalLength); - - ACPI_MEMSET (ResourceSource->StringPtr, 0, TotalLength); - - /* Copy the ResourceSource string to the destination */ - - ResourceSource->StringLength = AcpiRsStrcpy (ResourceSource->StringPtr, - ACPI_CAST_PTR (char, &AmlResourceSource[1])); - - return ((ACPI_RS_LENGTH) TotalLength); - } - - /* ResourceSource is not present */ - - ResourceSource->Index = 0; - ResourceSource->StringLength = 0; - ResourceSource->StringPtr = NULL; - return (0); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsSetResourceSource - * - * PARAMETERS: Aml - Pointer to the raw AML descriptor - * MinimumLength - Minimum length of the descriptor (minus - * any optional fields) - * ResourceSource - Internal ResourceSource - - * - * RETURN: Total length of the AML descriptor - * - * DESCRIPTION: Convert an optional ResourceSource from internal format to a - * raw AML resource descriptor - * - ******************************************************************************/ - -ACPI_RSDESC_SIZE -AcpiRsSetResourceSource ( - AML_RESOURCE *Aml, - ACPI_RS_LENGTH MinimumLength, - ACPI_RESOURCE_SOURCE *ResourceSource) -{ - UINT8 *AmlResourceSource; - ACPI_RSDESC_SIZE DescriptorLength; - - - ACPI_FUNCTION_ENTRY (); - - - DescriptorLength = MinimumLength; - - /* Non-zero string length indicates presence of a ResourceSource */ - - if (ResourceSource->StringLength) - { - /* Point to the end of the AML descriptor */ - - AmlResourceSource = ACPI_ADD_PTR (UINT8, Aml, MinimumLength); - - /* Copy the ResourceSourceIndex */ - - AmlResourceSource[0] = (UINT8) ResourceSource->Index; - - /* Copy the ResourceSource string */ - - ACPI_STRCPY (ACPI_CAST_PTR (char, &AmlResourceSource[1]), - ResourceSource->StringPtr); - - /* - * Add the length of the string (+ 1 for null terminator) to the - * final descriptor length - */ - DescriptorLength += ((ACPI_RSDESC_SIZE) ResourceSource->StringLength + 1); - } - - /* Return the new total length of the AML descriptor */ - - return (DescriptorLength); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsGetPrtMethodData - * - * PARAMETERS: Node - Device node - * RetBuffer - Pointer to a buffer structure for the - * results - * - * RETURN: Status - * - * DESCRIPTION: This function is called to get the _PRT value of an object - * contained in an object specified by the handle passed in - * - * If the function fails an appropriate status will be returned - * and the contents of the callers buffer is undefined. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRsGetPrtMethodData ( - ACPI_NAMESPACE_NODE *Node, - ACPI_BUFFER *RetBuffer) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (RsGetPrtMethodData); - - - /* Parameters guaranteed valid by caller */ - - /* Execute the method, no parameters */ - - Status = AcpiUtEvaluateObject (Node, METHOD_NAME__PRT, - ACPI_BTYPE_PACKAGE, &ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Create a resource linked list from the byte stream buffer that comes - * back from the _CRS method execution. - */ - Status = AcpiRsCreatePciRoutingTable (ObjDesc, RetBuffer); - - /* On exit, we must delete the object returned by EvaluateObject */ - - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsGetCrsMethodData - * - * PARAMETERS: Node - Device node - * RetBuffer - Pointer to a buffer structure for the - * results - * - * RETURN: Status - * - * DESCRIPTION: This function is called to get the _CRS value of an object - * contained in an object specified by the handle passed in - * - * If the function fails an appropriate status will be returned - * and the contents of the callers buffer is undefined. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRsGetCrsMethodData ( - ACPI_NAMESPACE_NODE *Node, - ACPI_BUFFER *RetBuffer) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (RsGetCrsMethodData); - - - /* Parameters guaranteed valid by caller */ - - /* Execute the method, no parameters */ - - Status = AcpiUtEvaluateObject (Node, METHOD_NAME__CRS, - ACPI_BTYPE_BUFFER, &ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Make the call to create a resource linked list from the - * byte stream buffer that comes back from the _CRS method - * execution. - */ - Status = AcpiRsCreateResourceList (ObjDesc, RetBuffer); - - /* On exit, we must delete the object returned by evaluateObject */ - - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsGetPrsMethodData - * - * PARAMETERS: Node - Device node - * RetBuffer - Pointer to a buffer structure for the - * results - * - * RETURN: Status - * - * DESCRIPTION: This function is called to get the _PRS value of an object - * contained in an object specified by the handle passed in - * - * If the function fails an appropriate status will be returned - * and the contents of the callers buffer is undefined. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRsGetPrsMethodData ( - ACPI_NAMESPACE_NODE *Node, - ACPI_BUFFER *RetBuffer) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (RsGetPrsMethodData); - - - /* Parameters guaranteed valid by caller */ - - /* Execute the method, no parameters */ - - Status = AcpiUtEvaluateObject (Node, METHOD_NAME__PRS, - ACPI_BTYPE_BUFFER, &ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Make the call to create a resource linked list from the - * byte stream buffer that comes back from the _CRS method - * execution. - */ - Status = AcpiRsCreateResourceList (ObjDesc, RetBuffer); - - /* On exit, we must delete the object returned by evaluateObject */ - - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsGetMethodData - * - * PARAMETERS: Handle - Handle to the containing object - * Path - Path to method, relative to Handle - * RetBuffer - Pointer to a buffer structure for the - * results - * - * RETURN: Status - * - * DESCRIPTION: This function is called to get the _CRS or _PRS value of an - * object contained in an object specified by the handle passed in - * - * If the function fails an appropriate status will be returned - * and the contents of the callers buffer is undefined. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRsGetMethodData ( - ACPI_HANDLE Handle, - char *Path, - ACPI_BUFFER *RetBuffer) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (RsGetMethodData); - - - /* Parameters guaranteed valid by caller */ - - /* Execute the method, no parameters */ - - Status = AcpiUtEvaluateObject (Handle, Path, ACPI_BTYPE_BUFFER, &ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Make the call to create a resource linked list from the - * byte stream buffer that comes back from the method - * execution. - */ - Status = AcpiRsCreateResourceList (ObjDesc, RetBuffer); - - /* On exit, we must delete the object returned by EvaluateObject */ - - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiRsSetSrsMethodData - * - * PARAMETERS: Node - Device node - * InBuffer - Pointer to a buffer structure of the - * parameter - * - * RETURN: Status - * - * DESCRIPTION: This function is called to set the _SRS of an object contained - * in an object specified by the handle passed in - * - * If the function fails an appropriate status will be returned - * and the contents of the callers buffer is undefined. - * - * Note: Parameters guaranteed valid by caller - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRsSetSrsMethodData ( - ACPI_NAMESPACE_NODE *Node, - ACPI_BUFFER *InBuffer) -{ - ACPI_EVALUATE_INFO *Info; - ACPI_OPERAND_OBJECT *Args[2]; - ACPI_STATUS Status; - ACPI_BUFFER Buffer; - - - ACPI_FUNCTION_TRACE (RsSetSrsMethodData); - - - /* Allocate and initialize the evaluation information block */ - - Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); - if (!Info) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - Info->PrefixNode = Node; - Info->Pathname = METHOD_NAME__SRS; - Info->Parameters = Args; - Info->Flags = ACPI_IGNORE_RETURN_VALUE; - - /* - * The InBuffer parameter will point to a linked list of - * resource parameters. It needs to be formatted into a - * byte stream to be sent in as an input parameter to _SRS - * - * Convert the linked list into a byte stream - */ - Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - Status = AcpiRsCreateAmlResources (InBuffer->Pointer, &Buffer); - if (ACPI_FAILURE (Status)) - { - goto Cleanup; - } - - /* Create and initialize the method parameter object */ - - Args[0] = AcpiUtCreateInternalObject (ACPI_TYPE_BUFFER); - if (!Args[0]) - { - /* - * Must free the buffer allocated above (otherwise it is freed - * later) - */ - ACPI_FREE (Buffer.Pointer); - Status = AE_NO_MEMORY; - goto Cleanup; - } - - Args[0]->Buffer.Length = (UINT32) Buffer.Length; - Args[0]->Buffer.Pointer = Buffer.Pointer; - Args[0]->Common.Flags = AOPOBJ_DATA_VALID; - Args[1] = NULL; - - /* Execute the method, no return value is expected */ - - Status = AcpiNsEvaluate (Info); - - /* Clean up and return the status from AcpiNsEvaluate */ - - AcpiUtRemoveReference (Args[0]); - -Cleanup: - ACPI_FREE (Info); - return_ACPI_STATUS (Status); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsxface.c b/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsxface.c deleted file mode 100644 index a509c7afc..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/resources/rsxface.c +++ /dev/null @@ -1,713 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsxface - Public interfaces to the resource manager - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __RSXFACE_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acresrc.h" -#include "acnamesp.h" - -#define _COMPONENT ACPI_RESOURCES - ACPI_MODULE_NAME ("rsxface") - -/* Local macros for 16,32-bit to 64-bit conversion */ - -#define ACPI_COPY_FIELD(Out, In, Field) ((Out)->Field = (In)->Field) -#define ACPI_COPY_ADDRESS(Out, In) \ - ACPI_COPY_FIELD(Out, In, ResourceType); \ - ACPI_COPY_FIELD(Out, In, ProducerConsumer); \ - ACPI_COPY_FIELD(Out, In, Decode); \ - ACPI_COPY_FIELD(Out, In, MinAddressFixed); \ - ACPI_COPY_FIELD(Out, In, MaxAddressFixed); \ - ACPI_COPY_FIELD(Out, In, Info); \ - ACPI_COPY_FIELD(Out, In, Granularity); \ - ACPI_COPY_FIELD(Out, In, Minimum); \ - ACPI_COPY_FIELD(Out, In, Maximum); \ - ACPI_COPY_FIELD(Out, In, TranslationOffset); \ - ACPI_COPY_FIELD(Out, In, AddressLength); \ - ACPI_COPY_FIELD(Out, In, ResourceSource); - - -/* Local prototypes */ - -static ACPI_STATUS -AcpiRsMatchVendorResource ( - ACPI_RESOURCE *Resource, - void *Context); - -static ACPI_STATUS -AcpiRsValidateParameters ( - ACPI_HANDLE DeviceHandle, - ACPI_BUFFER *Buffer, - ACPI_NAMESPACE_NODE **ReturnNode); - - -/******************************************************************************* - * - * FUNCTION: AcpiRsValidateParameters - * - * PARAMETERS: DeviceHandle - Handle to a device - * Buffer - Pointer to a data buffer - * ReturnNode - Pointer to where the device node is returned - * - * RETURN: Status - * - * DESCRIPTION: Common parameter validation for resource interfaces - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiRsValidateParameters ( - ACPI_HANDLE DeviceHandle, - ACPI_BUFFER *Buffer, - ACPI_NAMESPACE_NODE **ReturnNode) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - - - ACPI_FUNCTION_TRACE (RsValidateParameters); - - - /* - * Must have a valid handle to an ACPI device - */ - if (!DeviceHandle) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Node = AcpiNsValidateHandle (DeviceHandle); - if (!Node) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - if (Node->Type != ACPI_TYPE_DEVICE) - { - return_ACPI_STATUS (AE_TYPE); - } - - /* - * Validate the user buffer object - * - * if there is a non-zero buffer length we also need a valid pointer in - * the buffer. If it's a zero buffer length, we'll be returning the - * needed buffer size (later), so keep going. - */ - Status = AcpiUtValidateBuffer (Buffer); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - *ReturnNode = Node; - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiGetIrqRoutingTable - * - * PARAMETERS: DeviceHandle - Handle to the Bus device we are querying - * RetBuffer - Pointer to a buffer to receive the - * current resources for the device - * - * RETURN: Status - * - * DESCRIPTION: This function is called to get the IRQ routing table for a - * specific bus. The caller must first acquire a handle for the - * desired bus. The routine table is placed in the buffer pointed - * to by the RetBuffer variable parameter. - * - * If the function fails an appropriate status will be returned - * and the value of RetBuffer is undefined. - * - * This function attempts to execute the _PRT method contained in - * the object indicated by the passed DeviceHandle. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetIrqRoutingTable ( - ACPI_HANDLE DeviceHandle, - ACPI_BUFFER *RetBuffer) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - - - ACPI_FUNCTION_TRACE (AcpiGetIrqRoutingTable); - - - /* Validate parameters then dispatch to internal routine */ - - Status = AcpiRsValidateParameters (DeviceHandle, RetBuffer, &Node); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Status = AcpiRsGetPrtMethodData (Node, RetBuffer); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetIrqRoutingTable) - - -/******************************************************************************* - * - * FUNCTION: AcpiGetCurrentResources - * - * PARAMETERS: DeviceHandle - Handle to the device object for the - * device we are querying - * RetBuffer - Pointer to a buffer to receive the - * current resources for the device - * - * RETURN: Status - * - * DESCRIPTION: This function is called to get the current resources for a - * specific device. The caller must first acquire a handle for - * the desired device. The resource data is placed in the buffer - * pointed to by the RetBuffer variable parameter. - * - * If the function fails an appropriate status will be returned - * and the value of RetBuffer is undefined. - * - * This function attempts to execute the _CRS method contained in - * the object indicated by the passed DeviceHandle. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetCurrentResources ( - ACPI_HANDLE DeviceHandle, - ACPI_BUFFER *RetBuffer) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - - - ACPI_FUNCTION_TRACE (AcpiGetCurrentResources); - - - /* Validate parameters then dispatch to internal routine */ - - Status = AcpiRsValidateParameters (DeviceHandle, RetBuffer, &Node); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Status = AcpiRsGetCrsMethodData (Node, RetBuffer); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetCurrentResources) - - -/******************************************************************************* - * - * FUNCTION: AcpiGetPossibleResources - * - * PARAMETERS: DeviceHandle - Handle to the device object for the - * device we are querying - * RetBuffer - Pointer to a buffer to receive the - * resources for the device - * - * RETURN: Status - * - * DESCRIPTION: This function is called to get a list of the possible resources - * for a specific device. The caller must first acquire a handle - * for the desired device. The resource data is placed in the - * buffer pointed to by the RetBuffer variable. - * - * If the function fails an appropriate status will be returned - * and the value of RetBuffer is undefined. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetPossibleResources ( - ACPI_HANDLE DeviceHandle, - ACPI_BUFFER *RetBuffer) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - - - ACPI_FUNCTION_TRACE (AcpiGetPossibleResources); - - - /* Validate parameters then dispatch to internal routine */ - - Status = AcpiRsValidateParameters (DeviceHandle, RetBuffer, &Node); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Status = AcpiRsGetPrsMethodData (Node, RetBuffer); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetPossibleResources) - - -/******************************************************************************* - * - * FUNCTION: AcpiSetCurrentResources - * - * PARAMETERS: DeviceHandle - Handle to the device object for the - * device we are setting resources - * InBuffer - Pointer to a buffer containing the - * resources to be set for the device - * - * RETURN: Status - * - * DESCRIPTION: This function is called to set the current resources for a - * specific device. The caller must first acquire a handle for - * the desired device. The resource data is passed to the routine - * the buffer pointed to by the InBuffer variable. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiSetCurrentResources ( - ACPI_HANDLE DeviceHandle, - ACPI_BUFFER *InBuffer) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node; - - - ACPI_FUNCTION_TRACE (AcpiSetCurrentResources); - - - /* Validate the buffer, don't allow zero length */ - - if ((!InBuffer) || - (!InBuffer->Pointer) || - (!InBuffer->Length)) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Validate parameters then dispatch to internal routine */ - - Status = AcpiRsValidateParameters (DeviceHandle, InBuffer, &Node); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Status = AcpiRsSetSrsMethodData (Node, InBuffer); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiSetCurrentResources) - - -/****************************************************************************** - * - * FUNCTION: AcpiResourceToAddress64 - * - * PARAMETERS: Resource - Pointer to a resource - * Out - Pointer to the users's return buffer - * (a struct acpi_resource_address64) - * - * RETURN: Status - * - * DESCRIPTION: If the resource is an address16, address32, or address64, - * copy it to the address64 return buffer. This saves the - * caller from having to duplicate code for different-sized - * addresses. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiResourceToAddress64 ( - ACPI_RESOURCE *Resource, - ACPI_RESOURCE_ADDRESS64 *Out) -{ - ACPI_RESOURCE_ADDRESS16 *Address16; - ACPI_RESOURCE_ADDRESS32 *Address32; - - - if (!Resource || !Out) - { - return (AE_BAD_PARAMETER); - } - - /* Convert 16 or 32 address descriptor to 64 */ - - switch (Resource->Type) - { - case ACPI_RESOURCE_TYPE_ADDRESS16: - - Address16 = ACPI_CAST_PTR (ACPI_RESOURCE_ADDRESS16, &Resource->Data); - ACPI_COPY_ADDRESS (Out, Address16); - break; - - case ACPI_RESOURCE_TYPE_ADDRESS32: - - Address32 = ACPI_CAST_PTR (ACPI_RESOURCE_ADDRESS32, &Resource->Data); - ACPI_COPY_ADDRESS (Out, Address32); - break; - - case ACPI_RESOURCE_TYPE_ADDRESS64: - - /* Simple copy for 64 bit source */ - - ACPI_MEMCPY (Out, &Resource->Data, sizeof (ACPI_RESOURCE_ADDRESS64)); - break; - - default: - return (AE_BAD_PARAMETER); - } - - return (AE_OK); -} - -ACPI_EXPORT_SYMBOL (AcpiResourceToAddress64) - - -/******************************************************************************* - * - * FUNCTION: AcpiGetVendorResource - * - * PARAMETERS: DeviceHandle - Handle for the parent device object - * Name - Method name for the parent resource - * (METHOD_NAME__CRS or METHOD_NAME__PRS) - * Uuid - Pointer to the UUID to be matched. - * includes both subtype and 16-byte UUID - * RetBuffer - Where the vendor resource is returned - * - * RETURN: Status - * - * DESCRIPTION: Walk a resource template for the specified evice to find a - * vendor-defined resource that matches the supplied UUID and - * UUID subtype. Returns a ACPI_RESOURCE of type Vendor. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetVendorResource ( - ACPI_HANDLE DeviceHandle, - char *Name, - ACPI_VENDOR_UUID *Uuid, - ACPI_BUFFER *RetBuffer) -{ - ACPI_VENDOR_WALK_INFO Info; - ACPI_STATUS Status; - - - /* Other parameters are validated by AcpiWalkResources */ - - if (!Uuid || !RetBuffer) - { - return (AE_BAD_PARAMETER); - } - - Info.Uuid = Uuid; - Info.Buffer = RetBuffer; - Info.Status = AE_NOT_EXIST; - - /* Walk the _CRS or _PRS resource list for this device */ - - Status = AcpiWalkResources (DeviceHandle, Name, AcpiRsMatchVendorResource, - &Info); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - return (Info.Status); -} - -ACPI_EXPORT_SYMBOL (AcpiGetVendorResource) - - -/******************************************************************************* - * - * FUNCTION: AcpiRsMatchVendorResource - * - * PARAMETERS: ACPI_WALK_RESOURCE_CALLBACK - * - * RETURN: Status - * - * DESCRIPTION: Match a vendor resource via the ACPI 3.0 UUID - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiRsMatchVendorResource ( - ACPI_RESOURCE *Resource, - void *Context) -{ - ACPI_VENDOR_WALK_INFO *Info = Context; - ACPI_RESOURCE_VENDOR_TYPED *Vendor; - ACPI_BUFFER *Buffer; - ACPI_STATUS Status; - - - /* Ignore all descriptors except Vendor */ - - if (Resource->Type != ACPI_RESOURCE_TYPE_VENDOR) - { - return (AE_OK); - } - - Vendor = &Resource->Data.VendorTyped; - - /* - * For a valid match, these conditions must hold: - * - * 1) Length of descriptor data must be at least as long as a UUID struct - * 2) The UUID subtypes must match - * 3) The UUID data must match - */ - if ((Vendor->ByteLength < (ACPI_UUID_LENGTH + 1)) || - (Vendor->UuidSubtype != Info->Uuid->Subtype) || - (ACPI_MEMCMP (Vendor->Uuid, Info->Uuid->Data, ACPI_UUID_LENGTH))) - { - return (AE_OK); - } - - /* Validate/Allocate/Clear caller buffer */ - - Buffer = Info->Buffer; - Status = AcpiUtInitializeBuffer (Buffer, Resource->Length); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Found the correct resource, copy and return it */ - - ACPI_MEMCPY (Buffer->Pointer, Resource, Resource->Length); - Buffer->Length = Resource->Length; - - /* Found the desired descriptor, terminate resource walk */ - - Info->Status = AE_OK; - return (AE_CTRL_TERMINATE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiWalkResources - * - * PARAMETERS: DeviceHandle - Handle to the device object for the - * device we are querying - * Name - Method name of the resources we want - * (METHOD_NAME__CRS or METHOD_NAME__PRS) - * UserFunction - Called for each resource - * Context - Passed to UserFunction - * - * RETURN: Status - * - * DESCRIPTION: Retrieves the current or possible resource list for the - * specified device. The UserFunction is called once for - * each resource in the list. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiWalkResources ( - ACPI_HANDLE DeviceHandle, - char *Name, - ACPI_WALK_RESOURCE_CALLBACK UserFunction, - void *Context) -{ - ACPI_STATUS Status; - ACPI_BUFFER Buffer; - ACPI_RESOURCE *Resource; - ACPI_RESOURCE *ResourceEnd; - - - ACPI_FUNCTION_TRACE (AcpiWalkResources); - - - /* Parameter validation */ - - if (!DeviceHandle || !UserFunction || !Name || - (!ACPI_COMPARE_NAME (Name, METHOD_NAME__CRS) && - !ACPI_COMPARE_NAME (Name, METHOD_NAME__PRS))) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Get the _CRS or _PRS resource list */ - - Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - Status = AcpiRsGetMethodData (DeviceHandle, Name, &Buffer); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Buffer now contains the resource list */ - - Resource = ACPI_CAST_PTR (ACPI_RESOURCE, Buffer.Pointer); - ResourceEnd = ACPI_ADD_PTR (ACPI_RESOURCE, Buffer.Pointer, Buffer.Length); - - /* Walk the resource list until the EndTag is found (or buffer end) */ - - while (Resource < ResourceEnd) - { - /* Sanity check the resource */ - - if (Resource->Type > ACPI_RESOURCE_TYPE_MAX) - { - Status = AE_AML_INVALID_RESOURCE_TYPE; - break; - } - - /* Invoke the user function, abort on any error returned */ - - Status = UserFunction (Resource, Context); - if (ACPI_FAILURE (Status)) - { - if (Status == AE_CTRL_TERMINATE) - { - /* This is an OK termination by the user function */ - - Status = AE_OK; - } - break; - } - - /* EndTag indicates end-of-list */ - - if (Resource->Type == ACPI_RESOURCE_TYPE_END_TAG) - { - break; - } - - /* Get the next resource descriptor */ - - Resource = ACPI_ADD_PTR (ACPI_RESOURCE, Resource, Resource->Length); - } - - ACPI_FREE (Buffer.Pointer); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiWalkResources) diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbfadt.c b/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbfadt.c deleted file mode 100644 index c657a0b75..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbfadt.c +++ /dev/null @@ -1,752 +0,0 @@ -/****************************************************************************** - * - * Module Name: tbfadt - FADT table utilities - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __TBFADT_C__ - -#include "acpi.h" -#include "accommon.h" -#include "actables.h" - -#define _COMPONENT ACPI_TABLES - ACPI_MODULE_NAME ("tbfadt") - -/* Local prototypes */ - -static inline void -AcpiTbInitGenericAddress ( - ACPI_GENERIC_ADDRESS *GenericAddress, - UINT8 SpaceId, - UINT8 ByteWidth, - UINT64 Address); - -static void -AcpiTbConvertFadt ( - void); - -static void -AcpiTbValidateFadt ( - void); - -static void -AcpiTbSetupFadtRegisters ( - void); - - -/* Table for conversion of FADT to common internal format and FADT validation */ - -typedef struct acpi_fadt_info -{ - char *Name; - UINT8 Address64; - UINT8 Address32; - UINT8 Length; - UINT8 DefaultLength; - UINT8 Type; - -} ACPI_FADT_INFO; - -#define ACPI_FADT_REQUIRED 1 -#define ACPI_FADT_SEPARATE_LENGTH 2 - -static ACPI_FADT_INFO FadtInfoTable[] = -{ - {"Pm1aEventBlock", - ACPI_FADT_OFFSET (XPm1aEventBlock), - ACPI_FADT_OFFSET (Pm1aEventBlock), - ACPI_FADT_OFFSET (Pm1EventLength), - ACPI_PM1_REGISTER_WIDTH * 2, /* Enable + Status register */ - ACPI_FADT_REQUIRED}, - - {"Pm1bEventBlock", - ACPI_FADT_OFFSET (XPm1bEventBlock), - ACPI_FADT_OFFSET (Pm1bEventBlock), - ACPI_FADT_OFFSET (Pm1EventLength), - ACPI_PM1_REGISTER_WIDTH * 2, /* Enable + Status register */ - 0}, - - {"Pm1aControlBlock", - ACPI_FADT_OFFSET (XPm1aControlBlock), - ACPI_FADT_OFFSET (Pm1aControlBlock), - ACPI_FADT_OFFSET (Pm1ControlLength), - ACPI_PM1_REGISTER_WIDTH, - ACPI_FADT_REQUIRED}, - - {"Pm1bControlBlock", - ACPI_FADT_OFFSET (XPm1bControlBlock), - ACPI_FADT_OFFSET (Pm1bControlBlock), - ACPI_FADT_OFFSET (Pm1ControlLength), - ACPI_PM1_REGISTER_WIDTH, - 0}, - - {"Pm2ControlBlock", - ACPI_FADT_OFFSET (XPm2ControlBlock), - ACPI_FADT_OFFSET (Pm2ControlBlock), - ACPI_FADT_OFFSET (Pm2ControlLength), - ACPI_PM2_REGISTER_WIDTH, - ACPI_FADT_SEPARATE_LENGTH}, - - {"PmTimerBlock", - ACPI_FADT_OFFSET (XPmTimerBlock), - ACPI_FADT_OFFSET (PmTimerBlock), - ACPI_FADT_OFFSET (PmTimerLength), - ACPI_PM_TIMER_WIDTH, - ACPI_FADT_REQUIRED}, - - {"Gpe0Block", - ACPI_FADT_OFFSET (XGpe0Block), - ACPI_FADT_OFFSET (Gpe0Block), - ACPI_FADT_OFFSET (Gpe0BlockLength), - 0, - ACPI_FADT_SEPARATE_LENGTH}, - - {"Gpe1Block", - ACPI_FADT_OFFSET (XGpe1Block), - ACPI_FADT_OFFSET (Gpe1Block), - ACPI_FADT_OFFSET (Gpe1BlockLength), - 0, - ACPI_FADT_SEPARATE_LENGTH} -}; - -#define ACPI_FADT_INFO_ENTRIES \ - (sizeof (FadtInfoTable) / sizeof (ACPI_FADT_INFO)) - - -/* Table used to split Event Blocks into separate status/enable registers */ - -typedef struct acpi_fadt_pm_info -{ - ACPI_GENERIC_ADDRESS *Target; - UINT8 Source; - UINT8 RegisterNum; - -} ACPI_FADT_PM_INFO; - -static ACPI_FADT_PM_INFO FadtPmInfoTable[] = -{ - {&AcpiGbl_XPm1aStatus, - ACPI_FADT_OFFSET (XPm1aEventBlock), - 0}, - - {&AcpiGbl_XPm1aEnable, - ACPI_FADT_OFFSET (XPm1aEventBlock), - 1}, - - {&AcpiGbl_XPm1bStatus, - ACPI_FADT_OFFSET (XPm1bEventBlock), - 0}, - - {&AcpiGbl_XPm1bEnable, - ACPI_FADT_OFFSET (XPm1bEventBlock), - 1} -}; - -#define ACPI_FADT_PM_INFO_ENTRIES \ - (sizeof (FadtPmInfoTable) / sizeof (ACPI_FADT_PM_INFO)) - - -/******************************************************************************* - * - * FUNCTION: AcpiTbInitGenericAddress - * - * PARAMETERS: GenericAddress - GAS struct to be initialized - * SpaceId - ACPI Space ID for this register - * ByteWidth - Width of this register, in bytes - * Address - Address of the register - * - * RETURN: None - * - * DESCRIPTION: Initialize a Generic Address Structure (GAS) - * See the ACPI specification for a full description and - * definition of this structure. - * - ******************************************************************************/ - -static inline void -AcpiTbInitGenericAddress ( - ACPI_GENERIC_ADDRESS *GenericAddress, - UINT8 SpaceId, - UINT8 ByteWidth, - UINT64 Address) -{ - - /* - * The 64-bit Address field is non-aligned in the byte packed - * GAS struct. - */ - ACPI_MOVE_64_TO_64 (&GenericAddress->Address, &Address); - - /* All other fields are byte-wide */ - - GenericAddress->SpaceId = SpaceId; - GenericAddress->BitWidth = (UINT8) ACPI_MUL_8 (ByteWidth); - GenericAddress->BitOffset = 0; - GenericAddress->AccessWidth = 0; /* Access width ANY */ -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbParseFadt - * - * PARAMETERS: TableIndex - Index for the FADT - * - * RETURN: None - * - * DESCRIPTION: Initialize the FADT, DSDT and FACS tables - * (FADT contains the addresses of the DSDT and FACS) - * - ******************************************************************************/ - -void -AcpiTbParseFadt ( - UINT32 TableIndex) -{ - UINT32 Length; - ACPI_TABLE_HEADER *Table; - - - /* - * The FADT has multiple versions with different lengths, - * and it contains pointers to both the DSDT and FACS tables. - * - * Get a local copy of the FADT and convert it to a common format - * Map entire FADT, assumed to be smaller than one page. - */ - Length = AcpiGbl_RootTableList.Tables[TableIndex].Length; - - Table = AcpiOsMapMemory ( - AcpiGbl_RootTableList.Tables[TableIndex].Address, Length); - if (!Table) - { - return; - } - - /* - * Validate the FADT checksum before we copy the table. Ignore - * checksum error as we want to try to get the DSDT and FACS. - */ - (void) AcpiTbVerifyChecksum (Table, Length); - - /* Create a local copy of the FADT in common ACPI 2.0+ format */ - - AcpiTbCreateLocalFadt (Table, Length); - - /* All done with the real FADT, unmap it */ - - AcpiOsUnmapMemory (Table, Length); - - /* Obtain the DSDT and FACS tables via their addresses within the FADT */ - - AcpiTbInstallTable ((ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XDsdt, - ACPI_SIG_DSDT, ACPI_TABLE_INDEX_DSDT); - - AcpiTbInstallTable ((ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XFacs, - ACPI_SIG_FACS, ACPI_TABLE_INDEX_FACS); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbCreateLocalFadt - * - * PARAMETERS: Table - Pointer to BIOS FADT - * Length - Length of the table - * - * RETURN: None - * - * DESCRIPTION: Get a local copy of the FADT and convert it to a common format. - * Performs validation on some important FADT fields. - * - * NOTE: We create a local copy of the FADT regardless of the version. - * - ******************************************************************************/ - -void -AcpiTbCreateLocalFadt ( - ACPI_TABLE_HEADER *Table, - UINT32 Length) -{ - - /* - * Check if the FADT is larger than the largest table that we expect - * (the ACPI 2.0/3.0 version). If so, truncate the table, and issue - * a warning. - */ - if (Length > sizeof (ACPI_TABLE_FADT)) - { - ACPI_WARNING ((AE_INFO, - "FADT (revision %u) is longer than ACPI 2.0 version, " - "truncating length 0x%X to 0x%X", - Table->Revision, Length, (UINT32) sizeof (ACPI_TABLE_FADT))); - } - - /* Clear the entire local FADT */ - - ACPI_MEMSET (&AcpiGbl_FADT, 0, sizeof (ACPI_TABLE_FADT)); - - /* Copy the original FADT, up to sizeof (ACPI_TABLE_FADT) */ - - ACPI_MEMCPY (&AcpiGbl_FADT, Table, - ACPI_MIN (Length, sizeof (ACPI_TABLE_FADT))); - - /* Convert the local copy of the FADT to the common internal format */ - - AcpiTbConvertFadt (); - - /* Validate FADT values now, before we make any changes */ - - AcpiTbValidateFadt (); - - /* Initialize the global ACPI register structures */ - - AcpiTbSetupFadtRegisters (); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbConvertFadt - * - * PARAMETERS: None, uses AcpiGbl_FADT - * - * RETURN: None - * - * DESCRIPTION: Converts all versions of the FADT to a common internal format. - * Expand 32-bit addresses to 64-bit as necessary. - * - * NOTE: AcpiGbl_FADT must be of size (ACPI_TABLE_FADT), - * and must contain a copy of the actual FADT. - * - * Notes on 64-bit register addresses: - * - * After this FADT conversion, later ACPICA code will only use the 64-bit "X" - * fields of the FADT for all ACPI register addresses. - * - * The 64-bit "X" fields are optional extensions to the original 32-bit FADT - * V1.0 fields. Even if they are present in the FADT, they are optional and - * are unused if the BIOS sets them to zero. Therefore, we must copy/expand - * 32-bit V1.0 fields if the corresponding X field is zero. - * - * For ACPI 1.0 FADTs, all 32-bit address fields are expanded to the - * corresponding "X" fields in the internal FADT. - * - * For ACPI 2.0+ FADTs, all valid (non-zero) 32-bit address fields are expanded - * to the corresponding 64-bit X fields. For compatibility with other ACPI - * implementations, we ignore the 64-bit field if the 32-bit field is valid, - * regardless of whether the host OS is 32-bit or 64-bit. - * - ******************************************************************************/ - -static void -AcpiTbConvertFadt ( - void) -{ - ACPI_GENERIC_ADDRESS *Address64; - UINT32 Address32; - UINT32 i; - - - /* Update the local FADT table header length */ - - AcpiGbl_FADT.Header.Length = sizeof (ACPI_TABLE_FADT); - - /* - * Expand the 32-bit FACS and DSDT addresses to 64-bit as necessary. - * Later code will always use the X 64-bit field. - */ - if (!AcpiGbl_FADT.XFacs) - { - AcpiGbl_FADT.XFacs = (UINT64) AcpiGbl_FADT.Facs; - } - if (!AcpiGbl_FADT.XDsdt) - { - AcpiGbl_FADT.XDsdt = (UINT64) AcpiGbl_FADT.Dsdt; - } - - /* - * For ACPI 1.0 FADTs (revision 1 or 2), ensure that reserved fields which - * should be zero are indeed zero. This will workaround BIOSs that - * inadvertently place values in these fields. - * - * The ACPI 1.0 reserved fields that will be zeroed are the bytes located - * at offset 45, 55, 95, and the word located at offset 109, 110. - */ - if (AcpiGbl_FADT.Header.Revision < 3) - { - AcpiGbl_FADT.PreferredProfile = 0; - AcpiGbl_FADT.PstateControl = 0; - AcpiGbl_FADT.CstControl = 0; - AcpiGbl_FADT.BootFlags = 0; - } - - /* - * Expand the ACPI 1.0 32-bit addresses to the ACPI 2.0 64-bit "X" - * generic address structures as necessary. Later code will always use - * the 64-bit address structures. - * - * March 2009: - * We now always use the 32-bit address if it is valid (non-null). This - * is not in accordance with the ACPI specification which states that - * the 64-bit address supersedes the 32-bit version, but we do this for - * compatibility with other ACPI implementations. Most notably, in the - * case where both the 32 and 64 versions are non-null, we use the 32-bit - * version. This is the only address that is guaranteed to have been - * tested by the BIOS manufacturer. - */ - for (i = 0; i < ACPI_FADT_INFO_ENTRIES; i++) - { - Address32 = *ACPI_ADD_PTR (UINT32, - &AcpiGbl_FADT, FadtInfoTable[i].Address32); - - Address64 = ACPI_ADD_PTR (ACPI_GENERIC_ADDRESS, - &AcpiGbl_FADT, FadtInfoTable[i].Address64); - - /* - * If both 32- and 64-bit addresses are valid (non-zero), - * they must match. - */ - if (Address64->Address && Address32 && - (Address64->Address != (UINT64) Address32)) - { - ACPI_ERROR ((AE_INFO, - "32/64X address mismatch in %s: %8.8X/%8.8X%8.8X, using 32", - FadtInfoTable[i].Name, Address32, - ACPI_FORMAT_UINT64 (Address64->Address))); - } - - /* Always use 32-bit address if it is valid (non-null) */ - - if (Address32) - { - /* - * Copy the 32-bit address to the 64-bit GAS structure. The - * Space ID is always I/O for 32-bit legacy address fields - */ - AcpiTbInitGenericAddress (Address64, ACPI_ADR_SPACE_SYSTEM_IO, - *ACPI_ADD_PTR (UINT8, &AcpiGbl_FADT, FadtInfoTable[i].Length), - (UINT64) Address32); - } - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbValidateFadt - * - * PARAMETERS: Table - Pointer to the FADT to be validated - * - * RETURN: None - * - * DESCRIPTION: Validate various important fields within the FADT. If a problem - * is found, issue a message, but no status is returned. - * Used by both the table manager and the disassembler. - * - * Possible additional checks: - * (AcpiGbl_FADT.Pm1EventLength >= 4) - * (AcpiGbl_FADT.Pm1ControlLength >= 2) - * (AcpiGbl_FADT.PmTimerLength >= 4) - * Gpe block lengths must be multiple of 2 - * - ******************************************************************************/ - -static void -AcpiTbValidateFadt ( - void) -{ - char *Name; - ACPI_GENERIC_ADDRESS *Address64; - UINT8 Length; - UINT32 i; - - - /* - * Check for FACS and DSDT address mismatches. An address mismatch between - * the 32-bit and 64-bit address fields (FIRMWARE_CTRL/X_FIRMWARE_CTRL and - * DSDT/X_DSDT) would indicate the presence of two FACS or two DSDT tables. - */ - if (AcpiGbl_FADT.Facs && - (AcpiGbl_FADT.XFacs != (UINT64) AcpiGbl_FADT.Facs)) - { - ACPI_WARNING ((AE_INFO, - "32/64X FACS address mismatch in FADT - " - "%8.8X/%8.8X%8.8X, using 32", - AcpiGbl_FADT.Facs, ACPI_FORMAT_UINT64 (AcpiGbl_FADT.XFacs))); - - AcpiGbl_FADT.XFacs = (UINT64) AcpiGbl_FADT.Facs; - } - - if (AcpiGbl_FADT.Dsdt && - (AcpiGbl_FADT.XDsdt != (UINT64) AcpiGbl_FADT.Dsdt)) - { - ACPI_WARNING ((AE_INFO, - "32/64X DSDT address mismatch in FADT - " - "%8.8X/%8.8X%8.8X, using 32", - AcpiGbl_FADT.Dsdt, ACPI_FORMAT_UINT64 (AcpiGbl_FADT.XDsdt))); - - AcpiGbl_FADT.XDsdt = (UINT64) AcpiGbl_FADT.Dsdt; - } - - /* Examine all of the 64-bit extended address fields (X fields) */ - - for (i = 0; i < ACPI_FADT_INFO_ENTRIES; i++) - { - /* - * Generate pointer to the 64-bit address, get the register - * length (width) and the register name - */ - Address64 = ACPI_ADD_PTR (ACPI_GENERIC_ADDRESS, - &AcpiGbl_FADT, FadtInfoTable[i].Address64); - Length = *ACPI_ADD_PTR (UINT8, - &AcpiGbl_FADT, FadtInfoTable[i].Length); - Name = FadtInfoTable[i].Name; - - /* - * For each extended field, check for length mismatch between the - * legacy length field and the corresponding 64-bit X length field. - */ - if (Address64->Address && - (Address64->BitWidth != ACPI_MUL_8 (Length))) - { - ACPI_WARNING ((AE_INFO, - "32/64X length mismatch in %s: %d/%d", - Name, ACPI_MUL_8 (Length), Address64->BitWidth)); - } - - if (FadtInfoTable[i].Type & ACPI_FADT_REQUIRED) - { - /* - * Field is required (PM1aEvent, PM1aControl, PmTimer). - * Both the address and length must be non-zero. - */ - if (!Address64->Address || !Length) - { - ACPI_ERROR ((AE_INFO, - "Required field %s has zero address and/or length:" - " %8.8X%8.8X/%X", - Name, ACPI_FORMAT_UINT64 (Address64->Address), Length)); - } - } - else if (FadtInfoTable[i].Type & ACPI_FADT_SEPARATE_LENGTH) - { - /* - * Field is optional (PM2Control, GPE0, GPE1) AND has its own - * length field. If present, both the address and length must - * be valid. - */ - if ((Address64->Address && !Length) || - (!Address64->Address && Length)) - { - ACPI_WARNING ((AE_INFO, - "Optional field %s has zero address or length: " - "%8.8X%8.8X/%X", - Name, ACPI_FORMAT_UINT64 (Address64->Address), Length)); - } - } - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbSetupFadtRegisters - * - * PARAMETERS: None, uses AcpiGbl_FADT. - * - * RETURN: None - * - * DESCRIPTION: Initialize global ACPI PM1 register definitions. Optionally, - * force FADT register definitions to their default lengths. - * - ******************************************************************************/ - -static void -AcpiTbSetupFadtRegisters ( - void) -{ - ACPI_GENERIC_ADDRESS *Target64; - ACPI_GENERIC_ADDRESS *Source64; - UINT8 Pm1RegisterByteWidth; - UINT32 i; - - - /* - * Optionally check all register lengths against the default values and - * update them if they are incorrect. - */ - if (AcpiGbl_UseDefaultRegisterWidths) - { - for (i = 0; i < ACPI_FADT_INFO_ENTRIES; i++) - { - Target64 = ACPI_ADD_PTR (ACPI_GENERIC_ADDRESS, &AcpiGbl_FADT, - FadtInfoTable[i].Address64); - - /* - * If a valid register (Address != 0) and the (DefaultLength > 0) - * (Not a GPE register), then check the width against the default. - */ - if ((Target64->Address) && - (FadtInfoTable[i].DefaultLength > 0) && - (FadtInfoTable[i].DefaultLength != Target64->BitWidth)) - { - ACPI_WARNING ((AE_INFO, - "Invalid length for %s: %d, using default %d", - FadtInfoTable[i].Name, Target64->BitWidth, - FadtInfoTable[i].DefaultLength)); - - /* Incorrect size, set width to the default */ - - Target64->BitWidth = FadtInfoTable[i].DefaultLength; - } - } - } - - /* - * Get the length of the individual PM1 registers (enable and status). - * Each register is defined to be (event block length / 2). Extra divide - * by 8 converts bits to bytes. - */ - Pm1RegisterByteWidth = (UINT8) - ACPI_DIV_16 (AcpiGbl_FADT.XPm1aEventBlock.BitWidth); - - /* - * Calculate separate GAS structs for the PM1x (A/B) Status and Enable - * registers. These addresses do not appear (directly) in the FADT, so it - * is useful to pre-calculate them from the PM1 Event Block definitions. - * - * The PM event blocks are split into two register blocks, first is the - * PM Status Register block, followed immediately by the PM Enable - * Register block. Each is of length (Pm1EventLength/2) - * - * Note: The PM1A event block is required by the ACPI specification. - * However, the PM1B event block is optional and is rarely, if ever, - * used. - */ - - for (i = 0; i < ACPI_FADT_PM_INFO_ENTRIES; i++) - { - Source64 = ACPI_ADD_PTR (ACPI_GENERIC_ADDRESS, &AcpiGbl_FADT, - FadtPmInfoTable[i].Source); - - if (Source64->Address) - { - AcpiTbInitGenericAddress (FadtPmInfoTable[i].Target, - Source64->SpaceId, Pm1RegisterByteWidth, - Source64->Address + - (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth)); - } - } -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbfind.c b/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbfind.c deleted file mode 100644 index 1838b5eb7..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbfind.c +++ /dev/null @@ -1,215 +0,0 @@ -/****************************************************************************** - * - * Module Name: tbfind - find table - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __TBFIND_C__ - -#include "acpi.h" -#include "accommon.h" -#include "actables.h" - -#define _COMPONENT ACPI_TABLES - ACPI_MODULE_NAME ("tbfind") - - -/******************************************************************************* - * - * FUNCTION: AcpiTbFindTable - * - * PARAMETERS: Signature - String with ACPI table signature - * OemId - String with the table OEM ID - * OemTableId - String with the OEM Table ID - * TableIndex - Where the table index is returned - * - * RETURN: Status and table index - * - * DESCRIPTION: Find an ACPI table (in the RSDT/XSDT) that matches the - * Signature, OEM ID and OEM Table ID. Returns an index that can - * be used to get the table header or entire table. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiTbFindTable ( - char *Signature, - char *OemId, - char *OemTableId, - UINT32 *TableIndex) -{ - UINT32 i; - ACPI_STATUS Status; - ACPI_TABLE_HEADER Header; - - - ACPI_FUNCTION_TRACE (TbFindTable); - - - /* Normalize the input strings */ - - ACPI_MEMSET (&Header, 0, sizeof (ACPI_TABLE_HEADER)); - ACPI_STRNCPY (Header.Signature, Signature, ACPI_NAME_SIZE); - ACPI_STRNCPY (Header.OemId, OemId, ACPI_OEM_ID_SIZE); - ACPI_STRNCPY (Header.OemTableId, OemTableId, ACPI_OEM_TABLE_ID_SIZE); - - /* Search for the table */ - - for (i = 0; i < AcpiGbl_RootTableList.Count; ++i) - { - if (ACPI_MEMCMP (&(AcpiGbl_RootTableList.Tables[i].Signature), - Header.Signature, ACPI_NAME_SIZE)) - { - /* Not the requested table */ - - continue; - } - - /* Table with matching signature has been found */ - - if (!AcpiGbl_RootTableList.Tables[i].Pointer) - { - /* Table is not currently mapped, map it */ - - Status = AcpiTbVerifyTable (&AcpiGbl_RootTableList.Tables[i]); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - if (!AcpiGbl_RootTableList.Tables[i].Pointer) - { - continue; - } - } - - /* Check for table match on all IDs */ - - if (!ACPI_MEMCMP (AcpiGbl_RootTableList.Tables[i].Pointer->Signature, - Header.Signature, ACPI_NAME_SIZE) && - (!OemId[0] || - !ACPI_MEMCMP (AcpiGbl_RootTableList.Tables[i].Pointer->OemId, - Header.OemId, ACPI_OEM_ID_SIZE)) && - (!OemTableId[0] || - !ACPI_MEMCMP (AcpiGbl_RootTableList.Tables[i].Pointer->OemTableId, - Header.OemTableId, ACPI_OEM_TABLE_ID_SIZE))) - { - *TableIndex = i; - - ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "Found table [%4.4s]\n", - Header.Signature)); - return_ACPI_STATUS (AE_OK); - } - } - - return_ACPI_STATUS (AE_NOT_FOUND); -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbinstal.c b/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbinstal.c deleted file mode 100644 index c911f84f6..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbinstal.c +++ /dev/null @@ -1,785 +0,0 @@ -/****************************************************************************** - * - * Module Name: tbinstal - ACPI table installation and removal - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __TBINSTAL_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "actables.h" - - -#define _COMPONENT ACPI_TABLES - ACPI_MODULE_NAME ("tbinstal") - - -/****************************************************************************** - * - * FUNCTION: AcpiTbVerifyTable - * - * PARAMETERS: TableDesc - table - * - * RETURN: Status - * - * DESCRIPTION: this function is called to verify and map table - * - *****************************************************************************/ - -ACPI_STATUS -AcpiTbVerifyTable ( - ACPI_TABLE_DESC *TableDesc) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (TbVerifyTable); - - - /* Map the table if necessary */ - - if (!TableDesc->Pointer) - { - if ((TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK) == - ACPI_TABLE_ORIGIN_MAPPED) - { - TableDesc->Pointer = AcpiOsMapMemory ( - TableDesc->Address, TableDesc->Length); - } - - if (!TableDesc->Pointer) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - } - - /* FACS is the odd table, has no standard ACPI header and no checksum */ - - if (!ACPI_COMPARE_NAME (&TableDesc->Signature, ACPI_SIG_FACS)) - { - /* Always calculate checksum, ignore bad checksum if requested */ - - Status = AcpiTbVerifyChecksum (TableDesc->Pointer, TableDesc->Length); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbAddTable - * - * PARAMETERS: TableDesc - Table descriptor - * TableIndex - Where the table index is returned - * - * RETURN: Status - * - * DESCRIPTION: This function is called to add an ACPI table. It is used to - * dynamically load tables via the Load and LoadTable AML - * operators. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiTbAddTable ( - ACPI_TABLE_DESC *TableDesc, - UINT32 *TableIndex) -{ - UINT32 i; - ACPI_STATUS Status = AE_OK; - ACPI_TABLE_HEADER *OverrideTable = NULL; - - - ACPI_FUNCTION_TRACE (TbAddTable); - - - if (!TableDesc->Pointer) - { - Status = AcpiTbVerifyTable (TableDesc); - if (ACPI_FAILURE (Status) || !TableDesc->Pointer) - { - return_ACPI_STATUS (Status); - } - } - - /* - * Originally, we checked the table signature for "SSDT" or "PSDT" here. - * Next, we added support for OEMx tables, signature "OEM". - * Valid tables were encountered with a null signature, so we've just - * given up on validating the signature, since it seems to be a waste - * of code. The original code was removed (05/2008). - */ - - (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); - - /* Check if table is already registered */ - - for (i = 0; i < AcpiGbl_RootTableList.Count; ++i) - { - if (!AcpiGbl_RootTableList.Tables[i].Pointer) - { - Status = AcpiTbVerifyTable (&AcpiGbl_RootTableList.Tables[i]); - if (ACPI_FAILURE (Status) || - !AcpiGbl_RootTableList.Tables[i].Pointer) - { - continue; - } - } - - /* - * Check for a table match on the entire table length, - * not just the header. - */ - if (TableDesc->Length != AcpiGbl_RootTableList.Tables[i].Length) - { - continue; - } - - if (ACPI_MEMCMP (TableDesc->Pointer, - AcpiGbl_RootTableList.Tables[i].Pointer, - AcpiGbl_RootTableList.Tables[i].Length)) - { - continue; - } - - /* - * Note: the current mechanism does not unregister a table if it is - * dynamically unloaded. The related namespace entries are deleted, - * but the table remains in the root table list. - * - * The assumption here is that the number of different tables that - * will be loaded is actually small, and there is minimal overhead - * in just keeping the table in case it is needed again. - * - * If this assumption changes in the future (perhaps on large - * machines with many table load/unload operations), tables will - * need to be unregistered when they are unloaded, and slots in the - * root table list should be reused when empty. - */ - - /* - * Table is already registered. - * We can delete the table that was passed as a parameter. - */ - AcpiTbDeleteTable (TableDesc); - *TableIndex = i; - - if (AcpiGbl_RootTableList.Tables[i].Flags & ACPI_TABLE_IS_LOADED) - { - /* Table is still loaded, this is an error */ - - Status = AE_ALREADY_EXISTS; - goto Release; - } - else - { - /* Table was unloaded, allow it to be reloaded */ - - TableDesc->Pointer = AcpiGbl_RootTableList.Tables[i].Pointer; - TableDesc->Address = AcpiGbl_RootTableList.Tables[i].Address; - Status = AE_OK; - goto PrintHeader; - } - } - - /* - * ACPI Table Override: - * Allow the host to override dynamically loaded tables. - */ - Status = AcpiOsTableOverride (TableDesc->Pointer, &OverrideTable); - if (ACPI_SUCCESS (Status) && OverrideTable) - { - ACPI_INFO ((AE_INFO, - "%4.4s @ 0x%p Table override, replaced with:", - TableDesc->Pointer->Signature, - ACPI_CAST_PTR (void, TableDesc->Address))); - - /* We can delete the table that was passed as a parameter */ - - AcpiTbDeleteTable (TableDesc); - - /* Setup descriptor for the new table */ - - TableDesc->Address = ACPI_PTR_TO_PHYSADDR (OverrideTable); - TableDesc->Pointer = OverrideTable; - TableDesc->Length = OverrideTable->Length; - TableDesc->Flags = ACPI_TABLE_ORIGIN_OVERRIDE; - } - - /* Add the table to the global root table list */ - - Status = AcpiTbStoreTable (TableDesc->Address, TableDesc->Pointer, - TableDesc->Length, TableDesc->Flags, TableIndex); - if (ACPI_FAILURE (Status)) - { - goto Release; - } - -PrintHeader: - AcpiTbPrintTableHeader (TableDesc->Address, TableDesc->Pointer); - -Release: - (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbResizeRootTableList - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Expand the size of global table array - * - ******************************************************************************/ - -ACPI_STATUS -AcpiTbResizeRootTableList ( - void) -{ - ACPI_TABLE_DESC *Tables; - - - ACPI_FUNCTION_TRACE (TbResizeRootTableList); - - - /* AllowResize flag is a parameter to AcpiInitializeTables */ - - if (!(AcpiGbl_RootTableList.Flags & ACPI_ROOT_ALLOW_RESIZE)) - { - ACPI_ERROR ((AE_INFO, "Resize of Root Table Array is not allowed")); - return_ACPI_STATUS (AE_SUPPORT); - } - - /* Increase the Table Array size */ - - Tables = ACPI_ALLOCATE_ZEROED ( - ((ACPI_SIZE) AcpiGbl_RootTableList.Size + - ACPI_ROOT_TABLE_SIZE_INCREMENT) * - sizeof (ACPI_TABLE_DESC)); - if (!Tables) - { - ACPI_ERROR ((AE_INFO, "Could not allocate new root table array")); - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Copy and free the previous table array */ - - if (AcpiGbl_RootTableList.Tables) - { - ACPI_MEMCPY (Tables, AcpiGbl_RootTableList.Tables, - (ACPI_SIZE) AcpiGbl_RootTableList.Size * sizeof (ACPI_TABLE_DESC)); - - if (AcpiGbl_RootTableList.Flags & ACPI_ROOT_ORIGIN_ALLOCATED) - { - ACPI_FREE (AcpiGbl_RootTableList.Tables); - } - } - - AcpiGbl_RootTableList.Tables = Tables; - AcpiGbl_RootTableList.Size += ACPI_ROOT_TABLE_SIZE_INCREMENT; - AcpiGbl_RootTableList.Flags |= (UINT8) ACPI_ROOT_ORIGIN_ALLOCATED; - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbStoreTable - * - * PARAMETERS: Address - Table address - * Table - Table header - * Length - Table length - * Flags - flags - * - * RETURN: Status and table index. - * - * DESCRIPTION: Add an ACPI table to the global table list - * - ******************************************************************************/ - -ACPI_STATUS -AcpiTbStoreTable ( - ACPI_PHYSICAL_ADDRESS Address, - ACPI_TABLE_HEADER *Table, - UINT32 Length, - UINT8 Flags, - UINT32 *TableIndex) -{ - ACPI_STATUS Status = AE_OK; - - - /* Ensure that there is room for the table in the Root Table List */ - - if (AcpiGbl_RootTableList.Count >= AcpiGbl_RootTableList.Size) - { - Status = AcpiTbResizeRootTableList(); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - - /* Initialize added table */ - - AcpiGbl_RootTableList.Tables[AcpiGbl_RootTableList.Count].Address = Address; - AcpiGbl_RootTableList.Tables[AcpiGbl_RootTableList.Count].Pointer = Table; - AcpiGbl_RootTableList.Tables[AcpiGbl_RootTableList.Count].Length = Length; - AcpiGbl_RootTableList.Tables[AcpiGbl_RootTableList.Count].OwnerId = 0; - AcpiGbl_RootTableList.Tables[AcpiGbl_RootTableList.Count].Flags = Flags; - - ACPI_MOVE_32_TO_32 ( - &(AcpiGbl_RootTableList.Tables[AcpiGbl_RootTableList.Count].Signature), - Table->Signature); - - *TableIndex = AcpiGbl_RootTableList.Count; - AcpiGbl_RootTableList.Count++; - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbDeleteTable - * - * PARAMETERS: TableIndex - Table index - * - * RETURN: None - * - * DESCRIPTION: Delete one internal ACPI table - * - ******************************************************************************/ - -void -AcpiTbDeleteTable ( - ACPI_TABLE_DESC *TableDesc) -{ - - /* Table must be mapped or allocated */ - - if (!TableDesc->Pointer) - { - return; - } - - switch (TableDesc->Flags & ACPI_TABLE_ORIGIN_MASK) - { - case ACPI_TABLE_ORIGIN_MAPPED: - AcpiOsUnmapMemory (TableDesc->Pointer, TableDesc->Length); - break; - - case ACPI_TABLE_ORIGIN_ALLOCATED: - ACPI_FREE (TableDesc->Pointer); - break; - - default: - break; - } - - TableDesc->Pointer = NULL; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbTerminate - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Delete all internal ACPI tables - * - ******************************************************************************/ - -void -AcpiTbTerminate ( - void) -{ - UINT32 i; - - - ACPI_FUNCTION_TRACE (TbTerminate); - - - (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); - - /* Delete the individual tables */ - - for (i = 0; i < AcpiGbl_RootTableList.Count; i++) - { - AcpiTbDeleteTable (&AcpiGbl_RootTableList.Tables[i]); - } - - /* - * Delete the root table array if allocated locally. Array cannot be - * mapped, so we don't need to check for that flag. - */ - if (AcpiGbl_RootTableList.Flags & ACPI_ROOT_ORIGIN_ALLOCATED) - { - ACPI_FREE (AcpiGbl_RootTableList.Tables); - } - - AcpiGbl_RootTableList.Tables = NULL; - AcpiGbl_RootTableList.Flags = 0; - AcpiGbl_RootTableList.Count = 0; - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "ACPI Tables freed\n")); - (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbDeleteNamespaceByOwner - * - * PARAMETERS: TableIndex - Table index - * - * RETURN: Status - * - * DESCRIPTION: Delete all namespace objects created when this table was loaded. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiTbDeleteNamespaceByOwner ( - UINT32 TableIndex) -{ - ACPI_OWNER_ID OwnerId; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (TbDeleteNamespaceByOwner); - - - Status = AcpiUtAcquireMutex (ACPI_MTX_TABLES); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - if (TableIndex >= AcpiGbl_RootTableList.Count) - { - /* The table index does not exist */ - - (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); - return_ACPI_STATUS (AE_NOT_EXIST); - } - - /* Get the owner ID for this table, used to delete namespace nodes */ - - OwnerId = AcpiGbl_RootTableList.Tables[TableIndex].OwnerId; - (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); - - /* - * Need to acquire the namespace writer lock to prevent interference - * with any concurrent namespace walks. The interpreter must be - * released during the deletion since the acquisition of the deletion - * lock may block, and also since the execution of a namespace walk - * must be allowed to use the interpreter. - */ - (void) AcpiUtReleaseMutex (ACPI_MTX_INTERPRETER); - Status = AcpiUtAcquireWriteLock (&AcpiGbl_NamespaceRwLock); - - AcpiNsDeleteNamespaceByOwner (OwnerId); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - AcpiUtReleaseWriteLock (&AcpiGbl_NamespaceRwLock); - - Status = AcpiUtAcquireMutex (ACPI_MTX_INTERPRETER); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbAllocateOwnerId - * - * PARAMETERS: TableIndex - Table index - * - * RETURN: Status - * - * DESCRIPTION: Allocates OwnerId in TableDesc - * - ******************************************************************************/ - -ACPI_STATUS -AcpiTbAllocateOwnerId ( - UINT32 TableIndex) -{ - ACPI_STATUS Status = AE_BAD_PARAMETER; - - - ACPI_FUNCTION_TRACE (TbAllocateOwnerId); - - - (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); - if (TableIndex < AcpiGbl_RootTableList.Count) - { - Status = AcpiUtAllocateOwnerId - (&(AcpiGbl_RootTableList.Tables[TableIndex].OwnerId)); - } - - (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbReleaseOwnerId - * - * PARAMETERS: TableIndex - Table index - * - * RETURN: Status - * - * DESCRIPTION: Releases OwnerId in TableDesc - * - ******************************************************************************/ - -ACPI_STATUS -AcpiTbReleaseOwnerId ( - UINT32 TableIndex) -{ - ACPI_STATUS Status = AE_BAD_PARAMETER; - - - ACPI_FUNCTION_TRACE (TbReleaseOwnerId); - - - (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); - if (TableIndex < AcpiGbl_RootTableList.Count) - { - AcpiUtReleaseOwnerId ( - &(AcpiGbl_RootTableList.Tables[TableIndex].OwnerId)); - Status = AE_OK; - } - - (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbGetOwnerId - * - * PARAMETERS: TableIndex - Table index - * OwnerId - Where the table OwnerId is returned - * - * RETURN: Status - * - * DESCRIPTION: returns OwnerId for the ACPI table - * - ******************************************************************************/ - -ACPI_STATUS -AcpiTbGetOwnerId ( - UINT32 TableIndex, - ACPI_OWNER_ID *OwnerId) -{ - ACPI_STATUS Status = AE_BAD_PARAMETER; - - - ACPI_FUNCTION_TRACE (TbGetOwnerId); - - - (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); - if (TableIndex < AcpiGbl_RootTableList.Count) - { - *OwnerId = AcpiGbl_RootTableList.Tables[TableIndex].OwnerId; - Status = AE_OK; - } - - (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbIsTableLoaded - * - * PARAMETERS: TableIndex - Table index - * - * RETURN: Table Loaded Flag - * - ******************************************************************************/ - -BOOLEAN -AcpiTbIsTableLoaded ( - UINT32 TableIndex) -{ - BOOLEAN IsLoaded = FALSE; - - - (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); - if (TableIndex < AcpiGbl_RootTableList.Count) - { - IsLoaded = (BOOLEAN) - (AcpiGbl_RootTableList.Tables[TableIndex].Flags & - ACPI_TABLE_IS_LOADED); - } - - (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); - return (IsLoaded); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbSetTableLoadedFlag - * - * PARAMETERS: TableIndex - Table index - * IsLoaded - TRUE if table is loaded, FALSE otherwise - * - * RETURN: None - * - * DESCRIPTION: Sets the table loaded flag to either TRUE or FALSE. - * - ******************************************************************************/ - -void -AcpiTbSetTableLoadedFlag ( - UINT32 TableIndex, - BOOLEAN IsLoaded) -{ - - (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); - if (TableIndex < AcpiGbl_RootTableList.Count) - { - if (IsLoaded) - { - AcpiGbl_RootTableList.Tables[TableIndex].Flags |= - ACPI_TABLE_IS_LOADED; - } - else - { - AcpiGbl_RootTableList.Tables[TableIndex].Flags &= - ~ACPI_TABLE_IS_LOADED; - } - } - - (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbutils.c b/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbutils.c deleted file mode 100644 index ec2a88e28..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbutils.c +++ /dev/null @@ -1,741 +0,0 @@ -/****************************************************************************** - * - * Module Name: tbutils - table utilities - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __TBUTILS_C__ - -#include "acpi.h" -#include "accommon.h" -#include "actables.h" - -#define _COMPONENT ACPI_TABLES - ACPI_MODULE_NAME ("tbutils") - -/* Local prototypes */ - -static void -AcpiTbFixString ( - char *String, - ACPI_SIZE Length); - -static void -AcpiTbCleanupTableHeader ( - ACPI_TABLE_HEADER *OutHeader, - ACPI_TABLE_HEADER *Header); - -static ACPI_PHYSICAL_ADDRESS -AcpiTbGetRootTableEntry ( - UINT8 *TableEntry, - UINT32 TableEntrySize); - - -/******************************************************************************* - * - * FUNCTION: AcpiTbInitializeFacs - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Create a permanent mapping for the FADT and save it in a global - * for accessing the Global Lock and Firmware Waking Vector - * - ******************************************************************************/ - -ACPI_STATUS -AcpiTbInitializeFacs ( - void) -{ - ACPI_STATUS Status; - - - Status = AcpiGetTableByIndex (ACPI_TABLE_INDEX_FACS, - ACPI_CAST_INDIRECT_PTR (ACPI_TABLE_HEADER, &AcpiGbl_FACS)); - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbTablesLoaded - * - * PARAMETERS: None - * - * RETURN: TRUE if required ACPI tables are loaded - * - * DESCRIPTION: Determine if the minimum required ACPI tables are present - * (FADT, FACS, DSDT) - * - ******************************************************************************/ - -BOOLEAN -AcpiTbTablesLoaded ( - void) -{ - - if (AcpiGbl_RootTableList.Count >= 3) - { - return (TRUE); - } - - return (FALSE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbFixString - * - * PARAMETERS: String - String to be repaired - * Length - Maximum length - * - * RETURN: None - * - * DESCRIPTION: Replace every non-printable or non-ascii byte in the string - * with a question mark '?'. - * - ******************************************************************************/ - -static void -AcpiTbFixString ( - char *String, - ACPI_SIZE Length) -{ - - while (Length && *String) - { - if (!ACPI_IS_PRINT (*String)) - { - *String = '?'; - } - String++; - Length--; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbCleanupTableHeader - * - * PARAMETERS: OutHeader - Where the cleaned header is returned - * Header - Input ACPI table header - * - * RETURN: Returns the cleaned header in OutHeader - * - * DESCRIPTION: Copy the table header and ensure that all "string" fields in - * the header consist of printable characters. - * - ******************************************************************************/ - -static void -AcpiTbCleanupTableHeader ( - ACPI_TABLE_HEADER *OutHeader, - ACPI_TABLE_HEADER *Header) -{ - - ACPI_MEMCPY (OutHeader, Header, sizeof (ACPI_TABLE_HEADER)); - - AcpiTbFixString (OutHeader->Signature, ACPI_NAME_SIZE); - AcpiTbFixString (OutHeader->OemId, ACPI_OEM_ID_SIZE); - AcpiTbFixString (OutHeader->OemTableId, ACPI_OEM_TABLE_ID_SIZE); - AcpiTbFixString (OutHeader->AslCompilerId, ACPI_NAME_SIZE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbPrintTableHeader - * - * PARAMETERS: Address - Table physical address - * Header - Table header - * - * RETURN: None - * - * DESCRIPTION: Print an ACPI table header. Special cases for FACS and RSDP. - * - ******************************************************************************/ - -void -AcpiTbPrintTableHeader ( - ACPI_PHYSICAL_ADDRESS Address, - ACPI_TABLE_HEADER *Header) -{ - ACPI_TABLE_HEADER LocalHeader; - - - /* - * The reason that the Address is cast to a void pointer is so that we - * can use %p which will work properly on both 32-bit and 64-bit hosts. - */ - if (ACPI_COMPARE_NAME (Header->Signature, ACPI_SIG_FACS)) - { - /* FACS only has signature and length fields */ - - ACPI_INFO ((AE_INFO, "%4.4s %p %05X", - Header->Signature, ACPI_CAST_PTR (void, Address), - Header->Length)); - } - else if (ACPI_COMPARE_NAME (Header->Signature, ACPI_SIG_RSDP)) - { - /* RSDP has no common fields */ - - ACPI_MEMCPY (LocalHeader.OemId, - ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->OemId, ACPI_OEM_ID_SIZE); - AcpiTbFixString (LocalHeader.OemId, ACPI_OEM_ID_SIZE); - - ACPI_INFO ((AE_INFO, "RSDP %p %05X (v%.2d %6.6s)", - ACPI_CAST_PTR (void, Address), - (ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->Revision > 0) ? - ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->Length : 20, - ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->Revision, - LocalHeader.OemId)); - } - else - { - /* Standard ACPI table with full common header */ - - AcpiTbCleanupTableHeader (&LocalHeader, Header); - - ACPI_INFO ((AE_INFO, - "%4.4s %p %05X (v%.2d %6.6s %8.8s %08X %4.4s %08X)", - LocalHeader.Signature, ACPI_CAST_PTR (void, Address), - LocalHeader.Length, LocalHeader.Revision, LocalHeader.OemId, - LocalHeader.OemTableId, LocalHeader.OemRevision, - LocalHeader.AslCompilerId, LocalHeader.AslCompilerRevision)); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbValidateChecksum - * - * PARAMETERS: Table - ACPI table to verify - * Length - Length of entire table - * - * RETURN: Status - * - * DESCRIPTION: Verifies that the table checksums to zero. Optionally returns - * exception on bad checksum. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiTbVerifyChecksum ( - ACPI_TABLE_HEADER *Table, - UINT32 Length) -{ - UINT8 Checksum; - - - /* Compute the checksum on the table */ - - Checksum = AcpiTbChecksum (ACPI_CAST_PTR (UINT8, Table), Length); - - /* Checksum ok? (should be zero) */ - - if (Checksum) - { - ACPI_WARNING ((AE_INFO, - "Incorrect checksum in table [%4.4s] - %2.2X, should be %2.2X", - Table->Signature, Table->Checksum, - (UINT8) (Table->Checksum - Checksum))); - -#if (ACPI_CHECKSUM_ABORT) - return (AE_BAD_CHECKSUM); -#endif - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbChecksum - * - * PARAMETERS: Buffer - Pointer to memory region to be checked - * Length - Length of this memory region - * - * RETURN: Checksum (UINT8) - * - * DESCRIPTION: Calculates circular checksum of memory region. - * - ******************************************************************************/ - -UINT8 -AcpiTbChecksum ( - UINT8 *Buffer, - UINT32 Length) -{ - UINT8 Sum = 0; - UINT8 *End = Buffer + Length; - - - while (Buffer < End) - { - Sum = (UINT8) (Sum + *(Buffer++)); - } - - return Sum; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbInstallTable - * - * PARAMETERS: Address - Physical address of DSDT or FACS - * Signature - Table signature, NULL if no need to - * match - * TableIndex - Index into root table array - * - * RETURN: None - * - * DESCRIPTION: Install an ACPI table into the global data structure. The - * table override mechanism is implemented here to allow the host - * OS to replace any table before it is installed in the root - * table array. - * - ******************************************************************************/ - -void -AcpiTbInstallTable ( - ACPI_PHYSICAL_ADDRESS Address, - char *Signature, - UINT32 TableIndex) -{ - UINT8 Flags; - ACPI_STATUS Status; - ACPI_TABLE_HEADER *TableToInstall; - ACPI_TABLE_HEADER *MappedTable; - ACPI_TABLE_HEADER *OverrideTable = NULL; - - - if (!Address) - { - ACPI_ERROR ((AE_INFO, "Null physical address for ACPI table [%s]", - Signature)); - return; - } - - /* Map just the table header */ - - MappedTable = AcpiOsMapMemory (Address, sizeof (ACPI_TABLE_HEADER)); - if (!MappedTable) - { - return; - } - - /* If a particular signature is expected (DSDT/FACS), it must match */ - - if (Signature && - !ACPI_COMPARE_NAME (MappedTable->Signature, Signature)) - { - ACPI_ERROR ((AE_INFO, - "Invalid signature 0x%X for ACPI table, expected [%s]", - *ACPI_CAST_PTR (UINT32, MappedTable->Signature), Signature)); - goto UnmapAndExit; - } - - /* - * ACPI Table Override: - * - * Before we install the table, let the host OS override it with a new - * one if desired. Any table within the RSDT/XSDT can be replaced, - * including the DSDT which is pointed to by the FADT. - */ - Status = AcpiOsTableOverride (MappedTable, &OverrideTable); - if (ACPI_SUCCESS (Status) && OverrideTable) - { - ACPI_INFO ((AE_INFO, - "%4.4s @ 0x%p Table override, replaced with:", - MappedTable->Signature, ACPI_CAST_PTR (void, Address))); - - AcpiGbl_RootTableList.Tables[TableIndex].Pointer = OverrideTable; - Address = ACPI_PTR_TO_PHYSADDR (OverrideTable); - - TableToInstall = OverrideTable; - Flags = ACPI_TABLE_ORIGIN_OVERRIDE; - } - else - { - TableToInstall = MappedTable; - Flags = ACPI_TABLE_ORIGIN_MAPPED; - } - - /* Initialize the table entry */ - - AcpiGbl_RootTableList.Tables[TableIndex].Address = Address; - AcpiGbl_RootTableList.Tables[TableIndex].Length = TableToInstall->Length; - AcpiGbl_RootTableList.Tables[TableIndex].Flags = Flags; - - ACPI_MOVE_32_TO_32 ( - &(AcpiGbl_RootTableList.Tables[TableIndex].Signature), - TableToInstall->Signature); - - AcpiTbPrintTableHeader (Address, TableToInstall); - - if (TableIndex == ACPI_TABLE_INDEX_DSDT) - { - /* Global integer width is based upon revision of the DSDT */ - - AcpiUtSetIntegerWidth (TableToInstall->Revision); - } - -UnmapAndExit: - AcpiOsUnmapMemory (MappedTable, sizeof (ACPI_TABLE_HEADER)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbGetRootTableEntry - * - * PARAMETERS: TableEntry - Pointer to the RSDT/XSDT table entry - * TableEntrySize - sizeof 32 or 64 (RSDT or XSDT) - * - * RETURN: Physical address extracted from the root table - * - * DESCRIPTION: Get one root table entry. Handles 32-bit and 64-bit cases on - * both 32-bit and 64-bit platforms - * - * NOTE: ACPI_PHYSICAL_ADDRESS is 32-bit on 32-bit platforms, 64-bit on - * 64-bit platforms. - * - ******************************************************************************/ - -static ACPI_PHYSICAL_ADDRESS -AcpiTbGetRootTableEntry ( - UINT8 *TableEntry, - UINT32 TableEntrySize) -{ - UINT64 Address64; - - - /* - * Get the table physical address (32-bit for RSDT, 64-bit for XSDT): - * Note: Addresses are 32-bit aligned (not 64) in both RSDT and XSDT - */ - if (TableEntrySize == sizeof (UINT32)) - { - /* - * 32-bit platform, RSDT: Return 32-bit table entry - * 64-bit platform, RSDT: Expand 32-bit to 64-bit and return - */ - return ((ACPI_PHYSICAL_ADDRESS) (*ACPI_CAST_PTR (UINT32, TableEntry))); - } - else - { - /* - * 32-bit platform, XSDT: Truncate 64-bit to 32-bit and return - * 64-bit platform, XSDT: Move (unaligned) 64-bit to local, - * return 64-bit - */ - ACPI_MOVE_64_TO_64 (&Address64, TableEntry); - -#if ACPI_MACHINE_WIDTH == 32 - if (Address64 > ACPI_UINT32_MAX) - { - /* Will truncate 64-bit address to 32 bits, issue warning */ - - ACPI_WARNING ((AE_INFO, - "64-bit Physical Address in XSDT is too large (%8.8X%8.8X)," - " truncating", - ACPI_FORMAT_UINT64 (Address64))); - } -#endif - return ((ACPI_PHYSICAL_ADDRESS) (Address64)); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiTbParseRootTable - * - * PARAMETERS: Rsdp - Pointer to the RSDP - * - * RETURN: Status - * - * DESCRIPTION: This function is called to parse the Root System Description - * Table (RSDT or XSDT) - * - * NOTE: Tables are mapped (not copied) for efficiency. The FACS must - * be mapped and cannot be copied because it contains the actual - * memory location of the ACPI Global Lock. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiTbParseRootTable ( - ACPI_PHYSICAL_ADDRESS RsdpAddress) -{ - ACPI_TABLE_RSDP *Rsdp; - UINT32 TableEntrySize; - UINT32 i; - UINT32 TableCount; - ACPI_TABLE_HEADER *Table; - ACPI_PHYSICAL_ADDRESS Address; - UINT32 Length; - UINT8 *TableEntry; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (TbParseRootTable); - - - /* - * Map the entire RSDP and extract the address of the RSDT or XSDT - */ - Rsdp = AcpiOsMapMemory (RsdpAddress, sizeof (ACPI_TABLE_RSDP)); - if (!Rsdp) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - AcpiTbPrintTableHeader (RsdpAddress, - ACPI_CAST_PTR (ACPI_TABLE_HEADER, Rsdp)); - - /* Differentiate between RSDT and XSDT root tables */ - - if (Rsdp->Revision > 1 && Rsdp->XsdtPhysicalAddress) - { - /* - * Root table is an XSDT (64-bit physical addresses). We must use the - * XSDT if the revision is > 1 and the XSDT pointer is present, as per - * the ACPI specification. - */ - Address = (ACPI_PHYSICAL_ADDRESS) Rsdp->XsdtPhysicalAddress; - TableEntrySize = sizeof (UINT64); - } - else - { - /* Root table is an RSDT (32-bit physical addresses) */ - - Address = (ACPI_PHYSICAL_ADDRESS) Rsdp->RsdtPhysicalAddress; - TableEntrySize = sizeof (UINT32); - } - - /* - * It is not possible to map more than one entry in some environments, - * so unmap the RSDP here before mapping other tables - */ - AcpiOsUnmapMemory (Rsdp, sizeof (ACPI_TABLE_RSDP)); - - - /* Map the RSDT/XSDT table header to get the full table length */ - - Table = AcpiOsMapMemory (Address, sizeof (ACPI_TABLE_HEADER)); - if (!Table) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - AcpiTbPrintTableHeader (Address, Table); - - /* Get the length of the full table, verify length and map entire table */ - - Length = Table->Length; - AcpiOsUnmapMemory (Table, sizeof (ACPI_TABLE_HEADER)); - - if (Length < sizeof (ACPI_TABLE_HEADER)) - { - ACPI_ERROR ((AE_INFO, "Invalid length 0x%X in RSDT/XSDT", Length)); - return_ACPI_STATUS (AE_INVALID_TABLE_LENGTH); - } - - Table = AcpiOsMapMemory (Address, Length); - if (!Table) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Validate the root table checksum */ - - Status = AcpiTbVerifyChecksum (Table, Length); - if (ACPI_FAILURE (Status)) - { - AcpiOsUnmapMemory (Table, Length); - return_ACPI_STATUS (Status); - } - - /* Calculate the number of tables described in the root table */ - - TableCount = (UINT32) ((Table->Length - sizeof (ACPI_TABLE_HEADER)) / - TableEntrySize); - - /* - * First two entries in the table array are reserved for the DSDT - * and FACS, which are not actually present in the RSDT/XSDT - they - * come from the FADT - */ - TableEntry = ACPI_CAST_PTR (UINT8, Table) + sizeof (ACPI_TABLE_HEADER); - AcpiGbl_RootTableList.Count = 2; - - /* - * Initialize the root table array from the RSDT/XSDT - */ - for (i = 0; i < TableCount; i++) - { - if (AcpiGbl_RootTableList.Count >= AcpiGbl_RootTableList.Size) - { - /* There is no more room in the root table array, attempt resize */ - - Status = AcpiTbResizeRootTableList (); - if (ACPI_FAILURE (Status)) - { - ACPI_WARNING ((AE_INFO, "Truncating %u table entries!", - (unsigned) (TableCount - - (AcpiGbl_RootTableList.Count - 2)))); - break; - } - } - - /* Get the table physical address (32-bit for RSDT, 64-bit for XSDT) */ - - AcpiGbl_RootTableList.Tables[AcpiGbl_RootTableList.Count].Address = - AcpiTbGetRootTableEntry (TableEntry, TableEntrySize); - - TableEntry += TableEntrySize; - AcpiGbl_RootTableList.Count++; - } - - /* - * It is not possible to map more than one entry in some environments, - * so unmap the root table here before mapping other tables - */ - AcpiOsUnmapMemory (Table, Length); - - /* - * Complete the initialization of the root table array by examining - * the header of each table - */ - for (i = 2; i < AcpiGbl_RootTableList.Count; i++) - { - AcpiTbInstallTable (AcpiGbl_RootTableList.Tables[i].Address, - NULL, i); - - /* Special case for FADT - get the DSDT and FACS */ - - if (ACPI_COMPARE_NAME ( - &AcpiGbl_RootTableList.Tables[i].Signature, ACPI_SIG_FADT)) - { - AcpiTbParseFadt (i); - } - } - - return_ACPI_STATUS (AE_OK); -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbxface.c b/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbxface.c deleted file mode 100644 index 4c12916c5..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbxface.c +++ /dev/null @@ -1,750 +0,0 @@ -/****************************************************************************** - * - * Module Name: tbxface - Public interfaces to the ACPI subsystem - * ACPI table oriented interfaces - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __TBXFACE_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "actables.h" - -#define _COMPONENT ACPI_TABLES - ACPI_MODULE_NAME ("tbxface") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiTbLoadNamespace ( - void); - - -/******************************************************************************* - * - * FUNCTION: AcpiAllocateRootTable - * - * PARAMETERS: InitialTableCount - Size of InitialTableArray, in number of - * ACPI_TABLE_DESC structures - * - * RETURN: Status - * - * DESCRIPTION: Allocate a root table array. Used by iASL compiler and - * AcpiInitializeTables. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiAllocateRootTable ( - UINT32 InitialTableCount) -{ - - AcpiGbl_RootTableList.Size = InitialTableCount; - AcpiGbl_RootTableList.Flags = ACPI_ROOT_ALLOW_RESIZE; - - return (AcpiTbResizeRootTableList ()); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiInitializeTables - * - * PARAMETERS: InitialTableArray - Pointer to an array of pre-allocated - * ACPI_TABLE_DESC structures. If NULL, the - * array is dynamically allocated. - * InitialTableCount - Size of InitialTableArray, in number of - * ACPI_TABLE_DESC structures - * AllowRealloc - Flag to tell Table Manager if resize of - * pre-allocated array is allowed. Ignored - * if InitialTableArray is NULL. - * - * RETURN: Status - * - * DESCRIPTION: Initialize the table manager, get the RSDP and RSDT/XSDT. - * - * NOTE: Allows static allocation of the initial table array in order - * to avoid the use of dynamic memory in confined environments - * such as the kernel boot sequence where it may not be available. - * - * If the host OS memory managers are initialized, use NULL for - * InitialTableArray, and the table will be dynamically allocated. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiInitializeTables ( - ACPI_TABLE_DESC *InitialTableArray, - UINT32 InitialTableCount, - BOOLEAN AllowResize) -{ - ACPI_PHYSICAL_ADDRESS RsdpAddress; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiInitializeTables); - - - /* - * Set up the Root Table Array - * Allocate the table array if requested - */ - if (!InitialTableArray) - { - Status = AcpiAllocateRootTable (InitialTableCount); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - else - { - /* Root Table Array has been statically allocated by the host */ - - ACPI_MEMSET (InitialTableArray, 0, - (ACPI_SIZE) InitialTableCount * sizeof (ACPI_TABLE_DESC)); - - AcpiGbl_RootTableList.Tables = InitialTableArray; - AcpiGbl_RootTableList.Size = InitialTableCount; - AcpiGbl_RootTableList.Flags = ACPI_ROOT_ORIGIN_UNKNOWN; - if (AllowResize) - { - AcpiGbl_RootTableList.Flags |= ACPI_ROOT_ALLOW_RESIZE; - } - } - - /* Get the address of the RSDP */ - - RsdpAddress = AcpiOsGetRootPointer (); - if (!RsdpAddress) - { - return_ACPI_STATUS (AE_NOT_FOUND); - } - - /* - * Get the root table (RSDT or XSDT) and extract all entries to the local - * Root Table Array. This array contains the information of the RSDT/XSDT - * in a common, more useable format. - */ - Status = AcpiTbParseRootTable (RsdpAddress); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiInitializeTables) - - -/******************************************************************************* - * - * FUNCTION: AcpiReallocateRootTable - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Reallocate Root Table List into dynamic memory. Copies the - * root list from the previously provided scratch area. Should - * be called once dynamic memory allocation is available in the - * kernel - * - ******************************************************************************/ - -ACPI_STATUS -AcpiReallocateRootTable ( - void) -{ - ACPI_TABLE_DESC *Tables; - ACPI_SIZE NewSize; - - - ACPI_FUNCTION_TRACE (AcpiReallocateRootTable); - - - /* - * Only reallocate the root table if the host provided a static buffer - * for the table array in the call to AcpiInitializeTables. - */ - if (AcpiGbl_RootTableList.Flags & ACPI_ROOT_ORIGIN_ALLOCATED) - { - return_ACPI_STATUS (AE_SUPPORT); - } - - NewSize = ((ACPI_SIZE) AcpiGbl_RootTableList.Count + - ACPI_ROOT_TABLE_SIZE_INCREMENT) * - sizeof (ACPI_TABLE_DESC); - - /* Create new array and copy the old array */ - - Tables = ACPI_ALLOCATE_ZEROED (NewSize); - if (!Tables) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - ACPI_MEMCPY (Tables, AcpiGbl_RootTableList.Tables, NewSize); - - AcpiGbl_RootTableList.Size = AcpiGbl_RootTableList.Count; - AcpiGbl_RootTableList.Tables = Tables; - AcpiGbl_RootTableList.Flags = - ACPI_ROOT_ORIGIN_ALLOCATED | ACPI_ROOT_ALLOW_RESIZE; - - return_ACPI_STATUS (AE_OK); -} - -ACPI_EXPORT_SYMBOL (AcpiReallocateRootTable) - - -/******************************************************************************* - * - * FUNCTION: AcpiGetTableHeader - * - * PARAMETERS: Signature - ACPI signature of needed table - * Instance - Which instance (for SSDTs) - * OutTableHeader - The pointer to the table header to fill - * - * RETURN: Status and pointer to mapped table header - * - * DESCRIPTION: Finds an ACPI table header. - * - * NOTE: Caller is responsible in unmapping the header with - * AcpiOsUnmapMemory - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetTableHeader ( - char *Signature, - UINT32 Instance, - ACPI_TABLE_HEADER *OutTableHeader) -{ - UINT32 i; - UINT32 j; - ACPI_TABLE_HEADER *Header; - - - /* Parameter validation */ - - if (!Signature || !OutTableHeader) - { - return (AE_BAD_PARAMETER); - } - - /* Walk the root table list */ - - for (i = 0, j = 0; i < AcpiGbl_RootTableList.Count; i++) - { - if (!ACPI_COMPARE_NAME (&(AcpiGbl_RootTableList.Tables[i].Signature), - Signature)) - { - continue; - } - - if (++j < Instance) - { - continue; - } - - if (!AcpiGbl_RootTableList.Tables[i].Pointer) - { - if ((AcpiGbl_RootTableList.Tables[i].Flags & - ACPI_TABLE_ORIGIN_MASK) == - ACPI_TABLE_ORIGIN_MAPPED) - { - Header = AcpiOsMapMemory ( - AcpiGbl_RootTableList.Tables[i].Address, - sizeof (ACPI_TABLE_HEADER)); - if (!Header) - { - return AE_NO_MEMORY; - } - - ACPI_MEMCPY (OutTableHeader, Header, sizeof(ACPI_TABLE_HEADER)); - AcpiOsUnmapMemory (Header, sizeof(ACPI_TABLE_HEADER)); - } - else - { - return AE_NOT_FOUND; - } - } - else - { - ACPI_MEMCPY (OutTableHeader, - AcpiGbl_RootTableList.Tables[i].Pointer, - sizeof(ACPI_TABLE_HEADER)); - } - - return (AE_OK); - } - - return (AE_NOT_FOUND); -} - -ACPI_EXPORT_SYMBOL (AcpiGetTableHeader) - - -/******************************************************************************* - * - * FUNCTION: AcpiGetTable - * - * PARAMETERS: Signature - ACPI signature of needed table - * Instance - Which instance (for SSDTs) - * OutTable - Where the pointer to the table is returned - * - * RETURN: Status and pointer to table - * - * DESCRIPTION: Finds and verifies an ACPI table. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetTable ( - char *Signature, - UINT32 Instance, - ACPI_TABLE_HEADER **OutTable) -{ - UINT32 i; - UINT32 j; - ACPI_STATUS Status; - - - /* Parameter validation */ - - if (!Signature || !OutTable) - { - return (AE_BAD_PARAMETER); - } - - /* Walk the root table list */ - - for (i = 0, j = 0; i < AcpiGbl_RootTableList.Count; i++) - { - if (!ACPI_COMPARE_NAME (&(AcpiGbl_RootTableList.Tables[i].Signature), - Signature)) - { - continue; - } - - if (++j < Instance) - { - continue; - } - - Status = AcpiTbVerifyTable (&AcpiGbl_RootTableList.Tables[i]); - if (ACPI_SUCCESS (Status)) - { - *OutTable = AcpiGbl_RootTableList.Tables[i].Pointer; - } - - return (Status); - } - - return (AE_NOT_FOUND); -} - -ACPI_EXPORT_SYMBOL (AcpiGetTable) - - -/******************************************************************************* - * - * FUNCTION: AcpiGetTableByIndex - * - * PARAMETERS: TableIndex - Table index - * Table - Where the pointer to the table is returned - * - * RETURN: Status and pointer to the table - * - * DESCRIPTION: Obtain a table by an index into the global table list. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetTableByIndex ( - UINT32 TableIndex, - ACPI_TABLE_HEADER **Table) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiGetTableByIndex); - - - /* Parameter validation */ - - if (!Table) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); - - /* Validate index */ - - if (TableIndex >= AcpiGbl_RootTableList.Count) - { - (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - if (!AcpiGbl_RootTableList.Tables[TableIndex].Pointer) - { - /* Table is not mapped, map it */ - - Status = AcpiTbVerifyTable (&AcpiGbl_RootTableList.Tables[TableIndex]); - if (ACPI_FAILURE (Status)) - { - (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); - return_ACPI_STATUS (Status); - } - } - - *Table = AcpiGbl_RootTableList.Tables[TableIndex].Pointer; - (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); - return_ACPI_STATUS (AE_OK); -} - -ACPI_EXPORT_SYMBOL (AcpiGetTableByIndex) - - -/******************************************************************************* - * - * FUNCTION: AcpiTbLoadNamespace - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Load the namespace from the DSDT and all SSDTs/PSDTs found in - * the RSDT/XSDT. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiTbLoadNamespace ( - void) -{ - ACPI_STATUS Status; - UINT32 i; - - - ACPI_FUNCTION_TRACE (TbLoadNamespace); - - - (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); - - /* - * Load the namespace. The DSDT is required, but any SSDT and PSDT tables - * are optional. - */ - if (!AcpiGbl_RootTableList.Count || - !ACPI_COMPARE_NAME ( - &(AcpiGbl_RootTableList.Tables[ACPI_TABLE_INDEX_DSDT].Signature), - ACPI_SIG_DSDT) || - ACPI_FAILURE (AcpiTbVerifyTable ( - &AcpiGbl_RootTableList.Tables[ACPI_TABLE_INDEX_DSDT]))) - { - Status = AE_NO_ACPI_TABLES; - goto UnlockAndExit; - } - - /* A valid DSDT is required */ - - Status = AcpiTbVerifyTable ( - &AcpiGbl_RootTableList.Tables[ACPI_TABLE_INDEX_DSDT]); - if (ACPI_FAILURE (Status)) - { - Status = AE_NO_ACPI_TABLES; - goto UnlockAndExit; - } - - (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); - - /* Load and parse tables */ - - Status = AcpiNsLoadTable (ACPI_TABLE_INDEX_DSDT, AcpiGbl_RootNode); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Load any SSDT or PSDT tables. Note: Loop leaves tables locked */ - - (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); - for (i = 0; i < AcpiGbl_RootTableList.Count; ++i) - { - if ((!ACPI_COMPARE_NAME (&(AcpiGbl_RootTableList.Tables[i].Signature), - ACPI_SIG_SSDT) && - !ACPI_COMPARE_NAME (&(AcpiGbl_RootTableList.Tables[i].Signature), - ACPI_SIG_PSDT)) || - ACPI_FAILURE (AcpiTbVerifyTable ( - &AcpiGbl_RootTableList.Tables[i]))) - { - continue; - } - - /* Ignore errors while loading tables, get as many as possible */ - - (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); - (void) AcpiNsLoadTable (i, AcpiGbl_RootNode); - (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); - } - - ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "ACPI Tables successfully acquired\n")); - -UnlockAndExit: - (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiLoadTables - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Load the ACPI tables from the RSDT/XSDT - * - ******************************************************************************/ - -ACPI_STATUS -AcpiLoadTables ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiLoadTables); - - - /* Load the namespace from the tables */ - - Status = AcpiTbLoadNamespace (); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "While loading namespace from ACPI tables")); - } - - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiLoadTables) - - -/******************************************************************************* - * - * FUNCTION: AcpiInstallTableHandler - * - * PARAMETERS: Handler - Table event handler - * Context - Value passed to the handler on each event - * - * RETURN: Status - * - * DESCRIPTION: Install table event handler - * - ******************************************************************************/ - -ACPI_STATUS -AcpiInstallTableHandler ( - ACPI_TABLE_HANDLER Handler, - void *Context) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiInstallTableHandler); - - - if (!Handler) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Don't allow more than one handler */ - - if (AcpiGbl_TableHandler) - { - Status = AE_ALREADY_EXISTS; - goto Cleanup; - } - - /* Install the handler */ - - AcpiGbl_TableHandler = Handler; - AcpiGbl_TableHandlerContext = Context; - -Cleanup: - (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiInstallTableHandler) - - -/******************************************************************************* - * - * FUNCTION: AcpiRemoveTableHandler - * - * PARAMETERS: Handler - Table event handler that was installed - * previously. - * - * RETURN: Status - * - * DESCRIPTION: Remove table event handler - * - ******************************************************************************/ - -ACPI_STATUS -AcpiRemoveTableHandler ( - ACPI_TABLE_HANDLER Handler) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiRemoveTableHandler); - - - Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Make sure that the installed handler is the same */ - - if (!Handler || - Handler != AcpiGbl_TableHandler) - { - Status = AE_BAD_PARAMETER; - goto Cleanup; - } - - /* Remove the handler */ - - AcpiGbl_TableHandler = NULL; - -Cleanup: - (void) AcpiUtReleaseMutex (ACPI_MTX_EVENTS); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiRemoveTableHandler) - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbxfroot.c b/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbxfroot.c deleted file mode 100644 index e0a571f36..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/tables/tbxfroot.c +++ /dev/null @@ -1,371 +0,0 @@ -/****************************************************************************** - * - * Module Name: tbxfroot - Find the root ACPI table (RSDT) - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __TBXFROOT_C__ - -#include "acpi.h" -#include "accommon.h" -#include "actables.h" - - -#define _COMPONENT ACPI_TABLES - ACPI_MODULE_NAME ("tbxfroot") - -/* Local prototypes */ - -static UINT8 * -AcpiTbScanMemoryForRsdp ( - UINT8 *StartAddress, - UINT32 Length); - -static ACPI_STATUS -AcpiTbValidateRsdp ( - ACPI_TABLE_RSDP *Rsdp); - - -/******************************************************************************* - * - * FUNCTION: AcpiTbValidateRsdp - * - * PARAMETERS: Rsdp - Pointer to unvalidated RSDP - * - * RETURN: Status - * - * DESCRIPTION: Validate the RSDP (ptr) - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiTbValidateRsdp ( - ACPI_TABLE_RSDP *Rsdp) -{ - ACPI_FUNCTION_ENTRY (); - - - /* - * The signature and checksum must both be correct - * - * Note: Sometimes there exists more than one RSDP in memory; the valid - * RSDP has a valid checksum, all others have an invalid checksum. - */ - if (ACPI_STRNCMP ((char *) Rsdp, ACPI_SIG_RSDP, - sizeof (ACPI_SIG_RSDP)-1) != 0) - { - /* Nope, BAD Signature */ - - return (AE_BAD_SIGNATURE); - } - - /* Check the standard checksum */ - - if (AcpiTbChecksum ((UINT8 *) Rsdp, ACPI_RSDP_CHECKSUM_LENGTH) != 0) - { - return (AE_BAD_CHECKSUM); - } - - /* Check extended checksum if table version >= 2 */ - - if ((Rsdp->Revision >= 2) && - (AcpiTbChecksum ((UINT8 *) Rsdp, ACPI_RSDP_XCHECKSUM_LENGTH) != 0)) - { - return (AE_BAD_CHECKSUM); - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiFindRootPointer - * - * PARAMETERS: TableAddress - Where the table pointer is returned - * - * RETURN: Status, RSDP physical address - * - * DESCRIPTION: Search lower 1Mbyte of memory for the root system descriptor - * pointer structure. If it is found, set *RSDP to point to it. - * - * NOTE1: The RSDP must be either in the first 1K of the Extended - * BIOS Data Area or between E0000 and FFFFF (From ACPI Spec.) - * Only a 32-bit physical address is necessary. - * - * NOTE2: This function is always available, regardless of the - * initialization state of the rest of ACPI. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiFindRootPointer ( - ACPI_SIZE *TableAddress) -{ - UINT8 *TablePtr; - UINT8 *MemRover; - UINT32 PhysicalAddress; - - - ACPI_FUNCTION_TRACE (AcpiFindRootPointer); - - - /* 1a) Get the location of the Extended BIOS Data Area (EBDA) */ - - TablePtr = AcpiOsMapMemory ( - (ACPI_PHYSICAL_ADDRESS) ACPI_EBDA_PTR_LOCATION, - ACPI_EBDA_PTR_LENGTH); - if (!TablePtr) - { - ACPI_ERROR ((AE_INFO, - "Could not map memory at %8.8X for length %X", - ACPI_EBDA_PTR_LOCATION, ACPI_EBDA_PTR_LENGTH)); - - return_ACPI_STATUS (AE_NO_MEMORY); - } - - ACPI_MOVE_16_TO_32 (&PhysicalAddress, TablePtr); - - /* Convert segment part to physical address */ - - PhysicalAddress <<= 4; - AcpiOsUnmapMemory (TablePtr, ACPI_EBDA_PTR_LENGTH); - - /* EBDA present? */ - - if (PhysicalAddress > 0x400) - { - /* - * 1b) Search EBDA paragraphs (EBDA is required to be a - * minimum of 1K length) - */ - TablePtr = AcpiOsMapMemory ( - (ACPI_PHYSICAL_ADDRESS) PhysicalAddress, - ACPI_EBDA_WINDOW_SIZE); - if (!TablePtr) - { - ACPI_ERROR ((AE_INFO, - "Could not map memory at %8.8X for length %X", - PhysicalAddress, ACPI_EBDA_WINDOW_SIZE)); - - return_ACPI_STATUS (AE_NO_MEMORY); - } - - MemRover = AcpiTbScanMemoryForRsdp (TablePtr, ACPI_EBDA_WINDOW_SIZE); - AcpiOsUnmapMemory (TablePtr, ACPI_EBDA_WINDOW_SIZE); - - if (MemRover) - { - /* Return the physical address */ - - PhysicalAddress += (UINT32) ACPI_PTR_DIFF (MemRover, TablePtr); - - *TableAddress = PhysicalAddress; - return_ACPI_STATUS (AE_OK); - } - } - - /* - * 2) Search upper memory: 16-byte boundaries in E0000h-FFFFFh - */ - TablePtr = AcpiOsMapMemory ( - (ACPI_PHYSICAL_ADDRESS) ACPI_HI_RSDP_WINDOW_BASE, - ACPI_HI_RSDP_WINDOW_SIZE); - - if (!TablePtr) - { - ACPI_ERROR ((AE_INFO, - "Could not map memory at %8.8X for length %X", - ACPI_HI_RSDP_WINDOW_BASE, ACPI_HI_RSDP_WINDOW_SIZE)); - - return_ACPI_STATUS (AE_NO_MEMORY); - } - - MemRover = AcpiTbScanMemoryForRsdp (TablePtr, ACPI_HI_RSDP_WINDOW_SIZE); - AcpiOsUnmapMemory (TablePtr, ACPI_HI_RSDP_WINDOW_SIZE); - - if (MemRover) - { - /* Return the physical address */ - - PhysicalAddress = (UINT32) - (ACPI_HI_RSDP_WINDOW_BASE + ACPI_PTR_DIFF (MemRover, TablePtr)); - - *TableAddress = PhysicalAddress; - return_ACPI_STATUS (AE_OK); - } - - /* A valid RSDP was not found */ - - ACPI_ERROR ((AE_INFO, "A valid RSDP was not found")); - return_ACPI_STATUS (AE_NOT_FOUND); -} - -ACPI_EXPORT_SYMBOL (AcpiFindRootPointer) - - -/******************************************************************************* - * - * FUNCTION: AcpiTbScanMemoryForRsdp - * - * PARAMETERS: StartAddress - Starting pointer for search - * Length - Maximum length to search - * - * RETURN: Pointer to the RSDP if found, otherwise NULL. - * - * DESCRIPTION: Search a block of memory for the RSDP signature - * - ******************************************************************************/ - -static UINT8 * -AcpiTbScanMemoryForRsdp ( - UINT8 *StartAddress, - UINT32 Length) -{ - ACPI_STATUS Status; - UINT8 *MemRover; - UINT8 *EndAddress; - - - ACPI_FUNCTION_TRACE (TbScanMemoryForRsdp); - - - EndAddress = StartAddress + Length; - - /* Search from given start address for the requested length */ - - for (MemRover = StartAddress; MemRover < EndAddress; - MemRover += ACPI_RSDP_SCAN_STEP) - { - /* The RSDP signature and checksum must both be correct */ - - Status = AcpiTbValidateRsdp (ACPI_CAST_PTR (ACPI_TABLE_RSDP, MemRover)); - if (ACPI_SUCCESS (Status)) - { - /* Sig and checksum valid, we have found a real RSDP */ - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "RSDP located at physical address %p\n", MemRover)); - return_PTR (MemRover); - } - - /* No sig match or bad checksum, keep searching */ - } - - /* Searched entire block, no RSDP was found */ - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Searched entire block from %p, valid RSDP was not found\n", - StartAddress)); - return_PTR (NULL); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/tools/acpiexec/Makefile b/l4/pkg/acpica/lib-acpi/src/acpica/tools/acpiexec/Makefile deleted file mode 100644 index 2022bbbf3..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/tools/acpiexec/Makefile +++ /dev/null @@ -1,149 +0,0 @@ -PROG= acpiexec -SRCS= aetables.c aehandlers.c aeexec.c aemain.c \ - ../../common/getopt.c \ - ../../debugger/dbcmds.c \ - ../../debugger/dbdisply.c \ - ../../debugger/dbexec.c \ - ../../debugger/dbfileio.c \ - ../../debugger/dbhistry.c \ - ../../debugger/dbinput.c \ - ../../debugger/dbstats.c \ - ../../debugger/dbutils.c \ - ../../debugger/dbxface.c \ - ../../disassembler/dmbuffer.c \ - ../../disassembler/dmnames.c \ - ../../disassembler/dmobject.c \ - ../../disassembler/dmopcode.c \ - ../../disassembler/dmresrc.c \ - ../../disassembler/dmresrcl.c \ - ../../disassembler/dmresrcs.c \ - ../../disassembler/dmutils.c \ - ../../disassembler/dmwalk.c \ - ../../events/evevent.c \ - ../../events/evgpeblk.c \ - ../../events/evgpe.c \ - ../../events/evmisc.c \ - ../../events/evregion.c \ - ../../events/evrgnini.c \ - ../../events/evsci.c \ - ../../events/evxface.c \ - ../../events/evxfevnt.c \ - ../../events/evxfregn.c \ - ../../hardware/hwacpi.c \ - ../../hardware/hwgpe.c \ - ../../hardware/hwregs.c \ - ../../hardware/hwsleep.c \ - ../../hardware/hwvalid.c \ - ../../hardware/hwxface.c \ - ../../dispatcher/dsfield.c \ - ../../dispatcher/dsinit.c \ - ../../dispatcher/dsmethod.c \ - ../../dispatcher/dsmthdat.c \ - ../../dispatcher/dsobject.c \ - ../../dispatcher/dsopcode.c \ - ../../dispatcher/dsutils.c \ - ../../dispatcher/dswexec.c \ - ../../dispatcher/dswload.c \ - ../../dispatcher/dswscope.c \ - ../../dispatcher/dswstate.c \ - ../../executer/exconfig.c \ - ../../executer/exconvrt.c \ - ../../executer/excreate.c \ - ../../executer/exdump.c \ - ../../executer/exfield.c \ - ../../executer/exfldio.c \ - ../../executer/exmisc.c \ - ../../executer/exmutex.c \ - ../../executer/exnames.c \ - ../../executer/exoparg1.c \ - ../../executer/exoparg2.c \ - ../../executer/exoparg3.c \ - ../../executer/exoparg6.c \ - ../../executer/exprep.c \ - ../../executer/exregion.c \ - ../../executer/exresnte.c \ - ../../executer/exresolv.c \ - ../../executer/exresop.c \ - ../../executer/exstore.c \ - ../../executer/exstoren.c \ - ../../executer/exstorob.c \ - ../../executer/exsystem.c \ - ../../executer/exutils.c \ - ../../parser/psargs.c \ - ../../parser/psloop.c \ - ../../parser/psopcode.c \ - ../../parser/psparse.c \ - ../../parser/psscope.c \ - ../../parser/pstree.c \ - ../../parser/psutils.c \ - ../../parser/pswalk.c \ - ../../parser/psxface.c \ - ../../namespace/nsaccess.c \ - ../../namespace/nsalloc.c \ - ../../namespace/nsdump.c \ - ../../namespace/nsdumpdv.c \ - ../../namespace/nseval.c \ - ../../namespace/nsinit.c \ - ../../namespace/nsload.c \ - ../../namespace/nsnames.c \ - ../../namespace/nsobject.c \ - ../../namespace/nsparse.c \ - ../../namespace/nspredef.c \ - ../../namespace/nsrepair.c \ - ../../namespace/nsrepair2.c \ - ../../namespace/nssearch.c \ - ../../namespace/nsutils.c \ - ../../namespace/nswalk.c \ - ../../namespace/nsxfeval.c \ - ../../namespace/nsxfname.c \ - ../../namespace/nsxfobj.c \ - ../../resources/rsaddr.c \ - ../../resources/rscalc.c \ - ../../resources/rscreate.c \ - ../../resources/rsdump.c \ - ../../resources/rsio.c \ - ../../resources/rsinfo.c \ - ../../resources/rsirq.c \ - ../../resources/rslist.c \ - ../../resources/rsmemory.c \ - ../../resources/rsmisc.c \ - ../../resources/rsutils.c \ - ../../resources/rsxface.c \ - ../../tables/tbfadt.c \ - ../../tables/tbfind.c \ - ../../tables/tbinstal.c \ - ../../tables/tbutils.c \ - ../../tables/tbxface.c \ - ../../tables/tbxfroot.c \ - ../../utilities/utalloc.c \ - ../../utilities/utcache.c \ - ../../utilities/utcopy.c \ - ../../utilities/utdebug.c \ - ../../utilities/utdelete.c \ - ../../utilities/uteval.c \ - ../../utilities/utglobal.c \ - ../../utilities/utids.c \ - ../../utilities/utinit.c \ - ../../utilities/utlock.c \ - ../../utilities/utmath.c \ - ../../utilities/utmisc.c \ - ../../utilities/utmutex.c \ - ../../utilities/utobject.c \ - ../../utilities/utresrc.c \ - ../../utilities/utstate.c \ - ../../utilities/uttrack.c \ - ../../utilities/utxface.c \ - ../../osunixxf.c - - -CFLAGS+= -Wall -g -D_LINUX -DNDEBUG -D_CONSOLE -DACPI_EXEC_APP -D_MULTI_THREADED -Wstrict-prototypes -I../../include - - -acpiexec : $(patsubst %.c,%.o, $(SRCS)) - $(CC) $(LDFLAGS) $(patsubst %.c,%.o, $(SRCS)) -lrt -lpthread -o $(PROG) - -CLEANFILES= $(PROG) - -clean : - rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS)) - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/tools/acpiexec/osunixdir.c b/l4/pkg/acpica/lib-acpi/src/acpica/tools/acpiexec/osunixdir.c deleted file mode 100644 index d9c55a1ef..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/tools/acpiexec/osunixdir.c +++ /dev/null @@ -1,306 +0,0 @@ - -/****************************************************************************** - * - * Module Name: osunixdir - Unix directory access interfaces - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include -#include -#include -#include -#include -#include -#include - -#include "acpisrc.h" - -typedef struct ExternalFindInfo -{ - char *DirPathname; - DIR *DirPtr; - char temp_buffer[128]; - char *WildcardSpec; - char RequestedFileType; - -} EXTERNAL_FIND_INFO; - - -/******************************************************************************* - * - * FUNCTION: AcpiOsOpenDirectory - * - * PARAMETERS: DirPathname - Full pathname to the directory - * WildcardSpec - string of the form "*.c", etc. - * - * RETURN: A directory "handle" to be used in subsequent search operations. - * NULL returned on failure. - * - * DESCRIPTION: Open a directory in preparation for a wildcard search - * - ******************************************************************************/ - -void * -AcpiOsOpenDirectory ( - char *DirPathname, - char *WildcardSpec, - char RequestedFileType) -{ - EXTERNAL_FIND_INFO *ExternalInfo; - DIR *dir; - - - /* Allocate the info struct that will be returned to the caller */ - - ExternalInfo = calloc (sizeof (EXTERNAL_FIND_INFO), 1); - if (!ExternalInfo) - { - return (NULL); - } - - /* Get the directory stream */ - - dir = opendir (DirPathname); - if (!dir) - { - free (ExternalInfo); - return (NULL); - } - - /* Save the info in the return structure */ - - ExternalInfo->WildcardSpec = WildcardSpec; - ExternalInfo->RequestedFileType = RequestedFileType; - ExternalInfo->DirPathname = DirPathname; - ExternalInfo->DirPtr = dir; - return (ExternalInfo); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiOsGetNextFilename - * - * PARAMETERS: DirHandle - Created via AcpiOsOpenDirectory - * - * RETURN: Next filename matched. NULL if no more matches. - * - * DESCRIPTION: Get the next file in the directory that matches the wildcard - * specification. - * - ******************************************************************************/ - -char * -AcpiOsGetNextFilename ( - void *DirHandle) -{ - EXTERNAL_FIND_INFO *ExternalInfo = DirHandle; - struct dirent *dir_entry; - char *temp_str; - int str_len; - struct stat temp_stat; - int err; - - - while ((dir_entry = readdir (ExternalInfo->DirPtr))) - { - if (!fnmatch (ExternalInfo->WildcardSpec, dir_entry->d_name, 0)) - { - if (dir_entry->d_name[0] == '.') - continue; - - str_len = strlen (dir_entry->d_name) + - strlen (ExternalInfo->DirPathname) + 2; - - temp_str = calloc (str_len, 1); - if (!temp_str) - { - printf ("Could not allocate buffer for temporary string\n"); - return NULL; - } - - strcpy (temp_str, ExternalInfo->DirPathname); - strcat (temp_str, "/"); - strcat (temp_str, dir_entry->d_name); - - err = stat (temp_str, &temp_stat); - free (temp_str); - if (err == -1) - { - printf ("stat() error - should not happen\n"); - return NULL; - } - - if ((S_ISDIR (temp_stat.st_mode) - && (ExternalInfo->RequestedFileType == REQUEST_DIR_ONLY)) - || - ((!S_ISDIR (temp_stat.st_mode) - && ExternalInfo->RequestedFileType == REQUEST_FILE_ONLY))) - { - /* copy to a temp buffer because dir_entry struct is on the stack */ - - strcpy (ExternalInfo->temp_buffer, dir_entry->d_name); - return (ExternalInfo->temp_buffer); - } - } - } - - return NULL; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiOsCloseDirectory - * - * PARAMETERS: DirHandle - Created via AcpiOsOpenDirectory - * - * RETURN: None. - * - * DESCRIPTION: Close the open directory and cleanup. - * - ******************************************************************************/ - -void -AcpiOsCloseDirectory ( - void *DirHandle) -{ - EXTERNAL_FIND_INFO *ExternalInfo = DirHandle; - - - /* Close the directory and free allocations */ - - closedir (ExternalInfo->DirPtr); - free (DirHandle); -} - -/* Other functions acpisrc uses but that aren't standard on Unix */ - -/* lowercase a string */ -char* -strlwr ( - char *str) -{ - int length; - int i; - - - length = strlen(str); - - for (i = 0; i < length; i++) - { - str[i] = tolower(str[i]); - } - - return (str); -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/tools/acpisrc/Makefile b/l4/pkg/acpica/lib-acpi/src/acpica/tools/acpisrc/Makefile deleted file mode 100644 index 96816ce12..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/tools/acpisrc/Makefile +++ /dev/null @@ -1,17 +0,0 @@ - - -PROG= acpisrc -SRCS= ascase.c asconvrt.c asfile.c asmain.c asremove.c astable.c \ - asutils.c osunixdir.c ../../common/getopt.c - -CFLAGS+= -Wall -O2 -D_LINUX -DACPI_APPLICATION -Wstrict-prototypes -I../../include - - -aslmain : $(patsubst %.c,%.o, $(SRCS)) - $(CC) $(LDFLAGS) $(patsubst %.c,%.o, $(SRCS)) -o $(PROG) - -CLEANFILES= $(PROG) - -clean : - rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS)) - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/tools/acpisrc/osunixdir.c b/l4/pkg/acpica/lib-acpi/src/acpica/tools/acpisrc/osunixdir.c deleted file mode 100644 index d9c55a1ef..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/tools/acpisrc/osunixdir.c +++ /dev/null @@ -1,306 +0,0 @@ - -/****************************************************************************** - * - * Module Name: osunixdir - Unix directory access interfaces - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#include -#include -#include -#include -#include -#include -#include - -#include "acpisrc.h" - -typedef struct ExternalFindInfo -{ - char *DirPathname; - DIR *DirPtr; - char temp_buffer[128]; - char *WildcardSpec; - char RequestedFileType; - -} EXTERNAL_FIND_INFO; - - -/******************************************************************************* - * - * FUNCTION: AcpiOsOpenDirectory - * - * PARAMETERS: DirPathname - Full pathname to the directory - * WildcardSpec - string of the form "*.c", etc. - * - * RETURN: A directory "handle" to be used in subsequent search operations. - * NULL returned on failure. - * - * DESCRIPTION: Open a directory in preparation for a wildcard search - * - ******************************************************************************/ - -void * -AcpiOsOpenDirectory ( - char *DirPathname, - char *WildcardSpec, - char RequestedFileType) -{ - EXTERNAL_FIND_INFO *ExternalInfo; - DIR *dir; - - - /* Allocate the info struct that will be returned to the caller */ - - ExternalInfo = calloc (sizeof (EXTERNAL_FIND_INFO), 1); - if (!ExternalInfo) - { - return (NULL); - } - - /* Get the directory stream */ - - dir = opendir (DirPathname); - if (!dir) - { - free (ExternalInfo); - return (NULL); - } - - /* Save the info in the return structure */ - - ExternalInfo->WildcardSpec = WildcardSpec; - ExternalInfo->RequestedFileType = RequestedFileType; - ExternalInfo->DirPathname = DirPathname; - ExternalInfo->DirPtr = dir; - return (ExternalInfo); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiOsGetNextFilename - * - * PARAMETERS: DirHandle - Created via AcpiOsOpenDirectory - * - * RETURN: Next filename matched. NULL if no more matches. - * - * DESCRIPTION: Get the next file in the directory that matches the wildcard - * specification. - * - ******************************************************************************/ - -char * -AcpiOsGetNextFilename ( - void *DirHandle) -{ - EXTERNAL_FIND_INFO *ExternalInfo = DirHandle; - struct dirent *dir_entry; - char *temp_str; - int str_len; - struct stat temp_stat; - int err; - - - while ((dir_entry = readdir (ExternalInfo->DirPtr))) - { - if (!fnmatch (ExternalInfo->WildcardSpec, dir_entry->d_name, 0)) - { - if (dir_entry->d_name[0] == '.') - continue; - - str_len = strlen (dir_entry->d_name) + - strlen (ExternalInfo->DirPathname) + 2; - - temp_str = calloc (str_len, 1); - if (!temp_str) - { - printf ("Could not allocate buffer for temporary string\n"); - return NULL; - } - - strcpy (temp_str, ExternalInfo->DirPathname); - strcat (temp_str, "/"); - strcat (temp_str, dir_entry->d_name); - - err = stat (temp_str, &temp_stat); - free (temp_str); - if (err == -1) - { - printf ("stat() error - should not happen\n"); - return NULL; - } - - if ((S_ISDIR (temp_stat.st_mode) - && (ExternalInfo->RequestedFileType == REQUEST_DIR_ONLY)) - || - ((!S_ISDIR (temp_stat.st_mode) - && ExternalInfo->RequestedFileType == REQUEST_FILE_ONLY))) - { - /* copy to a temp buffer because dir_entry struct is on the stack */ - - strcpy (ExternalInfo->temp_buffer, dir_entry->d_name); - return (ExternalInfo->temp_buffer); - } - } - } - - return NULL; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiOsCloseDirectory - * - * PARAMETERS: DirHandle - Created via AcpiOsOpenDirectory - * - * RETURN: None. - * - * DESCRIPTION: Close the open directory and cleanup. - * - ******************************************************************************/ - -void -AcpiOsCloseDirectory ( - void *DirHandle) -{ - EXTERNAL_FIND_INFO *ExternalInfo = DirHandle; - - - /* Close the directory and free allocations */ - - closedir (ExternalInfo->DirPtr); - free (DirHandle); -} - -/* Other functions acpisrc uses but that aren't standard on Unix */ - -/* lowercase a string */ -char* -strlwr ( - char *str) -{ - int length; - int i; - - - length = strlen(str); - - for (i = 0; i < length; i++) - { - str[i] = tolower(str[i]); - } - - return (str); -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/tools/acpixtract/Makefile b/l4/pkg/acpica/lib-acpi/src/acpica/tools/acpixtract/Makefile deleted file mode 100644 index be7a73585..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/tools/acpixtract/Makefile +++ /dev/null @@ -1,16 +0,0 @@ - - -PROG= acpixtract -SRCS= acpixtract.c - -CFLAGS+= -Wall -O2 -D_LINUX -DACPI_APPLICATION -Wstrict-prototypes -I../../include - - -acpixtract : $(patsubst %.c,%.o, $(SRCS)) - $(CC) $(LDFLAGS) $(patsubst %.c,%.o, $(SRCS)) -o $(PROG) - -CLEANFILES= $(PROG) - -clean : - rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS)) - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utalloc.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utalloc.c deleted file mode 100644 index a66b94005..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utalloc.c +++ /dev/null @@ -1,488 +0,0 @@ -/****************************************************************************** - * - * Module Name: utalloc - local memory allocation routines - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __UTALLOC_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acdebug.h" - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utalloc") - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreateCaches - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Create all local caches - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtCreateCaches ( - void) -{ - ACPI_STATUS Status; - - - /* Object Caches, for frequently used objects */ - - Status = AcpiOsCreateCache ("Acpi-Namespace", sizeof (ACPI_NAMESPACE_NODE), - ACPI_MAX_NAMESPACE_CACHE_DEPTH, &AcpiGbl_NamespaceCache); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Status = AcpiOsCreateCache ("Acpi-State", sizeof (ACPI_GENERIC_STATE), - ACPI_MAX_STATE_CACHE_DEPTH, &AcpiGbl_StateCache); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Status = AcpiOsCreateCache ("Acpi-Parse", sizeof (ACPI_PARSE_OBJ_COMMON), - ACPI_MAX_PARSE_CACHE_DEPTH, &AcpiGbl_PsNodeCache); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Status = AcpiOsCreateCache ("Acpi-ParseExt", sizeof (ACPI_PARSE_OBJ_NAMED), - ACPI_MAX_EXTPARSE_CACHE_DEPTH, &AcpiGbl_PsNodeExtCache); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Status = AcpiOsCreateCache ("Acpi-Operand", sizeof (ACPI_OPERAND_OBJECT), - ACPI_MAX_OBJECT_CACHE_DEPTH, &AcpiGbl_OperandCache); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - - /* Memory allocation lists */ - - Status = AcpiUtCreateList ("Acpi-Global", 0, - &AcpiGbl_GlobalList); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Status = AcpiUtCreateList ("Acpi-Namespace", sizeof (ACPI_NAMESPACE_NODE), - &AcpiGbl_NsNodeList); - if (ACPI_FAILURE (Status)) - { - return (Status); - } -#endif - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtDeleteCaches - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Purge and delete all local caches - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtDeleteCaches ( - void) -{ -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - char Buffer[7]; - - if (AcpiGbl_DisplayFinalMemStats) - { - ACPI_STRCPY (Buffer, "MEMORY"); - (void) AcpiDbDisplayStatistics (Buffer); - } -#endif - - (void) AcpiOsDeleteCache (AcpiGbl_NamespaceCache); - AcpiGbl_NamespaceCache = NULL; - - (void) AcpiOsDeleteCache (AcpiGbl_StateCache); - AcpiGbl_StateCache = NULL; - - (void) AcpiOsDeleteCache (AcpiGbl_OperandCache); - AcpiGbl_OperandCache = NULL; - - (void) AcpiOsDeleteCache (AcpiGbl_PsNodeCache); - AcpiGbl_PsNodeCache = NULL; - - (void) AcpiOsDeleteCache (AcpiGbl_PsNodeExtCache); - AcpiGbl_PsNodeExtCache = NULL; - - -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - - /* Debug only - display leftover memory allocation, if any */ - - AcpiUtDumpAllocations (ACPI_UINT32_MAX, NULL); - - /* Free memory lists */ - - AcpiOsFree (AcpiGbl_GlobalList); - AcpiGbl_GlobalList = NULL; - - AcpiOsFree (AcpiGbl_NsNodeList); - AcpiGbl_NsNodeList = NULL; -#endif - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtValidateBuffer - * - * PARAMETERS: Buffer - Buffer descriptor to be validated - * - * RETURN: Status - * - * DESCRIPTION: Perform parameter validation checks on an ACPI_BUFFER - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtValidateBuffer ( - ACPI_BUFFER *Buffer) -{ - - /* Obviously, the structure pointer must be valid */ - - if (!Buffer) - { - return (AE_BAD_PARAMETER); - } - - /* Special semantics for the length */ - - if ((Buffer->Length == ACPI_NO_BUFFER) || - (Buffer->Length == ACPI_ALLOCATE_BUFFER) || - (Buffer->Length == ACPI_ALLOCATE_LOCAL_BUFFER)) - { - return (AE_OK); - } - - /* Length is valid, the buffer pointer must be also */ - - if (!Buffer->Pointer) - { - return (AE_BAD_PARAMETER); - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtInitializeBuffer - * - * PARAMETERS: Buffer - Buffer to be validated - * RequiredLength - Length needed - * - * RETURN: Status - * - * DESCRIPTION: Validate that the buffer is of the required length or - * allocate a new buffer. Returned buffer is always zeroed. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtInitializeBuffer ( - ACPI_BUFFER *Buffer, - ACPI_SIZE RequiredLength) -{ - ACPI_SIZE InputBufferLength; - - - /* Parameter validation */ - - if (!Buffer || !RequiredLength) - { - return (AE_BAD_PARAMETER); - } - - /* - * Buffer->Length is used as both an input and output parameter. Get the - * input actual length and set the output required buffer length. - */ - InputBufferLength = Buffer->Length; - Buffer->Length = RequiredLength; - - /* - * The input buffer length contains the actual buffer length, or the type - * of buffer to be allocated by this routine. - */ - switch (InputBufferLength) - { - case ACPI_NO_BUFFER: - - /* Return the exception (and the required buffer length) */ - - return (AE_BUFFER_OVERFLOW); - - case ACPI_ALLOCATE_BUFFER: - - /* Allocate a new buffer */ - - Buffer->Pointer = AcpiOsAllocate (RequiredLength); - break; - - case ACPI_ALLOCATE_LOCAL_BUFFER: - - /* Allocate a new buffer with local interface to allow tracking */ - - Buffer->Pointer = ACPI_ALLOCATE (RequiredLength); - break; - - default: - - /* Existing buffer: Validate the size of the buffer */ - - if (InputBufferLength < RequiredLength) - { - return (AE_BUFFER_OVERFLOW); - } - break; - } - - /* Validate allocation from above or input buffer pointer */ - - if (!Buffer->Pointer) - { - return (AE_NO_MEMORY); - } - - /* Have a valid buffer, clear it */ - - ACPI_MEMSET (Buffer->Pointer, 0, RequiredLength); - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtAllocate - * - * PARAMETERS: Size - Size of the allocation - * Component - Component type of caller - * Module - Source file name of caller - * Line - Line number of caller - * - * RETURN: Address of the allocated memory on success, NULL on failure. - * - * DESCRIPTION: Subsystem equivalent of malloc. - * - ******************************************************************************/ - -void * -AcpiUtAllocate ( - ACPI_SIZE Size, - UINT32 Component, - const char *Module, - UINT32 Line) -{ - void *Allocation; - - - ACPI_FUNCTION_TRACE_U32 (UtAllocate, Size); - - - /* Check for an inadvertent size of zero bytes */ - - if (!Size) - { - ACPI_WARNING ((Module, Line, - "Attempt to allocate zero bytes, allocating 1 byte")); - Size = 1; - } - - Allocation = AcpiOsAllocate (Size); - if (!Allocation) - { - /* Report allocation error */ - - ACPI_WARNING ((Module, Line, - "Could not allocate size %X", (UINT32) Size)); - - return_PTR (NULL); - } - - return_PTR (Allocation); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtAllocateZeroed - * - * PARAMETERS: Size - Size of the allocation - * Component - Component type of caller - * Module - Source file name of caller - * Line - Line number of caller - * - * RETURN: Address of the allocated memory on success, NULL on failure. - * - * DESCRIPTION: Subsystem equivalent of calloc. Allocate and zero memory. - * - ******************************************************************************/ - -void * -AcpiUtAllocateZeroed ( - ACPI_SIZE Size, - UINT32 Component, - const char *Module, - UINT32 Line) -{ - void *Allocation; - - - ACPI_FUNCTION_ENTRY (); - - - Allocation = AcpiUtAllocate (Size, Component, Module, Line); - if (Allocation) - { - /* Clear the memory block */ - - ACPI_MEMSET (Allocation, 0, Size); - } - - return (Allocation); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utcache.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utcache.c deleted file mode 100644 index aabc0a230..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utcache.c +++ /dev/null @@ -1,433 +0,0 @@ -/****************************************************************************** - * - * Module Name: utcache - local cache allocation routines - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __UTCACHE_C__ - -#include "acpi.h" -#include "accommon.h" - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utcache") - - -#ifdef ACPI_USE_LOCAL_CACHE -/******************************************************************************* - * - * FUNCTION: AcpiOsCreateCache - * - * PARAMETERS: CacheName - Ascii name for the cache - * ObjectSize - Size of each cached object - * MaxDepth - Maximum depth of the cache (in objects) - * ReturnCache - Where the new cache object is returned - * - * RETURN: Status - * - * DESCRIPTION: Create a cache object - * - ******************************************************************************/ - -ACPI_STATUS -AcpiOsCreateCache ( - char *CacheName, - UINT16 ObjectSize, - UINT16 MaxDepth, - ACPI_MEMORY_LIST **ReturnCache) -{ - ACPI_MEMORY_LIST *Cache; - - - ACPI_FUNCTION_ENTRY (); - - - if (!CacheName || !ReturnCache || (ObjectSize < 16)) - { - return (AE_BAD_PARAMETER); - } - - /* Create the cache object */ - - Cache = AcpiOsAllocate (sizeof (ACPI_MEMORY_LIST)); - if (!Cache) - { - return (AE_NO_MEMORY); - } - - /* Populate the cache object and return it */ - - ACPI_MEMSET (Cache, 0, sizeof (ACPI_MEMORY_LIST)); - Cache->LinkOffset = 8; - Cache->ListName = CacheName; - Cache->ObjectSize = ObjectSize; - Cache->MaxDepth = MaxDepth; - - *ReturnCache = Cache; - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiOsPurgeCache - * - * PARAMETERS: Cache - Handle to cache object - * - * RETURN: Status - * - * DESCRIPTION: Free all objects within the requested cache. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiOsPurgeCache ( - ACPI_MEMORY_LIST *Cache) -{ - char *Next; - ACPI_STATUS Status; - - - ACPI_FUNCTION_ENTRY (); - - - if (!Cache) - { - return (AE_BAD_PARAMETER); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_CACHES); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Walk the list of objects in this cache */ - - while (Cache->ListHead) - { - /* Delete and unlink one cached state object */ - - Next = *(ACPI_CAST_INDIRECT_PTR (char, - &(((char *) Cache->ListHead)[Cache->LinkOffset]))); - ACPI_FREE (Cache->ListHead); - - Cache->ListHead = Next; - Cache->CurrentDepth--; - } - - (void) AcpiUtReleaseMutex (ACPI_MTX_CACHES); - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiOsDeleteCache - * - * PARAMETERS: Cache - Handle to cache object - * - * RETURN: Status - * - * DESCRIPTION: Free all objects within the requested cache and delete the - * cache object. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiOsDeleteCache ( - ACPI_MEMORY_LIST *Cache) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_ENTRY (); - - - /* Purge all objects in the cache */ - - Status = AcpiOsPurgeCache (Cache); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Now we can delete the cache object */ - - AcpiOsFree (Cache); - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiOsReleaseObject - * - * PARAMETERS: Cache - Handle to cache object - * Object - The object to be released - * - * RETURN: None - * - * DESCRIPTION: Release an object to the specified cache. If cache is full, - * the object is deleted. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiOsReleaseObject ( - ACPI_MEMORY_LIST *Cache, - void *Object) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_ENTRY (); - - - if (!Cache || !Object) - { - return (AE_BAD_PARAMETER); - } - - /* If cache is full, just free this object */ - - if (Cache->CurrentDepth >= Cache->MaxDepth) - { - ACPI_FREE (Object); - ACPI_MEM_TRACKING (Cache->TotalFreed++); - } - - /* Otherwise put this object back into the cache */ - - else - { - Status = AcpiUtAcquireMutex (ACPI_MTX_CACHES); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Mark the object as cached */ - - ACPI_MEMSET (Object, 0xCA, Cache->ObjectSize); - ACPI_SET_DESCRIPTOR_TYPE (Object, ACPI_DESC_TYPE_CACHED); - - /* Put the object at the head of the cache list */ - - * (ACPI_CAST_INDIRECT_PTR (char, - &(((char *) Object)[Cache->LinkOffset]))) = Cache->ListHead; - Cache->ListHead = Object; - Cache->CurrentDepth++; - - (void) AcpiUtReleaseMutex (ACPI_MTX_CACHES); - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiOsAcquireObject - * - * PARAMETERS: Cache - Handle to cache object - * - * RETURN: the acquired object. NULL on error - * - * DESCRIPTION: Get an object from the specified cache. If cache is empty, - * the object is allocated. - * - ******************************************************************************/ - -void * -AcpiOsAcquireObject ( - ACPI_MEMORY_LIST *Cache) -{ - ACPI_STATUS Status; - void *Object; - - - ACPI_FUNCTION_NAME (OsAcquireObject); - - - if (!Cache) - { - return (NULL); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_CACHES); - if (ACPI_FAILURE (Status)) - { - return (NULL); - } - - ACPI_MEM_TRACKING (Cache->Requests++); - - /* Check the cache first */ - - if (Cache->ListHead) - { - /* There is an object available, use it */ - - Object = Cache->ListHead; - Cache->ListHead = *(ACPI_CAST_INDIRECT_PTR (char, - &(((char *) Object)[Cache->LinkOffset]))); - - Cache->CurrentDepth--; - - ACPI_MEM_TRACKING (Cache->Hits++); - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Object %p from %s cache\n", Object, Cache->ListName)); - - Status = AcpiUtReleaseMutex (ACPI_MTX_CACHES); - if (ACPI_FAILURE (Status)) - { - return (NULL); - } - - /* Clear (zero) the previously used Object */ - - ACPI_MEMSET (Object, 0, Cache->ObjectSize); - } - else - { - /* The cache is empty, create a new object */ - - ACPI_MEM_TRACKING (Cache->TotalAllocated++); - -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - if ((Cache->TotalAllocated - Cache->TotalFreed) > Cache->MaxOccupied) - { - Cache->MaxOccupied = Cache->TotalAllocated - Cache->TotalFreed; - } -#endif - - /* Avoid deadlock with ACPI_ALLOCATE_ZEROED */ - - Status = AcpiUtReleaseMutex (ACPI_MTX_CACHES); - if (ACPI_FAILURE (Status)) - { - return (NULL); - } - - Object = ACPI_ALLOCATE_ZEROED (Cache->ObjectSize); - if (!Object) - { - return (NULL); - } - } - - return (Object); -} -#endif /* ACPI_USE_LOCAL_CACHE */ - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utclib.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utclib.c deleted file mode 100644 index a9b8122fa..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utclib.c +++ /dev/null @@ -1,961 +0,0 @@ -/****************************************************************************** - * - * Module Name: cmclib - Local implementation of C library functions - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __CMCLIB_C__ - -#include "acpi.h" -#include "accommon.h" - -/* - * These implementations of standard C Library routines can optionally be - * used if a C library is not available. In general, they are less efficient - * than an inline or assembly implementation - */ - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("cmclib") - - -#ifndef ACPI_USE_SYSTEM_CLIBRARY - -#define NEGATIVE 1 -#define POSITIVE 0 - - -/******************************************************************************* - * - * FUNCTION: AcpiUtMemcmp (memcmp) - * - * PARAMETERS: Buffer1 - First Buffer - * Buffer2 - Second Buffer - * Count - Maximum # of bytes to compare - * - * RETURN: Index where Buffers mismatched, or 0 if Buffers matched - * - * DESCRIPTION: Compare two Buffers, with a maximum length - * - ******************************************************************************/ - -int -AcpiUtMemcmp ( - const char *Buffer1, - const char *Buffer2, - ACPI_SIZE Count) -{ - - for ( ; Count-- && (*Buffer1 == *Buffer2); Buffer1++, Buffer2++) - { - } - - return ((Count == ACPI_SIZE_MAX) ? 0 : ((unsigned char) *Buffer1 - - (unsigned char) *Buffer2)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtMemcpy (memcpy) - * - * PARAMETERS: Dest - Target of the copy - * Src - Source buffer to copy - * Count - Number of bytes to copy - * - * RETURN: Dest - * - * DESCRIPTION: Copy arbitrary bytes of memory - * - ******************************************************************************/ - -void * -AcpiUtMemcpy ( - void *Dest, - const void *Src, - ACPI_SIZE Count) -{ - char *New = (char *) Dest; - char *Old = (char *) Src; - - - while (Count) - { - *New = *Old; - New++; - Old++; - Count--; - } - - return (Dest); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtMemset (memset) - * - * PARAMETERS: Dest - Buffer to set - * Value - Value to set each byte of memory - * Count - Number of bytes to set - * - * RETURN: Dest - * - * DESCRIPTION: Initialize a buffer to a known value. - * - ******************************************************************************/ - -void * -AcpiUtMemset ( - void *Dest, - UINT8 Value, - ACPI_SIZE Count) -{ - char *New = (char *) Dest; - - - while (Count) - { - *New = (char) Value; - New++; - Count--; - } - - return (Dest); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtStrlen (strlen) - * - * PARAMETERS: String - Null terminated string - * - * RETURN: Length - * - * DESCRIPTION: Returns the length of the input string - * - ******************************************************************************/ - - -ACPI_SIZE -AcpiUtStrlen ( - const char *String) -{ - UINT32 Length = 0; - - - /* Count the string until a null is encountered */ - - while (*String) - { - Length++; - String++; - } - - return (Length); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtStrcpy (strcpy) - * - * PARAMETERS: DstString - Target of the copy - * SrcString - The source string to copy - * - * RETURN: DstString - * - * DESCRIPTION: Copy a null terminated string - * - ******************************************************************************/ - -char * -AcpiUtStrcpy ( - char *DstString, - const char *SrcString) -{ - char *String = DstString; - - - /* Move bytes brute force */ - - while (*SrcString) - { - *String = *SrcString; - - String++; - SrcString++; - } - - /* Null terminate */ - - *String = 0; - return (DstString); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtStrncpy (strncpy) - * - * PARAMETERS: DstString - Target of the copy - * SrcString - The source string to copy - * Count - Maximum # of bytes to copy - * - * RETURN: DstString - * - * DESCRIPTION: Copy a null terminated string, with a maximum length - * - ******************************************************************************/ - -char * -AcpiUtStrncpy ( - char *DstString, - const char *SrcString, - ACPI_SIZE Count) -{ - char *String = DstString; - - - /* Copy the string */ - - for (String = DstString; - Count && (Count--, (*String++ = *SrcString++)); ) - {;} - - /* Pad with nulls if necessary */ - - while (Count--) - { - *String = 0; - String++; - } - - /* Return original pointer */ - - return (DstString); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtStrcmp (strcmp) - * - * PARAMETERS: String1 - First string - * String2 - Second string - * - * RETURN: Index where strings mismatched, or 0 if strings matched - * - * DESCRIPTION: Compare two null terminated strings - * - ******************************************************************************/ - -int -AcpiUtStrcmp ( - const char *String1, - const char *String2) -{ - - - for ( ; (*String1 == *String2); String2++) - { - if (!*String1++) - { - return (0); - } - } - - return ((unsigned char) *String1 - (unsigned char) *String2); -} - - -#ifdef ACPI_FUTURE_IMPLEMENTATION -/* Not used at this time */ -/******************************************************************************* - * - * FUNCTION: AcpiUtStrchr (strchr) - * - * PARAMETERS: String - Search string - * ch - character to search for - * - * RETURN: Ptr to char or NULL if not found - * - * DESCRIPTION: Search a string for a character - * - ******************************************************************************/ - -char * -AcpiUtStrchr ( - const char *String, - int ch) -{ - - - for ( ; (*String); String++) - { - if ((*String) == (char) ch) - { - return ((char *) String); - } - } - - return (NULL); -} -#endif - -/******************************************************************************* - * - * FUNCTION: AcpiUtStrncmp (strncmp) - * - * PARAMETERS: String1 - First string - * String2 - Second string - * Count - Maximum # of bytes to compare - * - * RETURN: Index where strings mismatched, or 0 if strings matched - * - * DESCRIPTION: Compare two null terminated strings, with a maximum length - * - ******************************************************************************/ - -int -AcpiUtStrncmp ( - const char *String1, - const char *String2, - ACPI_SIZE Count) -{ - - - for ( ; Count-- && (*String1 == *String2); String2++) - { - if (!*String1++) - { - return (0); - } - } - - return ((Count == ACPI_SIZE_MAX) ? 0 : ((unsigned char) *String1 - - (unsigned char) *String2)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtStrcat (Strcat) - * - * PARAMETERS: DstString - Target of the copy - * SrcString - The source string to copy - * - * RETURN: DstString - * - * DESCRIPTION: Append a null terminated string to a null terminated string - * - ******************************************************************************/ - -char * -AcpiUtStrcat ( - char *DstString, - const char *SrcString) -{ - char *String; - - - /* Find end of the destination string */ - - for (String = DstString; *String++; ) - { ; } - - /* Concatenate the string */ - - for (--String; (*String++ = *SrcString++); ) - { ; } - - return (DstString); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtStrncat (strncat) - * - * PARAMETERS: DstString - Target of the copy - * SrcString - The source string to copy - * Count - Maximum # of bytes to copy - * - * RETURN: DstString - * - * DESCRIPTION: Append a null terminated string to a null terminated string, - * with a maximum count. - * - ******************************************************************************/ - -char * -AcpiUtStrncat ( - char *DstString, - const char *SrcString, - ACPI_SIZE Count) -{ - char *String; - - - if (Count) - { - /* Find end of the destination string */ - - for (String = DstString; *String++; ) - { ; } - - /* Concatenate the string */ - - for (--String; (*String++ = *SrcString++) && --Count; ) - { ; } - - /* Null terminate if necessary */ - - if (!Count) - { - *String = 0; - } - } - - return (DstString); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtStrstr (strstr) - * - * PARAMETERS: String1 - Target string - * String2 - Substring to search for - * - * RETURN: Where substring match starts, Null if no match found - * - * DESCRIPTION: Checks if String2 occurs in String1. This is not really a - * full implementation of strstr, only sufficient for command - * matching - * - ******************************************************************************/ - -char * -AcpiUtStrstr ( - char *String1, - char *String2) -{ - char *String; - - - if (AcpiUtStrlen (String2) > AcpiUtStrlen (String1)) - { - return (NULL); - } - - /* Walk entire string, comparing the letters */ - - for (String = String1; *String2; ) - { - if (*String2 != *String) - { - return (NULL); - } - - String2++; - String++; - } - - return (String1); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtStrtoul (strtoul) - * - * PARAMETERS: String - Null terminated string - * Terminater - Where a pointer to the terminating byte is - * returned - * Base - Radix of the string - * - * RETURN: Converted value - * - * DESCRIPTION: Convert a string into a 32-bit unsigned value. - * Note: use AcpiUtStrtoul64 for 64-bit integers. - * - ******************************************************************************/ - -UINT32 -AcpiUtStrtoul ( - const char *String, - char **Terminator, - UINT32 Base) -{ - UINT32 converted = 0; - UINT32 index; - UINT32 sign; - const char *StringStart; - UINT32 ReturnValue = 0; - ACPI_STATUS Status = AE_OK; - - - /* - * Save the value of the pointer to the buffer's first - * character, save the current errno value, and then - * skip over any white space in the buffer: - */ - StringStart = String; - while (ACPI_IS_SPACE (*String) || *String == '\t') - { - ++String; - } - - /* - * The buffer may contain an optional plus or minus sign. - * If it does, then skip over it but remember what is was: - */ - if (*String == '-') - { - sign = NEGATIVE; - ++String; - } - else if (*String == '+') - { - ++String; - sign = POSITIVE; - } - else - { - sign = POSITIVE; - } - - /* - * If the input parameter Base is zero, then we need to - * determine if it is octal, decimal, or hexadecimal: - */ - if (Base == 0) - { - if (*String == '0') - { - if (AcpiUtToLower (*(++String)) == 'x') - { - Base = 16; - ++String; - } - else - { - Base = 8; - } - } - else - { - Base = 10; - } - } - else if (Base < 2 || Base > 36) - { - /* - * The specified Base parameter is not in the domain of - * this function: - */ - goto done; - } - - /* - * For octal and hexadecimal bases, skip over the leading - * 0 or 0x, if they are present. - */ - if (Base == 8 && *String == '0') - { - String++; - } - - if (Base == 16 && - *String == '0' && - AcpiUtToLower (*(++String)) == 'x') - { - String++; - } - - /* - * Main loop: convert the string to an unsigned long: - */ - while (*String) - { - if (ACPI_IS_DIGIT (*String)) - { - index = (UINT32) ((UINT8) *String - '0'); - } - else - { - index = (UINT32) AcpiUtToUpper (*String); - if (ACPI_IS_UPPER (index)) - { - index = index - 'A' + 10; - } - else - { - goto done; - } - } - - if (index >= Base) - { - goto done; - } - - /* - * Check to see if value is out of range: - */ - - if (ReturnValue > ((ACPI_UINT32_MAX - (UINT32) index) / - (UINT32) Base)) - { - Status = AE_ERROR; - ReturnValue = 0; /* reset */ - } - else - { - ReturnValue *= Base; - ReturnValue += index; - converted = 1; - } - - ++String; - } - -done: - /* - * If appropriate, update the caller's pointer to the next - * unconverted character in the buffer. - */ - if (Terminator) - { - if (converted == 0 && ReturnValue == 0 && String != NULL) - { - *Terminator = (char *) StringStart; - } - else - { - *Terminator = (char *) String; - } - } - - if (Status == AE_ERROR) - { - ReturnValue = ACPI_UINT32_MAX; - } - - /* - * If a minus sign was present, then "the conversion is negated": - */ - if (sign == NEGATIVE) - { - ReturnValue = (ACPI_UINT32_MAX - ReturnValue) + 1; - } - - return (ReturnValue); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtToUpper (TOUPPER) - * - * PARAMETERS: c - Character to convert - * - * RETURN: Converted character as an int - * - * DESCRIPTION: Convert character to uppercase - * - ******************************************************************************/ - -int -AcpiUtToUpper ( - int c) -{ - - return (ACPI_IS_LOWER(c) ? ((c)-0x20) : (c)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtToLower (TOLOWER) - * - * PARAMETERS: c - Character to convert - * - * RETURN: Converted character as an int - * - * DESCRIPTION: Convert character to lowercase - * - ******************************************************************************/ - -int -AcpiUtToLower ( - int c) -{ - - return (ACPI_IS_UPPER(c) ? ((c)+0x20) : (c)); -} - - -/******************************************************************************* - * - * FUNCTION: is* functions - * - * DESCRIPTION: is* functions use the ctype table below - * - ******************************************************************************/ - -const UINT8 _acpi_ctype[257] = { - _ACPI_CN, /* 0x0 0. */ - _ACPI_CN, /* 0x1 1. */ - _ACPI_CN, /* 0x2 2. */ - _ACPI_CN, /* 0x3 3. */ - _ACPI_CN, /* 0x4 4. */ - _ACPI_CN, /* 0x5 5. */ - _ACPI_CN, /* 0x6 6. */ - _ACPI_CN, /* 0x7 7. */ - _ACPI_CN, /* 0x8 8. */ - _ACPI_CN|_ACPI_SP, /* 0x9 9. */ - _ACPI_CN|_ACPI_SP, /* 0xA 10. */ - _ACPI_CN|_ACPI_SP, /* 0xB 11. */ - _ACPI_CN|_ACPI_SP, /* 0xC 12. */ - _ACPI_CN|_ACPI_SP, /* 0xD 13. */ - _ACPI_CN, /* 0xE 14. */ - _ACPI_CN, /* 0xF 15. */ - _ACPI_CN, /* 0x10 16. */ - _ACPI_CN, /* 0x11 17. */ - _ACPI_CN, /* 0x12 18. */ - _ACPI_CN, /* 0x13 19. */ - _ACPI_CN, /* 0x14 20. */ - _ACPI_CN, /* 0x15 21. */ - _ACPI_CN, /* 0x16 22. */ - _ACPI_CN, /* 0x17 23. */ - _ACPI_CN, /* 0x18 24. */ - _ACPI_CN, /* 0x19 25. */ - _ACPI_CN, /* 0x1A 26. */ - _ACPI_CN, /* 0x1B 27. */ - _ACPI_CN, /* 0x1C 28. */ - _ACPI_CN, /* 0x1D 29. */ - _ACPI_CN, /* 0x1E 30. */ - _ACPI_CN, /* 0x1F 31. */ - _ACPI_XS|_ACPI_SP, /* 0x20 32. ' ' */ - _ACPI_PU, /* 0x21 33. '!' */ - _ACPI_PU, /* 0x22 34. '"' */ - _ACPI_PU, /* 0x23 35. '#' */ - _ACPI_PU, /* 0x24 36. '$' */ - _ACPI_PU, /* 0x25 37. '%' */ - _ACPI_PU, /* 0x26 38. '&' */ - _ACPI_PU, /* 0x27 39. ''' */ - _ACPI_PU, /* 0x28 40. '(' */ - _ACPI_PU, /* 0x29 41. ')' */ - _ACPI_PU, /* 0x2A 42. '*' */ - _ACPI_PU, /* 0x2B 43. '+' */ - _ACPI_PU, /* 0x2C 44. ',' */ - _ACPI_PU, /* 0x2D 45. '-' */ - _ACPI_PU, /* 0x2E 46. '.' */ - _ACPI_PU, /* 0x2F 47. '/' */ - _ACPI_XD|_ACPI_DI, /* 0x30 48. '0' */ - _ACPI_XD|_ACPI_DI, /* 0x31 49. '1' */ - _ACPI_XD|_ACPI_DI, /* 0x32 50. '2' */ - _ACPI_XD|_ACPI_DI, /* 0x33 51. '3' */ - _ACPI_XD|_ACPI_DI, /* 0x34 52. '4' */ - _ACPI_XD|_ACPI_DI, /* 0x35 53. '5' */ - _ACPI_XD|_ACPI_DI, /* 0x36 54. '6' */ - _ACPI_XD|_ACPI_DI, /* 0x37 55. '7' */ - _ACPI_XD|_ACPI_DI, /* 0x38 56. '8' */ - _ACPI_XD|_ACPI_DI, /* 0x39 57. '9' */ - _ACPI_PU, /* 0x3A 58. ':' */ - _ACPI_PU, /* 0x3B 59. ';' */ - _ACPI_PU, /* 0x3C 60. '<' */ - _ACPI_PU, /* 0x3D 61. '=' */ - _ACPI_PU, /* 0x3E 62. '>' */ - _ACPI_PU, /* 0x3F 63. '?' */ - _ACPI_PU, /* 0x40 64. '@' */ - _ACPI_XD|_ACPI_UP, /* 0x41 65. 'A' */ - _ACPI_XD|_ACPI_UP, /* 0x42 66. 'B' */ - _ACPI_XD|_ACPI_UP, /* 0x43 67. 'C' */ - _ACPI_XD|_ACPI_UP, /* 0x44 68. 'D' */ - _ACPI_XD|_ACPI_UP, /* 0x45 69. 'E' */ - _ACPI_XD|_ACPI_UP, /* 0x46 70. 'F' */ - _ACPI_UP, /* 0x47 71. 'G' */ - _ACPI_UP, /* 0x48 72. 'H' */ - _ACPI_UP, /* 0x49 73. 'I' */ - _ACPI_UP, /* 0x4A 74. 'J' */ - _ACPI_UP, /* 0x4B 75. 'K' */ - _ACPI_UP, /* 0x4C 76. 'L' */ - _ACPI_UP, /* 0x4D 77. 'M' */ - _ACPI_UP, /* 0x4E 78. 'N' */ - _ACPI_UP, /* 0x4F 79. 'O' */ - _ACPI_UP, /* 0x50 80. 'P' */ - _ACPI_UP, /* 0x51 81. 'Q' */ - _ACPI_UP, /* 0x52 82. 'R' */ - _ACPI_UP, /* 0x53 83. 'S' */ - _ACPI_UP, /* 0x54 84. 'T' */ - _ACPI_UP, /* 0x55 85. 'U' */ - _ACPI_UP, /* 0x56 86. 'V' */ - _ACPI_UP, /* 0x57 87. 'W' */ - _ACPI_UP, /* 0x58 88. 'X' */ - _ACPI_UP, /* 0x59 89. 'Y' */ - _ACPI_UP, /* 0x5A 90. 'Z' */ - _ACPI_PU, /* 0x5B 91. '[' */ - _ACPI_PU, /* 0x5C 92. '\' */ - _ACPI_PU, /* 0x5D 93. ']' */ - _ACPI_PU, /* 0x5E 94. '^' */ - _ACPI_PU, /* 0x5F 95. '_' */ - _ACPI_PU, /* 0x60 96. '`' */ - _ACPI_XD|_ACPI_LO, /* 0x61 97. 'a' */ - _ACPI_XD|_ACPI_LO, /* 0x62 98. 'b' */ - _ACPI_XD|_ACPI_LO, /* 0x63 99. 'c' */ - _ACPI_XD|_ACPI_LO, /* 0x64 100. 'd' */ - _ACPI_XD|_ACPI_LO, /* 0x65 101. 'e' */ - _ACPI_XD|_ACPI_LO, /* 0x66 102. 'f' */ - _ACPI_LO, /* 0x67 103. 'g' */ - _ACPI_LO, /* 0x68 104. 'h' */ - _ACPI_LO, /* 0x69 105. 'i' */ - _ACPI_LO, /* 0x6A 106. 'j' */ - _ACPI_LO, /* 0x6B 107. 'k' */ - _ACPI_LO, /* 0x6C 108. 'l' */ - _ACPI_LO, /* 0x6D 109. 'm' */ - _ACPI_LO, /* 0x6E 110. 'n' */ - _ACPI_LO, /* 0x6F 111. 'o' */ - _ACPI_LO, /* 0x70 112. 'p' */ - _ACPI_LO, /* 0x71 113. 'q' */ - _ACPI_LO, /* 0x72 114. 'r' */ - _ACPI_LO, /* 0x73 115. 's' */ - _ACPI_LO, /* 0x74 116. 't' */ - _ACPI_LO, /* 0x75 117. 'u' */ - _ACPI_LO, /* 0x76 118. 'v' */ - _ACPI_LO, /* 0x77 119. 'w' */ - _ACPI_LO, /* 0x78 120. 'x' */ - _ACPI_LO, /* 0x79 121. 'y' */ - _ACPI_LO, /* 0x7A 122. 'z' */ - _ACPI_PU, /* 0x7B 123. '{' */ - _ACPI_PU, /* 0x7C 124. '|' */ - _ACPI_PU, /* 0x7D 125. '}' */ - _ACPI_PU, /* 0x7E 126. '~' */ - _ACPI_CN, /* 0x7F 127. */ - - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x80 to 0x8F */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x90 to 0x9F */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xA0 to 0xAF */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xB0 to 0xBF */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xC0 to 0xCF */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xD0 to 0xDF */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xE0 to 0xEF */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 0xF0 to 0x100 */ -}; - - -#endif /* ACPI_USE_SYSTEM_CLIBRARY */ - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utcopy.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utcopy.c deleted file mode 100644 index 5423eff9d..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utcopy.c +++ /dev/null @@ -1,1142 +0,0 @@ -/****************************************************************************** - * - * Module Name: utcopy - Internal to external object translation utilities - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __UTCOPY_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utcopy") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiUtCopyIsimpleToEsimple ( - ACPI_OPERAND_OBJECT *InternalObject, - ACPI_OBJECT *ExternalObject, - UINT8 *DataSpace, - ACPI_SIZE *BufferSpaceUsed); - -static ACPI_STATUS -AcpiUtCopyIelementToIelement ( - UINT8 ObjectType, - ACPI_OPERAND_OBJECT *SourceObject, - ACPI_GENERIC_STATE *State, - void *Context); - -static ACPI_STATUS -AcpiUtCopyIpackageToEpackage ( - ACPI_OPERAND_OBJECT *InternalObject, - UINT8 *Buffer, - ACPI_SIZE *SpaceUsed); - -static ACPI_STATUS -AcpiUtCopyEsimpleToIsimple( - ACPI_OBJECT *UserObj, - ACPI_OPERAND_OBJECT **ReturnObj); - -static ACPI_STATUS -AcpiUtCopyEpackageToIpackage ( - ACPI_OBJECT *ExternalObject, - ACPI_OPERAND_OBJECT **InternalObject); - -static ACPI_STATUS -AcpiUtCopySimpleObject ( - ACPI_OPERAND_OBJECT *SourceDesc, - ACPI_OPERAND_OBJECT *DestDesc); - -static ACPI_STATUS -AcpiUtCopyIelementToEelement ( - UINT8 ObjectType, - ACPI_OPERAND_OBJECT *SourceObject, - ACPI_GENERIC_STATE *State, - void *Context); - -static ACPI_STATUS -AcpiUtCopyIpackageToIpackage ( - ACPI_OPERAND_OBJECT *SourceObj, - ACPI_OPERAND_OBJECT *DestObj, - ACPI_WALK_STATE *WalkState); - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCopyIsimpleToEsimple - * - * PARAMETERS: InternalObject - Source object to be copied - * ExternalObject - Where to return the copied object - * DataSpace - Where object data is returned (such as - * buffer and string data) - * BufferSpaceUsed - Length of DataSpace that was used - * - * RETURN: Status - * - * DESCRIPTION: This function is called to copy a simple internal object to - * an external object. - * - * The DataSpace buffer is assumed to have sufficient space for - * the object. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiUtCopyIsimpleToEsimple ( - ACPI_OPERAND_OBJECT *InternalObject, - ACPI_OBJECT *ExternalObject, - UINT8 *DataSpace, - ACPI_SIZE *BufferSpaceUsed) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (UtCopyIsimpleToEsimple); - - - *BufferSpaceUsed = 0; - - /* - * Check for NULL object case (could be an uninitialized - * package element) - */ - if (!InternalObject) - { - return_ACPI_STATUS (AE_OK); - } - - /* Always clear the external object */ - - ACPI_MEMSET (ExternalObject, 0, sizeof (ACPI_OBJECT)); - - /* - * In general, the external object will be the same type as - * the internal object - */ - ExternalObject->Type = InternalObject->Common.Type; - - /* However, only a limited number of external types are supported */ - - switch (InternalObject->Common.Type) - { - case ACPI_TYPE_STRING: - - ExternalObject->String.Pointer = (char *) DataSpace; - ExternalObject->String.Length = InternalObject->String.Length; - *BufferSpaceUsed = ACPI_ROUND_UP_TO_NATIVE_WORD ( - (ACPI_SIZE) InternalObject->String.Length + 1); - - ACPI_MEMCPY ((void *) DataSpace, - (void *) InternalObject->String.Pointer, - (ACPI_SIZE) InternalObject->String.Length + 1); - break; - - - case ACPI_TYPE_BUFFER: - - ExternalObject->Buffer.Pointer = DataSpace; - ExternalObject->Buffer.Length = InternalObject->Buffer.Length; - *BufferSpaceUsed = ACPI_ROUND_UP_TO_NATIVE_WORD ( - InternalObject->String.Length); - - ACPI_MEMCPY ((void *) DataSpace, - (void *) InternalObject->Buffer.Pointer, - InternalObject->Buffer.Length); - break; - - - case ACPI_TYPE_INTEGER: - - ExternalObject->Integer.Value = InternalObject->Integer.Value; - break; - - - case ACPI_TYPE_LOCAL_REFERENCE: - - /* This is an object reference. */ - - switch (InternalObject->Reference.Class) - { - case ACPI_REFCLASS_NAME: - - /* - * For namepath, return the object handle ("reference") - * We are referring to the namespace node - */ - ExternalObject->Reference.Handle = - InternalObject->Reference.Node; - ExternalObject->Reference.ActualType = - AcpiNsGetType (InternalObject->Reference.Node); - break; - - default: - - /* All other reference types are unsupported */ - - return_ACPI_STATUS (AE_TYPE); - } - break; - - - case ACPI_TYPE_PROCESSOR: - - ExternalObject->Processor.ProcId = - InternalObject->Processor.ProcId; - ExternalObject->Processor.PblkAddress = - InternalObject->Processor.Address; - ExternalObject->Processor.PblkLength = - InternalObject->Processor.Length; - break; - - - case ACPI_TYPE_POWER: - - ExternalObject->PowerResource.SystemLevel = - InternalObject->PowerResource.SystemLevel; - - ExternalObject->PowerResource.ResourceOrder = - InternalObject->PowerResource.ResourceOrder; - break; - - - default: - /* - * There is no corresponding external object type - */ - ACPI_ERROR ((AE_INFO, - "Unsupported object type, cannot convert to external object: %s", - AcpiUtGetTypeName (InternalObject->Common.Type))); - - return_ACPI_STATUS (AE_SUPPORT); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCopyIelementToEelement - * - * PARAMETERS: ACPI_PKG_CALLBACK - * - * RETURN: Status - * - * DESCRIPTION: Copy one package element to another package element - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiUtCopyIelementToEelement ( - UINT8 ObjectType, - ACPI_OPERAND_OBJECT *SourceObject, - ACPI_GENERIC_STATE *State, - void *Context) -{ - ACPI_STATUS Status = AE_OK; - ACPI_PKG_INFO *Info = (ACPI_PKG_INFO *) Context; - ACPI_SIZE ObjectSpace; - UINT32 ThisIndex; - ACPI_OBJECT *TargetObject; - - - ACPI_FUNCTION_ENTRY (); - - - ThisIndex = State->Pkg.Index; - TargetObject = (ACPI_OBJECT *) - &((ACPI_OBJECT *)(State->Pkg.DestObject))->Package.Elements[ThisIndex]; - - switch (ObjectType) - { - case ACPI_COPY_TYPE_SIMPLE: - - /* - * This is a simple or null object - */ - Status = AcpiUtCopyIsimpleToEsimple (SourceObject, - TargetObject, Info->FreeSpace, &ObjectSpace); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - break; - - - case ACPI_COPY_TYPE_PACKAGE: - - /* - * Build the package object - */ - TargetObject->Type = ACPI_TYPE_PACKAGE; - TargetObject->Package.Count = SourceObject->Package.Count; - TargetObject->Package.Elements = - ACPI_CAST_PTR (ACPI_OBJECT, Info->FreeSpace); - - /* - * Pass the new package object back to the package walk routine - */ - State->Pkg.ThisTargetObj = TargetObject; - - /* - * Save space for the array of objects (Package elements) - * update the buffer length counter - */ - ObjectSpace = ACPI_ROUND_UP_TO_NATIVE_WORD ( - (ACPI_SIZE) TargetObject->Package.Count * - sizeof (ACPI_OBJECT)); - break; - - - default: - return (AE_BAD_PARAMETER); - } - - Info->FreeSpace += ObjectSpace; - Info->Length += ObjectSpace; - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCopyIpackageToEpackage - * - * PARAMETERS: InternalObject - Pointer to the object we are returning - * Buffer - Where the object is returned - * SpaceUsed - Where the object length is returned - * - * RETURN: Status - * - * DESCRIPTION: This function is called to place a package object in a user - * buffer. A package object by definition contains other objects. - * - * The buffer is assumed to have sufficient space for the object. - * The caller must have verified the buffer length needed using - * the AcpiUtGetObjectSize function before calling this function. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiUtCopyIpackageToEpackage ( - ACPI_OPERAND_OBJECT *InternalObject, - UINT8 *Buffer, - ACPI_SIZE *SpaceUsed) -{ - ACPI_OBJECT *ExternalObject; - ACPI_STATUS Status; - ACPI_PKG_INFO Info; - - - ACPI_FUNCTION_TRACE (UtCopyIpackageToEpackage); - - - /* - * First package at head of the buffer - */ - ExternalObject = ACPI_CAST_PTR (ACPI_OBJECT, Buffer); - - /* - * Free space begins right after the first package - */ - Info.Length = ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT)); - Info.FreeSpace = Buffer + ACPI_ROUND_UP_TO_NATIVE_WORD ( - sizeof (ACPI_OBJECT)); - Info.ObjectSpace = 0; - Info.NumPackages = 1; - - ExternalObject->Type = InternalObject->Common.Type; - ExternalObject->Package.Count = InternalObject->Package.Count; - ExternalObject->Package.Elements = ACPI_CAST_PTR (ACPI_OBJECT, - Info.FreeSpace); - - /* - * Leave room for an array of ACPI_OBJECTS in the buffer - * and move the free space past it - */ - Info.Length += (ACPI_SIZE) ExternalObject->Package.Count * - ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT)); - Info.FreeSpace += ExternalObject->Package.Count * - ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT)); - - Status = AcpiUtWalkPackageTree (InternalObject, ExternalObject, - AcpiUtCopyIelementToEelement, &Info); - - *SpaceUsed = Info.Length; - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCopyIobjectToEobject - * - * PARAMETERS: InternalObject - The internal object to be converted - * RetBuffer - Where the object is returned - * - * RETURN: Status - * - * DESCRIPTION: This function is called to build an API object to be returned - * to the caller. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtCopyIobjectToEobject ( - ACPI_OPERAND_OBJECT *InternalObject, - ACPI_BUFFER *RetBuffer) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (UtCopyIobjectToEobject); - - - if (InternalObject->Common.Type == ACPI_TYPE_PACKAGE) - { - /* - * Package object: Copy all subobjects (including - * nested packages) - */ - Status = AcpiUtCopyIpackageToEpackage (InternalObject, - RetBuffer->Pointer, &RetBuffer->Length); - } - else - { - /* - * Build a simple object (no nested objects) - */ - Status = AcpiUtCopyIsimpleToEsimple (InternalObject, - ACPI_CAST_PTR (ACPI_OBJECT, RetBuffer->Pointer), - ACPI_ADD_PTR (UINT8, RetBuffer->Pointer, - ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT))), - &RetBuffer->Length); - /* - * build simple does not include the object size in the length - * so we add it in here - */ - RetBuffer->Length += sizeof (ACPI_OBJECT); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCopyEsimpleToIsimple - * - * PARAMETERS: ExternalObject - The external object to be converted - * RetInternalObject - Where the internal object is returned - * - * RETURN: Status - * - * DESCRIPTION: This function copies an external object to an internal one. - * NOTE: Pointers can be copied, we don't need to copy data. - * (The pointers have to be valid in our address space no matter - * what we do with them!) - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiUtCopyEsimpleToIsimple ( - ACPI_OBJECT *ExternalObject, - ACPI_OPERAND_OBJECT **RetInternalObject) -{ - ACPI_OPERAND_OBJECT *InternalObject; - - - ACPI_FUNCTION_TRACE (UtCopyEsimpleToIsimple); - - - /* - * Simple types supported are: String, Buffer, Integer - */ - switch (ExternalObject->Type) - { - case ACPI_TYPE_STRING: - case ACPI_TYPE_BUFFER: - case ACPI_TYPE_INTEGER: - case ACPI_TYPE_LOCAL_REFERENCE: - - InternalObject = AcpiUtCreateInternalObject ( - (UINT8) ExternalObject->Type); - if (!InternalObject) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - break; - - case ACPI_TYPE_ANY: /* This is the case for a NULL object */ - - *RetInternalObject = NULL; - return_ACPI_STATUS (AE_OK); - - default: - /* All other types are not supported */ - - ACPI_ERROR ((AE_INFO, - "Unsupported object type, cannot convert to internal object: %s", - AcpiUtGetTypeName (ExternalObject->Type))); - - return_ACPI_STATUS (AE_SUPPORT); - } - - - /* Must COPY string and buffer contents */ - - switch (ExternalObject->Type) - { - case ACPI_TYPE_STRING: - - InternalObject->String.Pointer = - ACPI_ALLOCATE_ZEROED ((ACPI_SIZE) - ExternalObject->String.Length + 1); - - if (!InternalObject->String.Pointer) - { - goto ErrorExit; - } - - ACPI_MEMCPY (InternalObject->String.Pointer, - ExternalObject->String.Pointer, - ExternalObject->String.Length); - - InternalObject->String.Length = ExternalObject->String.Length; - break; - - - case ACPI_TYPE_BUFFER: - - InternalObject->Buffer.Pointer = - ACPI_ALLOCATE_ZEROED (ExternalObject->Buffer.Length); - if (!InternalObject->Buffer.Pointer) - { - goto ErrorExit; - } - - ACPI_MEMCPY (InternalObject->Buffer.Pointer, - ExternalObject->Buffer.Pointer, - ExternalObject->Buffer.Length); - - InternalObject->Buffer.Length = ExternalObject->Buffer.Length; - - /* Mark buffer data valid */ - - InternalObject->Buffer.Flags |= AOPOBJ_DATA_VALID; - break; - - - case ACPI_TYPE_INTEGER: - - InternalObject->Integer.Value = ExternalObject->Integer.Value; - break; - - case ACPI_TYPE_LOCAL_REFERENCE: - - /* TBD: should validate incoming handle */ - - InternalObject->Reference.Class = ACPI_REFCLASS_NAME; - InternalObject->Reference.Node = ExternalObject->Reference.Handle; - break; - - default: - /* Other types can't get here */ - break; - } - - *RetInternalObject = InternalObject; - return_ACPI_STATUS (AE_OK); - - -ErrorExit: - AcpiUtRemoveReference (InternalObject); - return_ACPI_STATUS (AE_NO_MEMORY); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCopyEpackageToIpackage - * - * PARAMETERS: ExternalObject - The external object to be converted - * InternalObject - Where the internal object is returned - * - * RETURN: Status - * - * DESCRIPTION: Copy an external package object to an internal package. - * Handles nested packages. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiUtCopyEpackageToIpackage ( - ACPI_OBJECT *ExternalObject, - ACPI_OPERAND_OBJECT **InternalObject) -{ - ACPI_STATUS Status = AE_OK; - ACPI_OPERAND_OBJECT *PackageObject; - ACPI_OPERAND_OBJECT **PackageElements; - UINT32 i; - - - ACPI_FUNCTION_TRACE (UtCopyEpackageToIpackage); - - - /* Create the package object */ - - PackageObject = AcpiUtCreatePackageObject (ExternalObject->Package.Count); - if (!PackageObject) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - PackageElements = PackageObject->Package.Elements; - - /* - * Recursive implementation. Probably ok, since nested external packages - * as parameters should be very rare. - */ - for (i = 0; i < ExternalObject->Package.Count; i++) - { - Status = AcpiUtCopyEobjectToIobject ( - &ExternalObject->Package.Elements[i], - &PackageElements[i]); - if (ACPI_FAILURE (Status)) - { - /* Truncate package and delete it */ - - PackageObject->Package.Count = i; - PackageElements[i] = NULL; - AcpiUtRemoveReference (PackageObject); - return_ACPI_STATUS (Status); - } - } - - /* Mark package data valid */ - - PackageObject->Package.Flags |= AOPOBJ_DATA_VALID; - - *InternalObject = PackageObject; - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCopyEobjectToIobject - * - * PARAMETERS: ExternalObject - The external object to be converted - * InternalObject - Where the internal object is returned - * - * RETURN: Status - * - * DESCRIPTION: Converts an external object to an internal object. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtCopyEobjectToIobject ( - ACPI_OBJECT *ExternalObject, - ACPI_OPERAND_OBJECT **InternalObject) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (UtCopyEobjectToIobject); - - - if (ExternalObject->Type == ACPI_TYPE_PACKAGE) - { - Status = AcpiUtCopyEpackageToIpackage (ExternalObject, InternalObject); - } - else - { - /* - * Build a simple object (no nested objects) - */ - Status = AcpiUtCopyEsimpleToIsimple (ExternalObject, InternalObject); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCopySimpleObject - * - * PARAMETERS: SourceDesc - The internal object to be copied - * DestDesc - New target object - * - * RETURN: Status - * - * DESCRIPTION: Simple copy of one internal object to another. Reference count - * of the destination object is preserved. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiUtCopySimpleObject ( - ACPI_OPERAND_OBJECT *SourceDesc, - ACPI_OPERAND_OBJECT *DestDesc) -{ - UINT16 ReferenceCount; - ACPI_OPERAND_OBJECT *NextObject; - ACPI_STATUS Status; - - - /* Save fields from destination that we don't want to overwrite */ - - ReferenceCount = DestDesc->Common.ReferenceCount; - NextObject = DestDesc->Common.NextObject; - - /* Copy the entire source object over the destination object*/ - - ACPI_MEMCPY ((char *) DestDesc, (char *) SourceDesc, - sizeof (ACPI_OPERAND_OBJECT)); - - /* Restore the saved fields */ - - DestDesc->Common.ReferenceCount = ReferenceCount; - DestDesc->Common.NextObject = NextObject; - - /* New object is not static, regardless of source */ - - DestDesc->Common.Flags &= ~AOPOBJ_STATIC_POINTER; - - /* Handle the objects with extra data */ - - switch (DestDesc->Common.Type) - { - case ACPI_TYPE_BUFFER: - /* - * Allocate and copy the actual buffer if and only if: - * 1) There is a valid buffer pointer - * 2) The buffer has a length > 0 - */ - if ((SourceDesc->Buffer.Pointer) && - (SourceDesc->Buffer.Length)) - { - DestDesc->Buffer.Pointer = - ACPI_ALLOCATE (SourceDesc->Buffer.Length); - if (!DestDesc->Buffer.Pointer) - { - return (AE_NO_MEMORY); - } - - /* Copy the actual buffer data */ - - ACPI_MEMCPY (DestDesc->Buffer.Pointer, - SourceDesc->Buffer.Pointer, - SourceDesc->Buffer.Length); - } - break; - - case ACPI_TYPE_STRING: - /* - * Allocate and copy the actual string if and only if: - * 1) There is a valid string pointer - * (Pointer to a NULL string is allowed) - */ - if (SourceDesc->String.Pointer) - { - DestDesc->String.Pointer = - ACPI_ALLOCATE ((ACPI_SIZE) SourceDesc->String.Length + 1); - if (!DestDesc->String.Pointer) - { - return (AE_NO_MEMORY); - } - - /* Copy the actual string data */ - - ACPI_MEMCPY (DestDesc->String.Pointer, SourceDesc->String.Pointer, - (ACPI_SIZE) SourceDesc->String.Length + 1); - } - break; - - case ACPI_TYPE_LOCAL_REFERENCE: - /* - * We copied the reference object, so we now must add a reference - * to the object pointed to by the reference - * - * DDBHandle reference (from Load/LoadTable) is a special reference, - * it does not have a Reference.Object, so does not need to - * increase the reference count - */ - if (SourceDesc->Reference.Class == ACPI_REFCLASS_TABLE) - { - break; - } - - AcpiUtAddReference (SourceDesc->Reference.Object); - break; - - case ACPI_TYPE_REGION: - /* - * We copied the Region Handler, so we now must add a reference - */ - if (DestDesc->Region.Handler) - { - AcpiUtAddReference (DestDesc->Region.Handler); - } - break; - - /* - * For Mutex and Event objects, we cannot simply copy the underlying - * OS object. We must create a new one. - */ - case ACPI_TYPE_MUTEX: - - Status = AcpiOsCreateMutex (&DestDesc->Mutex.OsMutex); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - break; - - case ACPI_TYPE_EVENT: - - Status = AcpiOsCreateSemaphore (ACPI_NO_UNIT_LIMIT, 0, - &DestDesc->Event.OsSemaphore); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - break; - - default: - /* Nothing to do for other simple objects */ - break; - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCopyIelementToIelement - * - * PARAMETERS: ACPI_PKG_CALLBACK - * - * RETURN: Status - * - * DESCRIPTION: Copy one package element to another package element - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiUtCopyIelementToIelement ( - UINT8 ObjectType, - ACPI_OPERAND_OBJECT *SourceObject, - ACPI_GENERIC_STATE *State, - void *Context) -{ - ACPI_STATUS Status = AE_OK; - UINT32 ThisIndex; - ACPI_OPERAND_OBJECT **ThisTargetPtr; - ACPI_OPERAND_OBJECT *TargetObject; - - - ACPI_FUNCTION_ENTRY (); - - - ThisIndex = State->Pkg.Index; - ThisTargetPtr = (ACPI_OPERAND_OBJECT **) - &State->Pkg.DestObject->Package.Elements[ThisIndex]; - - switch (ObjectType) - { - case ACPI_COPY_TYPE_SIMPLE: - - /* A null source object indicates a (legal) null package element */ - - if (SourceObject) - { - /* - * This is a simple object, just copy it - */ - TargetObject = AcpiUtCreateInternalObject ( - SourceObject->Common.Type); - if (!TargetObject) - { - return (AE_NO_MEMORY); - } - - Status = AcpiUtCopySimpleObject (SourceObject, TargetObject); - if (ACPI_FAILURE (Status)) - { - goto ErrorExit; - } - - *ThisTargetPtr = TargetObject; - } - else - { - /* Pass through a null element */ - - *ThisTargetPtr = NULL; - } - break; - - - case ACPI_COPY_TYPE_PACKAGE: - - /* - * This object is a package - go down another nesting level - * Create and build the package object - */ - TargetObject = AcpiUtCreatePackageObject (SourceObject->Package.Count); - if (!TargetObject) - { - return (AE_NO_MEMORY); - } - - TargetObject->Common.Flags = SourceObject->Common.Flags; - - /* Pass the new package object back to the package walk routine */ - - State->Pkg.ThisTargetObj = TargetObject; - - /* Store the object pointer in the parent package object */ - - *ThisTargetPtr = TargetObject; - break; - - - default: - return (AE_BAD_PARAMETER); - } - - return (Status); - -ErrorExit: - AcpiUtRemoveReference (TargetObject); - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCopyIpackageToIpackage - * - * PARAMETERS: SourceObj - Pointer to the source package object - * DestObj - Where the internal object is returned - * WalkState - Current Walk state descriptor - * - * RETURN: Status - * - * DESCRIPTION: This function is called to copy an internal package object - * into another internal package object. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiUtCopyIpackageToIpackage ( - ACPI_OPERAND_OBJECT *SourceObj, - ACPI_OPERAND_OBJECT *DestObj, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (UtCopyIpackageToIpackage); - - - DestObj->Common.Type = SourceObj->Common.Type; - DestObj->Common.Flags = SourceObj->Common.Flags; - DestObj->Package.Count = SourceObj->Package.Count; - - /* - * Create the object array and walk the source package tree - */ - DestObj->Package.Elements = ACPI_ALLOCATE_ZEROED ( - ((ACPI_SIZE) SourceObj->Package.Count + 1) * - sizeof (void *)); - if (!DestObj->Package.Elements) - { - ACPI_ERROR ((AE_INFO, "Package allocation failure")); - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* - * Copy the package element-by-element by walking the package "tree". - * This handles nested packages of arbitrary depth. - */ - Status = AcpiUtWalkPackageTree (SourceObj, DestObj, - AcpiUtCopyIelementToIelement, WalkState); - if (ACPI_FAILURE (Status)) - { - /* On failure, delete the destination package object */ - - AcpiUtRemoveReference (DestObj); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCopyIobjectToIobject - * - * PARAMETERS: SourceDesc - The internal object to be copied - * DestDesc - Where the copied object is returned - * WalkState - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Copy an internal object to a new internal object - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtCopyIobjectToIobject ( - ACPI_OPERAND_OBJECT *SourceDesc, - ACPI_OPERAND_OBJECT **DestDesc, - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (UtCopyIobjectToIobject); - - - /* Create the top level object */ - - *DestDesc = AcpiUtCreateInternalObject (SourceDesc->Common.Type); - if (!*DestDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Copy the object and possible subobjects */ - - if (SourceDesc->Common.Type == ACPI_TYPE_PACKAGE) - { - Status = AcpiUtCopyIpackageToIpackage (SourceDesc, *DestDesc, - WalkState); - } - else - { - Status = AcpiUtCopySimpleObject (SourceDesc, *DestDesc); - } - - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utdebug.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utdebug.c deleted file mode 100644 index 3901b07d1..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utdebug.c +++ /dev/null @@ -1,814 +0,0 @@ -/****************************************************************************** - * - * Module Name: utdebug - Debug print routines - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __UTDEBUG_C__ - -#include "acpi.h" -#include "accommon.h" - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utdebug") - - -#ifdef ACPI_DEBUG_OUTPUT - -static ACPI_THREAD_ID AcpiGbl_PrevThreadId = (ACPI_THREAD_ID) 0xFFFFFFFF; -static char *AcpiGbl_FnEntryStr = "----Entry"; -static char *AcpiGbl_FnExitStr = "----Exit-"; - -/* Local prototypes */ - -static const char * -AcpiUtTrimFunctionName ( - const char *FunctionName); - - -/******************************************************************************* - * - * FUNCTION: AcpiUtInitStackPtrTrace - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Save the current CPU stack pointer at subsystem startup - * - ******************************************************************************/ - -void -AcpiUtInitStackPtrTrace ( - void) -{ - ACPI_SIZE CurrentSp; - - - AcpiGbl_EntryStackPointer = &CurrentSp; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtTrackStackPtr - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Save the current CPU stack pointer - * - ******************************************************************************/ - -void -AcpiUtTrackStackPtr ( - void) -{ - ACPI_SIZE CurrentSp; - - - if (&CurrentSp < AcpiGbl_LowestStackPointer) - { - AcpiGbl_LowestStackPointer = &CurrentSp; - } - - if (AcpiGbl_NestingLevel > AcpiGbl_DeepestNesting) - { - AcpiGbl_DeepestNesting = AcpiGbl_NestingLevel; - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtTrimFunctionName - * - * PARAMETERS: FunctionName - Ascii string containing a procedure name - * - * RETURN: Updated pointer to the function name - * - * DESCRIPTION: Remove the "Acpi" prefix from the function name, if present. - * This allows compiler macros such as __FUNCTION__ to be used - * with no change to the debug output. - * - ******************************************************************************/ - -static const char * -AcpiUtTrimFunctionName ( - const char *FunctionName) -{ - - /* All Function names are longer than 4 chars, check is safe */ - - if (*(ACPI_CAST_PTR (UINT32, FunctionName)) == ACPI_PREFIX_MIXED) - { - /* This is the case where the original source has not been modified */ - - return (FunctionName + 4); - } - - if (*(ACPI_CAST_PTR (UINT32, FunctionName)) == ACPI_PREFIX_LOWER) - { - /* This is the case where the source has been 'linuxized' */ - - return (FunctionName + 5); - } - - return (FunctionName); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiDebugPrint - * - * PARAMETERS: RequestedDebugLevel - Requested debug print level - * LineNumber - Caller's line number (for error output) - * FunctionName - Caller's procedure name - * ModuleName - Caller's module name - * ComponentId - Caller's component ID - * Format - Printf format field - * ... - Optional printf arguments - * - * RETURN: None - * - * DESCRIPTION: Print error message with prefix consisting of the module name, - * line number, and component ID. - * - ******************************************************************************/ - -void ACPI_INTERNAL_VAR_XFACE -AcpiDebugPrint ( - UINT32 RequestedDebugLevel, - UINT32 LineNumber, - const char *FunctionName, - const char *ModuleName, - UINT32 ComponentId, - const char *Format, - ...) -{ - ACPI_THREAD_ID ThreadId; - va_list args; - - - /* - * Stay silent if the debug level or component ID is disabled - */ - if (!(RequestedDebugLevel & AcpiDbgLevel) || - !(ComponentId & AcpiDbgLayer)) - { - return; - } - - /* - * Thread tracking and context switch notification - */ - ThreadId = AcpiOsGetThreadId (); - if (ThreadId != AcpiGbl_PrevThreadId) - { - if (ACPI_LV_THREADS & AcpiDbgLevel) - { - AcpiOsPrintf ( - "\n**** Context Switch from TID %p to TID %p ****\n\n", - ACPI_CAST_PTR (void, AcpiGbl_PrevThreadId), - ACPI_CAST_PTR (void, ThreadId)); - } - - AcpiGbl_PrevThreadId = ThreadId; - } - - /* - * Display the module name, current line number, thread ID (if requested), - * current procedure nesting level, and the current procedure name - */ - AcpiOsPrintf ("%8s-%04ld ", ModuleName, LineNumber); - - if (ACPI_LV_THREADS & AcpiDbgLevel) - { - AcpiOsPrintf ("[%p] ", ACPI_CAST_PTR (void, ThreadId)); - } - - AcpiOsPrintf ("[%02ld] %-22.22s: ", - AcpiGbl_NestingLevel, AcpiUtTrimFunctionName (FunctionName)); - - va_start (args, Format); - AcpiOsVprintf (Format, args); - va_end (args); -} - -ACPI_EXPORT_SYMBOL (AcpiDebugPrint) - - -/******************************************************************************* - * - * FUNCTION: AcpiDebugPrintRaw - * - * PARAMETERS: RequestedDebugLevel - Requested debug print level - * LineNumber - Caller's line number - * FunctionName - Caller's procedure name - * ModuleName - Caller's module name - * ComponentId - Caller's component ID - * Format - Printf format field - * ... - Optional printf arguments - * - * RETURN: None - * - * DESCRIPTION: Print message with no headers. Has same interface as - * DebugPrint so that the same macros can be used. - * - ******************************************************************************/ - -void ACPI_INTERNAL_VAR_XFACE -AcpiDebugPrintRaw ( - UINT32 RequestedDebugLevel, - UINT32 LineNumber, - const char *FunctionName, - const char *ModuleName, - UINT32 ComponentId, - const char *Format, - ...) -{ - va_list args; - - - if (!(RequestedDebugLevel & AcpiDbgLevel) || - !(ComponentId & AcpiDbgLayer)) - { - return; - } - - va_start (args, Format); - AcpiOsVprintf (Format, args); - va_end (args); -} - -ACPI_EXPORT_SYMBOL (AcpiDebugPrintRaw) - - -/******************************************************************************* - * - * FUNCTION: AcpiUtTrace - * - * PARAMETERS: LineNumber - Caller's line number - * FunctionName - Caller's procedure name - * ModuleName - Caller's module name - * ComponentId - Caller's component ID - * - * RETURN: None - * - * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is - * set in DebugLevel - * - ******************************************************************************/ - -void -AcpiUtTrace ( - UINT32 LineNumber, - const char *FunctionName, - const char *ModuleName, - UINT32 ComponentId) -{ - - AcpiGbl_NestingLevel++; - AcpiUtTrackStackPtr (); - - AcpiDebugPrint (ACPI_LV_FUNCTIONS, - LineNumber, FunctionName, ModuleName, ComponentId, - "%s\n", AcpiGbl_FnEntryStr); -} - -ACPI_EXPORT_SYMBOL (AcpiUtTrace) - - -/******************************************************************************* - * - * FUNCTION: AcpiUtTracePtr - * - * PARAMETERS: LineNumber - Caller's line number - * FunctionName - Caller's procedure name - * ModuleName - Caller's module name - * ComponentId - Caller's component ID - * Pointer - Pointer to display - * - * RETURN: None - * - * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is - * set in DebugLevel - * - ******************************************************************************/ - -void -AcpiUtTracePtr ( - UINT32 LineNumber, - const char *FunctionName, - const char *ModuleName, - UINT32 ComponentId, - void *Pointer) -{ - AcpiGbl_NestingLevel++; - AcpiUtTrackStackPtr (); - - AcpiDebugPrint (ACPI_LV_FUNCTIONS, - LineNumber, FunctionName, ModuleName, ComponentId, - "%s %p\n", AcpiGbl_FnEntryStr, Pointer); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtTraceStr - * - * PARAMETERS: LineNumber - Caller's line number - * FunctionName - Caller's procedure name - * ModuleName - Caller's module name - * ComponentId - Caller's component ID - * String - Additional string to display - * - * RETURN: None - * - * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is - * set in DebugLevel - * - ******************************************************************************/ - -void -AcpiUtTraceStr ( - UINT32 LineNumber, - const char *FunctionName, - const char *ModuleName, - UINT32 ComponentId, - char *String) -{ - - AcpiGbl_NestingLevel++; - AcpiUtTrackStackPtr (); - - AcpiDebugPrint (ACPI_LV_FUNCTIONS, - LineNumber, FunctionName, ModuleName, ComponentId, - "%s %s\n", AcpiGbl_FnEntryStr, String); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtTraceU32 - * - * PARAMETERS: LineNumber - Caller's line number - * FunctionName - Caller's procedure name - * ModuleName - Caller's module name - * ComponentId - Caller's component ID - * Integer - Integer to display - * - * RETURN: None - * - * DESCRIPTION: Function entry trace. Prints only if TRACE_FUNCTIONS bit is - * set in DebugLevel - * - ******************************************************************************/ - -void -AcpiUtTraceU32 ( - UINT32 LineNumber, - const char *FunctionName, - const char *ModuleName, - UINT32 ComponentId, - UINT32 Integer) -{ - - AcpiGbl_NestingLevel++; - AcpiUtTrackStackPtr (); - - AcpiDebugPrint (ACPI_LV_FUNCTIONS, - LineNumber, FunctionName, ModuleName, ComponentId, - "%s %08X\n", AcpiGbl_FnEntryStr, Integer); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtExit - * - * PARAMETERS: LineNumber - Caller's line number - * FunctionName - Caller's procedure name - * ModuleName - Caller's module name - * ComponentId - Caller's component ID - * - * RETURN: None - * - * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is - * set in DebugLevel - * - ******************************************************************************/ - -void -AcpiUtExit ( - UINT32 LineNumber, - const char *FunctionName, - const char *ModuleName, - UINT32 ComponentId) -{ - - AcpiDebugPrint (ACPI_LV_FUNCTIONS, - LineNumber, FunctionName, ModuleName, ComponentId, - "%s\n", AcpiGbl_FnExitStr); - - AcpiGbl_NestingLevel--; -} - -ACPI_EXPORT_SYMBOL (AcpiUtExit) - - -/******************************************************************************* - * - * FUNCTION: AcpiUtStatusExit - * - * PARAMETERS: LineNumber - Caller's line number - * FunctionName - Caller's procedure name - * ModuleName - Caller's module name - * ComponentId - Caller's component ID - * Status - Exit status code - * - * RETURN: None - * - * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is - * set in DebugLevel. Prints exit status also. - * - ******************************************************************************/ - -void -AcpiUtStatusExit ( - UINT32 LineNumber, - const char *FunctionName, - const char *ModuleName, - UINT32 ComponentId, - ACPI_STATUS Status) -{ - - if (ACPI_SUCCESS (Status)) - { - AcpiDebugPrint (ACPI_LV_FUNCTIONS, - LineNumber, FunctionName, ModuleName, ComponentId, - "%s %s\n", AcpiGbl_FnExitStr, - AcpiFormatException (Status)); - } - else - { - AcpiDebugPrint (ACPI_LV_FUNCTIONS, - LineNumber, FunctionName, ModuleName, ComponentId, - "%s ****Exception****: %s\n", AcpiGbl_FnExitStr, - AcpiFormatException (Status)); - } - - AcpiGbl_NestingLevel--; -} - -ACPI_EXPORT_SYMBOL (AcpiUtStatusExit) - - -/******************************************************************************* - * - * FUNCTION: AcpiUtValueExit - * - * PARAMETERS: LineNumber - Caller's line number - * FunctionName - Caller's procedure name - * ModuleName - Caller's module name - * ComponentId - Caller's component ID - * Value - Value to be printed with exit msg - * - * RETURN: None - * - * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is - * set in DebugLevel. Prints exit value also. - * - ******************************************************************************/ - -void -AcpiUtValueExit ( - UINT32 LineNumber, - const char *FunctionName, - const char *ModuleName, - UINT32 ComponentId, - ACPI_INTEGER Value) -{ - - AcpiDebugPrint (ACPI_LV_FUNCTIONS, - LineNumber, FunctionName, ModuleName, ComponentId, - "%s %8.8X%8.8X\n", AcpiGbl_FnExitStr, - ACPI_FORMAT_UINT64 (Value)); - - AcpiGbl_NestingLevel--; -} - -ACPI_EXPORT_SYMBOL (AcpiUtValueExit) - - -/******************************************************************************* - * - * FUNCTION: AcpiUtPtrExit - * - * PARAMETERS: LineNumber - Caller's line number - * FunctionName - Caller's procedure name - * ModuleName - Caller's module name - * ComponentId - Caller's component ID - * Ptr - Pointer to display - * - * RETURN: None - * - * DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is - * set in DebugLevel. Prints exit value also. - * - ******************************************************************************/ - -void -AcpiUtPtrExit ( - UINT32 LineNumber, - const char *FunctionName, - const char *ModuleName, - UINT32 ComponentId, - UINT8 *Ptr) -{ - - AcpiDebugPrint (ACPI_LV_FUNCTIONS, - LineNumber, FunctionName, ModuleName, ComponentId, - "%s %p\n", AcpiGbl_FnExitStr, Ptr); - - AcpiGbl_NestingLevel--; -} - -#endif - - -/******************************************************************************* - * - * FUNCTION: AcpiUtDumpBuffer - * - * PARAMETERS: Buffer - Buffer to dump - * Count - Amount to dump, in bytes - * Display - BYTE, WORD, DWORD, or QWORD display - * ComponentID - Caller's component ID - * - * RETURN: None - * - * DESCRIPTION: Generic dump buffer in both hex and ascii. - * - ******************************************************************************/ - -void -AcpiUtDumpBuffer2 ( - UINT8 *Buffer, - UINT32 Count, - UINT32 Display) -{ - UINT32 i = 0; - UINT32 j; - UINT32 Temp32; - UINT8 BufChar; - - - if (!Buffer) - { - AcpiOsPrintf ("Null Buffer Pointer in DumpBuffer!\n"); - return; - } - - if ((Count < 4) || (Count & 0x01)) - { - Display = DB_BYTE_DISPLAY; - } - - /* Nasty little dump buffer routine! */ - - while (i < Count) - { - /* Print current offset */ - - AcpiOsPrintf ("%6.4X: ", i); - - /* Print 16 hex chars */ - - for (j = 0; j < 16;) - { - if (i + j >= Count) - { - /* Dump fill spaces */ - - AcpiOsPrintf ("%*s", ((Display * 2) + 1), " "); - j += Display; - continue; - } - - switch (Display) - { - case DB_BYTE_DISPLAY: - default: /* Default is BYTE display */ - - AcpiOsPrintf ("%02X ", Buffer[(ACPI_SIZE) i + j]); - break; - - - case DB_WORD_DISPLAY: - - ACPI_MOVE_16_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); - AcpiOsPrintf ("%04X ", Temp32); - break; - - - case DB_DWORD_DISPLAY: - - ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); - AcpiOsPrintf ("%08X ", Temp32); - break; - - - case DB_QWORD_DISPLAY: - - ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]); - AcpiOsPrintf ("%08X", Temp32); - - ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j + 4]); - AcpiOsPrintf ("%08X ", Temp32); - break; - } - - j += Display; - } - - /* - * Print the ASCII equivalent characters but watch out for the bad - * unprintable ones (printable chars are 0x20 through 0x7E) - */ - AcpiOsPrintf (" "); - for (j = 0; j < 16; j++) - { - if (i + j >= Count) - { - AcpiOsPrintf ("\n"); - return; - } - - BufChar = Buffer[(ACPI_SIZE) i + j]; - if (ACPI_IS_PRINT (BufChar)) - { - AcpiOsPrintf ("%c", BufChar); - } - else - { - AcpiOsPrintf ("."); - } - } - - /* Done with that line. */ - - AcpiOsPrintf ("\n"); - i += 16; - } - - return; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtDumpBuffer - * - * PARAMETERS: Buffer - Buffer to dump - * Count - Amount to dump, in bytes - * Display - BYTE, WORD, DWORD, or QWORD display - * ComponentID - Caller's component ID - * - * RETURN: None - * - * DESCRIPTION: Generic dump buffer in both hex and ascii. - * - ******************************************************************************/ - -void -AcpiUtDumpBuffer ( - UINT8 *Buffer, - UINT32 Count, - UINT32 Display, - UINT32 ComponentId) -{ - - /* Only dump the buffer if tracing is enabled */ - - if (!((ACPI_LV_TABLES & AcpiDbgLevel) && - (ComponentId & AcpiDbgLayer))) - { - return; - } - - AcpiUtDumpBuffer2 (Buffer, Count, Display); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utdelete.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utdelete.c deleted file mode 100644 index bf30aee74..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utdelete.c +++ /dev/null @@ -1,828 +0,0 @@ -/******************************************************************************* - * - * Module Name: utdelete - object deletion and reference count utilities - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __UTDELETE_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "acevents.h" - - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utdelete") - -/* Local prototypes */ - -static void -AcpiUtDeleteInternalObj ( - ACPI_OPERAND_OBJECT *Object); - -static void -AcpiUtUpdateRefCount ( - ACPI_OPERAND_OBJECT *Object, - UINT32 Action); - - -/******************************************************************************* - * - * FUNCTION: AcpiUtDeleteInternalObj - * - * PARAMETERS: Object - Object to be deleted - * - * RETURN: None - * - * DESCRIPTION: Low level object deletion, after reference counts have been - * updated (All reference counts, including sub-objects!) - * - ******************************************************************************/ - -static void -AcpiUtDeleteInternalObj ( - ACPI_OPERAND_OBJECT *Object) -{ - void *ObjPointer = NULL; - ACPI_OPERAND_OBJECT *HandlerDesc; - ACPI_OPERAND_OBJECT *SecondDesc; - ACPI_OPERAND_OBJECT *NextDesc; - ACPI_OPERAND_OBJECT **LastObjPtr; - - - ACPI_FUNCTION_TRACE_PTR (UtDeleteInternalObj, Object); - - - if (!Object) - { - return_VOID; - } - - /* - * Must delete or free any pointers within the object that are not - * actual ACPI objects (for example, a raw buffer pointer). - */ - switch (Object->Common.Type) - { - case ACPI_TYPE_STRING: - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "**** String %p, ptr %p\n", - Object, Object->String.Pointer)); - - /* Free the actual string buffer */ - - if (!(Object->Common.Flags & AOPOBJ_STATIC_POINTER)) - { - /* But only if it is NOT a pointer into an ACPI table */ - - ObjPointer = Object->String.Pointer; - } - break; - - - case ACPI_TYPE_BUFFER: - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "**** Buffer %p, ptr %p\n", - Object, Object->Buffer.Pointer)); - - /* Free the actual buffer */ - - if (!(Object->Common.Flags & AOPOBJ_STATIC_POINTER)) - { - /* But only if it is NOT a pointer into an ACPI table */ - - ObjPointer = Object->Buffer.Pointer; - } - break; - - - case ACPI_TYPE_PACKAGE: - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, " **** Package of count %X\n", - Object->Package.Count)); - - /* - * Elements of the package are not handled here, they are deleted - * separately - */ - - /* Free the (variable length) element pointer array */ - - ObjPointer = Object->Package.Elements; - break; - - - /* - * These objects have a possible list of notify handlers. - * Device object also may have a GPE block. - */ - case ACPI_TYPE_DEVICE: - - if (Object->Device.GpeBlock) - { - (void) AcpiEvDeleteGpeBlock (Object->Device.GpeBlock); - } - - /*lint -fallthrough */ - - case ACPI_TYPE_PROCESSOR: - case ACPI_TYPE_THERMAL: - - /* Walk the notify handler list for this object */ - - HandlerDesc = Object->CommonNotify.Handler; - while (HandlerDesc) - { - NextDesc = HandlerDesc->AddressSpace.Next; - AcpiUtRemoveReference (HandlerDesc); - HandlerDesc = NextDesc; - } - break; - - - case ACPI_TYPE_MUTEX: - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "***** Mutex %p, OS Mutex %p\n", - Object, Object->Mutex.OsMutex)); - - if (Object == AcpiGbl_GlobalLockMutex) - { - /* Global Lock has extra semaphore */ - - (void) AcpiOsDeleteSemaphore (AcpiGbl_GlobalLockSemaphore); - AcpiGbl_GlobalLockSemaphore = NULL; - - AcpiOsDeleteMutex (Object->Mutex.OsMutex); - AcpiGbl_GlobalLockMutex = NULL; - } - else - { - AcpiExUnlinkMutex (Object); - AcpiOsDeleteMutex (Object->Mutex.OsMutex); - } - break; - - - case ACPI_TYPE_EVENT: - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "***** Event %p, OS Semaphore %p\n", - Object, Object->Event.OsSemaphore)); - - (void) AcpiOsDeleteSemaphore (Object->Event.OsSemaphore); - Object->Event.OsSemaphore = NULL; - break; - - - case ACPI_TYPE_METHOD: - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "***** Method %p\n", Object)); - - /* Delete the method mutex if it exists */ - - if (Object->Method.Mutex) - { - AcpiOsDeleteMutex (Object->Method.Mutex->Mutex.OsMutex); - AcpiUtDeleteObjectDesc (Object->Method.Mutex); - Object->Method.Mutex = NULL; - } - break; - - - case ACPI_TYPE_REGION: - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "***** Region %p\n", Object)); - - SecondDesc = AcpiNsGetSecondaryObject (Object); - if (SecondDesc) - { - /* - * Free the RegionContext if and only if the handler is one of the - * default handlers -- and therefore, we created the context object - * locally, it was not created by an external caller. - */ - HandlerDesc = Object->Region.Handler; - if (HandlerDesc) - { - NextDesc = HandlerDesc->AddressSpace.RegionList; - LastObjPtr = &HandlerDesc->AddressSpace.RegionList; - - /* Remove the region object from the handler's list */ - - while (NextDesc) - { - if (NextDesc == Object) - { - *LastObjPtr = NextDesc->Region.Next; - break; - } - - /* Walk the linked list of handler */ - - LastObjPtr = &NextDesc->Region.Next; - NextDesc = NextDesc->Region.Next; - } - - if (HandlerDesc->AddressSpace.HandlerFlags & - ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) - { - /* Deactivate region and free region context */ - - if (HandlerDesc->AddressSpace.Setup) - { - (void) HandlerDesc->AddressSpace.Setup (Object, - ACPI_REGION_DEACTIVATE, - HandlerDesc->AddressSpace.Context, - &SecondDesc->Extra.RegionContext); - } - } - - AcpiUtRemoveReference (HandlerDesc); - } - - /* Now we can free the Extra object */ - - AcpiUtDeleteObjectDesc (SecondDesc); - } - break; - - - case ACPI_TYPE_BUFFER_FIELD: - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "***** Buffer Field %p\n", Object)); - - SecondDesc = AcpiNsGetSecondaryObject (Object); - if (SecondDesc) - { - AcpiUtDeleteObjectDesc (SecondDesc); - } - break; - - - case ACPI_TYPE_LOCAL_BANK_FIELD: - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "***** Bank Field %p\n", Object)); - - SecondDesc = AcpiNsGetSecondaryObject (Object); - if (SecondDesc) - { - AcpiUtDeleteObjectDesc (SecondDesc); - } - break; - - - default: - break; - } - - /* Free any allocated memory (pointer within the object) found above */ - - if (ObjPointer) - { - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Deleting Object Subptr %p\n", - ObjPointer)); - ACPI_FREE (ObjPointer); - } - - /* Now the object can be safely deleted */ - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Deleting Object %p [%s]\n", - Object, AcpiUtGetObjectTypeName (Object))); - - AcpiUtDeleteObjectDesc (Object); - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtDeleteInternalObjectList - * - * PARAMETERS: ObjList - Pointer to the list to be deleted - * - * RETURN: None - * - * DESCRIPTION: This function deletes an internal object list, including both - * simple objects and package objects - * - ******************************************************************************/ - -void -AcpiUtDeleteInternalObjectList ( - ACPI_OPERAND_OBJECT **ObjList) -{ - ACPI_OPERAND_OBJECT **InternalObj; - - - ACPI_FUNCTION_TRACE (UtDeleteInternalObjectList); - - - /* Walk the null-terminated internal list */ - - for (InternalObj = ObjList; *InternalObj; InternalObj++) - { - AcpiUtRemoveReference (*InternalObj); - } - - /* Free the combined parameter pointer list and object array */ - - ACPI_FREE (ObjList); - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtUpdateRefCount - * - * PARAMETERS: Object - Object whose ref count is to be updated - * Action - What to do - * - * RETURN: New ref count - * - * DESCRIPTION: Modify the ref count and return it. - * - ******************************************************************************/ - -static void -AcpiUtUpdateRefCount ( - ACPI_OPERAND_OBJECT *Object, - UINT32 Action) -{ - UINT16 Count; - UINT16 NewCount; - - - ACPI_FUNCTION_NAME (UtUpdateRefCount); - - - if (!Object) - { - return; - } - - Count = Object->Common.ReferenceCount; - NewCount = Count; - - /* - * Perform the reference count action (increment, decrement, force delete) - */ - switch (Action) - { - case REF_INCREMENT: - - NewCount++; - Object->Common.ReferenceCount = NewCount; - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "Obj %p Refs=%X, [Incremented]\n", - Object, NewCount)); - break; - - case REF_DECREMENT: - - if (Count < 1) - { - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "Obj %p Refs=%X, can't decrement! (Set to 0)\n", - Object, NewCount)); - - NewCount = 0; - } - else - { - NewCount--; - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "Obj %p Refs=%X, [Decremented]\n", - Object, NewCount)); - } - - if (Object->Common.Type == ACPI_TYPE_METHOD) - { - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "Method Obj %p Refs=%X, [Decremented]\n", Object, NewCount)); - } - - Object->Common.ReferenceCount = NewCount; - if (NewCount == 0) - { - AcpiUtDeleteInternalObj (Object); - } - break; - - case REF_FORCE_DELETE: - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "Obj %p Refs=%X, Force delete! (Set to 0)\n", Object, Count)); - - NewCount = 0; - Object->Common.ReferenceCount = NewCount; - AcpiUtDeleteInternalObj (Object); - break; - - default: - - ACPI_ERROR ((AE_INFO, "Unknown action (%X)", Action)); - break; - } - - /* - * Sanity check the reference count, for debug purposes only. - * (A deleted object will have a huge reference count) - */ - if (Count > ACPI_MAX_REFERENCE_COUNT) - { - ACPI_WARNING ((AE_INFO, - "Large Reference Count (%X) in object %p", Count, Object)); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtUpdateObjectReference - * - * PARAMETERS: Object - Increment ref count for this object - * and all sub-objects - * Action - Either REF_INCREMENT or REF_DECREMENT or - * REF_FORCE_DELETE - * - * RETURN: Status - * - * DESCRIPTION: Increment the object reference count - * - * Object references are incremented when: - * 1) An object is attached to a Node (namespace object) - * 2) An object is copied (all subobjects must be incremented) - * - * Object references are decremented when: - * 1) An object is detached from an Node - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtUpdateObjectReference ( - ACPI_OPERAND_OBJECT *Object, - UINT16 Action) -{ - ACPI_STATUS Status = AE_OK; - ACPI_GENERIC_STATE *StateList = NULL; - ACPI_OPERAND_OBJECT *NextObject = NULL; - ACPI_GENERIC_STATE *State; - UINT32 i; - - - ACPI_FUNCTION_TRACE_PTR (UtUpdateObjectReference, Object); - - - while (Object) - { - /* Make sure that this isn't a namespace handle */ - - if (ACPI_GET_DESCRIPTOR_TYPE (Object) == ACPI_DESC_TYPE_NAMED) - { - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "Object %p is NS handle\n", Object)); - return_ACPI_STATUS (AE_OK); - } - - /* - * All sub-objects must have their reference count incremented also. - * Different object types have different subobjects. - */ - switch (Object->Common.Type) - { - case ACPI_TYPE_DEVICE: - case ACPI_TYPE_PROCESSOR: - case ACPI_TYPE_POWER: - case ACPI_TYPE_THERMAL: - - /* Update the notify objects for these types (if present) */ - - AcpiUtUpdateRefCount (Object->CommonNotify.SystemNotify, Action); - AcpiUtUpdateRefCount (Object->CommonNotify.DeviceNotify, Action); - break; - - case ACPI_TYPE_PACKAGE: - /* - * We must update all the sub-objects of the package, - * each of whom may have their own sub-objects. - */ - for (i = 0; i < Object->Package.Count; i++) - { - /* - * Push each element onto the stack for later processing. - * Note: There can be null elements within the package, - * these are simply ignored - */ - Status = AcpiUtCreateUpdateStateAndPush ( - Object->Package.Elements[i], Action, &StateList); - if (ACPI_FAILURE (Status)) - { - goto ErrorExit; - } - } - break; - - case ACPI_TYPE_BUFFER_FIELD: - - NextObject = Object->BufferField.BufferObj; - break; - - case ACPI_TYPE_LOCAL_REGION_FIELD: - - NextObject = Object->Field.RegionObj; - break; - - case ACPI_TYPE_LOCAL_BANK_FIELD: - - NextObject = Object->BankField.BankObj; - Status = AcpiUtCreateUpdateStateAndPush ( - Object->BankField.RegionObj, Action, &StateList); - if (ACPI_FAILURE (Status)) - { - goto ErrorExit; - } - break; - - case ACPI_TYPE_LOCAL_INDEX_FIELD: - - NextObject = Object->IndexField.IndexObj; - Status = AcpiUtCreateUpdateStateAndPush ( - Object->IndexField.DataObj, Action, &StateList); - if (ACPI_FAILURE (Status)) - { - goto ErrorExit; - } - break; - - case ACPI_TYPE_LOCAL_REFERENCE: - /* - * The target of an Index (a package, string, or buffer) or a named - * reference must track changes to the ref count of the index or - * target object. - */ - if ((Object->Reference.Class == ACPI_REFCLASS_INDEX) || - (Object->Reference.Class== ACPI_REFCLASS_NAME)) - { - NextObject = Object->Reference.Object; - } - break; - - case ACPI_TYPE_REGION: - default: - break; /* No subobjects for all other types */ - } - - /* - * Now we can update the count in the main object. This can only - * happen after we update the sub-objects in case this causes the - * main object to be deleted. - */ - AcpiUtUpdateRefCount (Object, Action); - Object = NULL; - - /* Move on to the next object to be updated */ - - if (NextObject) - { - Object = NextObject; - NextObject = NULL; - } - else if (StateList) - { - State = AcpiUtPopGenericState (&StateList); - Object = State->Update.Object; - AcpiUtDeleteGenericState (State); - } - } - - return_ACPI_STATUS (AE_OK); - - -ErrorExit: - - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not update object reference count")); - - /* Free any stacked Update State objects */ - - while (StateList) - { - State = AcpiUtPopGenericState (&StateList); - AcpiUtDeleteGenericState (State); - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtAddReference - * - * PARAMETERS: Object - Object whose reference count is to be - * incremented - * - * RETURN: None - * - * DESCRIPTION: Add one reference to an ACPI object - * - ******************************************************************************/ - -void -AcpiUtAddReference ( - ACPI_OPERAND_OBJECT *Object) -{ - - ACPI_FUNCTION_TRACE_PTR (UtAddReference, Object); - - - /* Ensure that we have a valid object */ - - if (!AcpiUtValidInternalObject (Object)) - { - return_VOID; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "Obj %p Current Refs=%X [To Be Incremented]\n", - Object, Object->Common.ReferenceCount)); - - /* Increment the reference count */ - - (void) AcpiUtUpdateObjectReference (Object, REF_INCREMENT); - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtRemoveReference - * - * PARAMETERS: Object - Object whose ref count will be decremented - * - * RETURN: None - * - * DESCRIPTION: Decrement the reference count of an ACPI internal object - * - ******************************************************************************/ - -void -AcpiUtRemoveReference ( - ACPI_OPERAND_OBJECT *Object) -{ - - ACPI_FUNCTION_TRACE_PTR (UtRemoveReference, Object); - - - /* - * Allow a NULL pointer to be passed in, just ignore it. This saves - * each caller from having to check. Also, ignore NS nodes. - * - */ - if (!Object || - (ACPI_GET_DESCRIPTOR_TYPE (Object) == ACPI_DESC_TYPE_NAMED)) - - { - return_VOID; - } - - /* Ensure that we have a valid object */ - - if (!AcpiUtValidInternalObject (Object)) - { - return_VOID; - } - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "Obj %p Current Refs=%X [To Be Decremented]\n", - Object, Object->Common.ReferenceCount)); - - /* - * Decrement the reference count, and only actually delete the object - * if the reference count becomes 0. (Must also decrement the ref count - * of all subobjects!) - */ - (void) AcpiUtUpdateObjectReference (Object, REF_DECREMENT); - return_VOID; -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/uteval.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/uteval.c deleted file mode 100644 index ecb0cf19a..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/uteval.c +++ /dev/null @@ -1,575 +0,0 @@ -/****************************************************************************** - * - * Module Name: uteval - Object evaluation - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __UTEVAL_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("uteval") - - -/* - * Strings supported by the _OSI predefined (internal) method. - * - * March 2009: Removed "Linux" as this host no longer wants to respond true - * for this string. Basically, the only safe OS strings are windows-related - * and in many or most cases represent the only test path within the - * BIOS-provided ASL code. - * - * The second element of each entry is used to track the newest version of - * Windows that the BIOS has requested. - */ -static const ACPI_INTERFACE_INFO AcpiInterfacesSupported[] = -{ - /* Operating System Vendor Strings */ - - {"Windows 2000", ACPI_OSI_WIN_2000}, /* Windows 2000 */ - {"Windows 2001", ACPI_OSI_WIN_XP}, /* Windows XP */ - {"Windows 2001 SP1", ACPI_OSI_WIN_XP_SP1}, /* Windows XP SP1 */ - {"Windows 2001.1", ACPI_OSI_WINSRV_2003}, /* Windows Server 2003 */ - {"Windows 2001 SP2", ACPI_OSI_WIN_XP_SP2}, /* Windows XP SP2 */ - {"Windows 2001.1 SP1", ACPI_OSI_WINSRV_2003_SP1}, /* Windows Server 2003 SP1 - Added 03/2006 */ - {"Windows 2006", ACPI_OSI_WIN_VISTA}, /* Windows Vista - Added 03/2006 */ - {"Windows 2006.1", ACPI_OSI_WINSRV_2008}, /* Windows Server 2008 - Added 09/2009 */ - {"Windows 2006 SP1", ACPI_OSI_WIN_VISTA_SP1}, /* Windows Vista SP1 - Added 09/2009 */ - {"Windows 2009", ACPI_OSI_WIN_7}, /* Windows 7 and Server 2008 R2 - Added 09/2009 */ - - /* Feature Group Strings */ - - {"Extended Address Space Descriptor", 0} - - /* - * All "optional" feature group strings (features that are implemented - * by the host) should be implemented in the host version of - * AcpiOsValidateInterface and should not be added here. - */ -}; - - -/******************************************************************************* - * - * FUNCTION: AcpiUtOsiImplementation - * - * PARAMETERS: WalkState - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Implementation of the _OSI predefined control method - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtOsiImplementation ( - ACPI_WALK_STATE *WalkState) -{ - ACPI_STATUS Status; - ACPI_OPERAND_OBJECT *StringDesc; - ACPI_OPERAND_OBJECT *ReturnDesc; - UINT32 ReturnValue; - UINT32 i; - - - ACPI_FUNCTION_TRACE (UtOsiImplementation); - - - /* Validate the string input argument */ - - StringDesc = WalkState->Arguments[0].Object; - if (!StringDesc || (StringDesc->Common.Type != ACPI_TYPE_STRING)) - { - return_ACPI_STATUS (AE_TYPE); - } - - /* Create a return object */ - - ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); - if (!ReturnDesc) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Default return value is 0, NOT SUPPORTED */ - - ReturnValue = 0; - - /* Compare input string to static table of supported interfaces */ - - for (i = 0; i < ACPI_ARRAY_LENGTH (AcpiInterfacesSupported); i++) - { - if (!ACPI_STRCMP (StringDesc->String.Pointer, - AcpiInterfacesSupported[i].Name)) - { - /* - * The interface is supported. - * Update the OsiData if necessary. We keep track of the latest - * version of Windows that has been requested by the BIOS. - */ - if (AcpiInterfacesSupported[i].Value > AcpiGbl_OsiData) - { - AcpiGbl_OsiData = AcpiInterfacesSupported[i].Value; - } - - ReturnValue = ACPI_UINT32_MAX; - goto Exit; - } - } - - /* - * Did not match the string in the static table, call the host OSL to - * check for a match with one of the optional strings (such as - * "Module Device", "3.0 Thermal Model", etc.) - */ - Status = AcpiOsValidateInterface (StringDesc->String.Pointer); - if (ACPI_SUCCESS (Status)) - { - /* The interface is supported */ - - ReturnValue = ACPI_UINT32_MAX; - } - - -Exit: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, - "ACPI: BIOS _OSI(%s) is %ssupported\n", - StringDesc->String.Pointer, ReturnValue == 0 ? "not " : "")); - - /* Complete the return value */ - - ReturnDesc->Integer.Value = ReturnValue; - WalkState->ReturnDesc = ReturnDesc; - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtEvaluateObject - * - * PARAMETERS: PrefixNode - Starting node - * Path - Path to object from starting node - * ExpectedReturnTypes - Bitmap of allowed return types - * ReturnDesc - Where a return value is stored - * - * RETURN: Status - * - * DESCRIPTION: Evaluates a namespace object and verifies the type of the - * return object. Common code that simplifies accessing objects - * that have required return objects of fixed types. - * - * NOTE: Internal function, no parameter validation - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtEvaluateObject ( - ACPI_NAMESPACE_NODE *PrefixNode, - char *Path, - UINT32 ExpectedReturnBtypes, - ACPI_OPERAND_OBJECT **ReturnDesc) -{ - ACPI_EVALUATE_INFO *Info; - ACPI_STATUS Status; - UINT32 ReturnBtype; - - - ACPI_FUNCTION_TRACE (UtEvaluateObject); - - - /* Allocate the evaluation information block */ - - Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO)); - if (!Info) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - Info->PrefixNode = PrefixNode; - Info->Pathname = Path; - - /* Evaluate the object/method */ - - Status = AcpiNsEvaluate (Info); - if (ACPI_FAILURE (Status)) - { - if (Status == AE_NOT_FOUND) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s.%s] was not found\n", - AcpiUtGetNodeName (PrefixNode), Path)); - } - else - { - ACPI_ERROR_METHOD ("Method execution failed", - PrefixNode, Path, Status); - } - - goto Cleanup; - } - - /* Did we get a return object? */ - - if (!Info->ReturnObject) - { - if (ExpectedReturnBtypes) - { - ACPI_ERROR_METHOD ("No object was returned from", - PrefixNode, Path, AE_NOT_EXIST); - - Status = AE_NOT_EXIST; - } - - goto Cleanup; - } - - /* Map the return object type to the bitmapped type */ - - switch ((Info->ReturnObject)->Common.Type) - { - case ACPI_TYPE_INTEGER: - ReturnBtype = ACPI_BTYPE_INTEGER; - break; - - case ACPI_TYPE_BUFFER: - ReturnBtype = ACPI_BTYPE_BUFFER; - break; - - case ACPI_TYPE_STRING: - ReturnBtype = ACPI_BTYPE_STRING; - break; - - case ACPI_TYPE_PACKAGE: - ReturnBtype = ACPI_BTYPE_PACKAGE; - break; - - default: - ReturnBtype = 0; - break; - } - - if ((AcpiGbl_EnableInterpreterSlack) && - (!ExpectedReturnBtypes)) - { - /* - * We received a return object, but one was not expected. This can - * happen frequently if the "implicit return" feature is enabled. - * Just delete the return object and return AE_OK. - */ - AcpiUtRemoveReference (Info->ReturnObject); - goto Cleanup; - } - - /* Is the return object one of the expected types? */ - - if (!(ExpectedReturnBtypes & ReturnBtype)) - { - ACPI_ERROR_METHOD ("Return object type is incorrect", - PrefixNode, Path, AE_TYPE); - - ACPI_ERROR ((AE_INFO, - "Type returned from %s was incorrect: %s, expected Btypes: %X", - Path, AcpiUtGetObjectTypeName (Info->ReturnObject), - ExpectedReturnBtypes)); - - /* On error exit, we must delete the return object */ - - AcpiUtRemoveReference (Info->ReturnObject); - Status = AE_TYPE; - goto Cleanup; - } - - /* Object type is OK, return it */ - - *ReturnDesc = Info->ReturnObject; - -Cleanup: - ACPI_FREE (Info); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtEvaluateNumericObject - * - * PARAMETERS: ObjectName - Object name to be evaluated - * DeviceNode - Node for the device - * Value - Where the value is returned - * - * RETURN: Status - * - * DESCRIPTION: Evaluates a numeric namespace object for a selected device - * and stores result in *Value. - * - * NOTE: Internal function, no parameter validation - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtEvaluateNumericObject ( - char *ObjectName, - ACPI_NAMESPACE_NODE *DeviceNode, - ACPI_INTEGER *Value) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (UtEvaluateNumericObject); - - - Status = AcpiUtEvaluateObject (DeviceNode, ObjectName, - ACPI_BTYPE_INTEGER, &ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Get the returned Integer */ - - *Value = ObjDesc->Integer.Value; - - /* On exit, we must delete the return object */ - - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtExecute_STA - * - * PARAMETERS: DeviceNode - Node for the device - * Flags - Where the status flags are returned - * - * RETURN: Status - * - * DESCRIPTION: Executes _STA for selected device and stores results in - * *Flags. - * - * NOTE: Internal function, no parameter validation - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtExecute_STA ( - ACPI_NAMESPACE_NODE *DeviceNode, - UINT32 *Flags) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (UtExecute_STA); - - - Status = AcpiUtEvaluateObject (DeviceNode, METHOD_NAME__STA, - ACPI_BTYPE_INTEGER, &ObjDesc); - if (ACPI_FAILURE (Status)) - { - if (AE_NOT_FOUND == Status) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "_STA on %4.4s was not found, assuming device is present\n", - AcpiUtGetNodeName (DeviceNode))); - - *Flags = ACPI_UINT32_MAX; - Status = AE_OK; - } - - return_ACPI_STATUS (Status); - } - - /* Extract the status flags */ - - *Flags = (UINT32) ObjDesc->Integer.Value; - - /* On exit, we must delete the return object */ - - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtExecutePowerMethods - * - * PARAMETERS: DeviceNode - Node for the device - * MethodNames - Array of power method names - * MethodCount - Number of methods to execute - * OutValues - Where the power method values are returned - * - * RETURN: Status, OutValues - * - * DESCRIPTION: Executes the specified power methods for the device and returns - * the result(s). - * - * NOTE: Internal function, no parameter validation - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtExecutePowerMethods ( - ACPI_NAMESPACE_NODE *DeviceNode, - const char **MethodNames, - UINT8 MethodCount, - UINT8 *OutValues) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_STATUS Status; - ACPI_STATUS FinalStatus = AE_NOT_FOUND; - UINT32 i; - - - ACPI_FUNCTION_TRACE (UtExecutePowerMethods); - - - for (i = 0; i < MethodCount; i++) - { - /* - * Execute the power method (_SxD or _SxW). The only allowable - * return type is an Integer. - */ - Status = AcpiUtEvaluateObject (DeviceNode, - ACPI_CAST_PTR (char, MethodNames[i]), - ACPI_BTYPE_INTEGER, &ObjDesc); - if (ACPI_SUCCESS (Status)) - { - OutValues[i] = (UINT8) ObjDesc->Integer.Value; - - /* Delete the return object */ - - AcpiUtRemoveReference (ObjDesc); - FinalStatus = AE_OK; /* At least one value is valid */ - continue; - } - - OutValues[i] = ACPI_UINT8_MAX; - if (Status == AE_NOT_FOUND) - { - continue; /* Ignore if not found */ - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Failed %s on Device %4.4s, %s\n", - ACPI_CAST_PTR (char, MethodNames[i]), - AcpiUtGetNodeName (DeviceNode), AcpiFormatException (Status))); - } - - return_ACPI_STATUS (FinalStatus); -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utglobal.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utglobal.c deleted file mode 100644 index b49ce352f..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utglobal.c +++ /dev/null @@ -1,975 +0,0 @@ -/****************************************************************************** - * - * Module Name: utglobal - Global variables for the ACPI subsystem - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __UTGLOBAL_C__ -#define DEFINE_ACPI_GLOBALS - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utglobal") - - -/******************************************************************************* - * - * Static global variable initialization. - * - ******************************************************************************/ - -/* - * We want the debug switches statically initialized so they - * are already set when the debugger is entered. - */ - -/* Debug switch - level and trace mask */ - -#ifdef ACPI_DEBUG_OUTPUT -UINT32 AcpiDbgLevel = ACPI_DEBUG_DEFAULT; -#else -UINT32 AcpiDbgLevel = ACPI_NORMAL_DEFAULT; -#endif - -/* Debug switch - layer (component) mask */ - -UINT32 AcpiDbgLayer = ACPI_COMPONENT_DEFAULT; -UINT32 AcpiGbl_NestingLevel = 0; - -/* Debugger globals */ - -BOOLEAN AcpiGbl_DbTerminateThreads = FALSE; -BOOLEAN AcpiGbl_AbortMethod = FALSE; -BOOLEAN AcpiGbl_MethodExecuting = FALSE; - -/* System flags */ - -UINT32 AcpiGbl_StartupFlags = 0; - -/* System starts uninitialized */ - -BOOLEAN AcpiGbl_Shutdown = TRUE; - -const char *AcpiGbl_SleepStateNames[ACPI_S_STATE_COUNT] = -{ - "\\_S0_", - "\\_S1_", - "\\_S2_", - "\\_S3_", - "\\_S4_", - "\\_S5_" -}; - -const char *AcpiGbl_LowestDstateNames[ACPI_NUM_SxW_METHODS] = -{ - "_S0W", - "_S1W", - "_S2W", - "_S3W", - "_S4W" -}; - -const char *AcpiGbl_HighestDstateNames[ACPI_NUM_SxD_METHODS] = -{ - "_S1D", - "_S2D", - "_S3D", - "_S4D" -}; - - -/******************************************************************************* - * - * FUNCTION: AcpiFormatException - * - * PARAMETERS: Status - The ACPI_STATUS code to be formatted - * - * RETURN: A string containing the exception text. A valid pointer is - * always returned. - * - * DESCRIPTION: This function translates an ACPI exception into an ASCII string - * It is here instead of utxface.c so it is always present. - * - ******************************************************************************/ - -const char * -AcpiFormatException ( - ACPI_STATUS Status) -{ - const char *Exception = NULL; - - - ACPI_FUNCTION_ENTRY (); - - - Exception = AcpiUtValidateException (Status); - if (!Exception) - { - /* Exception code was not recognized */ - - ACPI_ERROR ((AE_INFO, - "Unknown exception code: 0x%8.8X", Status)); - - Exception = "UNKNOWN_STATUS_CODE"; - } - - return (ACPI_CAST_PTR (const char, Exception)); -} - -ACPI_EXPORT_SYMBOL (AcpiFormatException) - - -/******************************************************************************* - * - * Namespace globals - * - ******************************************************************************/ - -/* - * Predefined ACPI Names (Built-in to the Interpreter) - * - * NOTES: - * 1) _SB_ is defined to be a device to allow \_SB_._INI to be run - * during the initialization sequence. - * 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to - * perform a Notify() operation on it. - */ -const ACPI_PREDEFINED_NAMES AcpiGbl_PreDefinedNames[] = -{ - {"_GPE", ACPI_TYPE_LOCAL_SCOPE, NULL}, - {"_PR_", ACPI_TYPE_LOCAL_SCOPE, NULL}, - {"_SB_", ACPI_TYPE_DEVICE, NULL}, - {"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL}, - {"_TZ_", ACPI_TYPE_THERMAL, NULL}, - {"_REV", ACPI_TYPE_INTEGER, (char *) ACPI_CA_SUPPORT_LEVEL}, - {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME}, - {"_GL_", ACPI_TYPE_MUTEX, (char *) 1}, - -#if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY) - {"_OSI", ACPI_TYPE_METHOD, (char *) 1}, -#endif - - /* Table terminator */ - - {NULL, ACPI_TYPE_ANY, NULL} -}; - -/* - * Properties of the ACPI Object Types, both internal and external. - * The table is indexed by values of ACPI_OBJECT_TYPE - */ -const UINT8 AcpiGbl_NsProperties[ACPI_NUM_NS_TYPES] = -{ - ACPI_NS_NORMAL, /* 00 Any */ - ACPI_NS_NORMAL, /* 01 Number */ - ACPI_NS_NORMAL, /* 02 String */ - ACPI_NS_NORMAL, /* 03 Buffer */ - ACPI_NS_NORMAL, /* 04 Package */ - ACPI_NS_NORMAL, /* 05 FieldUnit */ - ACPI_NS_NEWSCOPE, /* 06 Device */ - ACPI_NS_NORMAL, /* 07 Event */ - ACPI_NS_NEWSCOPE, /* 08 Method */ - ACPI_NS_NORMAL, /* 09 Mutex */ - ACPI_NS_NORMAL, /* 10 Region */ - ACPI_NS_NEWSCOPE, /* 11 Power */ - ACPI_NS_NEWSCOPE, /* 12 Processor */ - ACPI_NS_NEWSCOPE, /* 13 Thermal */ - ACPI_NS_NORMAL, /* 14 BufferField */ - ACPI_NS_NORMAL, /* 15 DdbHandle */ - ACPI_NS_NORMAL, /* 16 Debug Object */ - ACPI_NS_NORMAL, /* 17 DefField */ - ACPI_NS_NORMAL, /* 18 BankField */ - ACPI_NS_NORMAL, /* 19 IndexField */ - ACPI_NS_NORMAL, /* 20 Reference */ - ACPI_NS_NORMAL, /* 21 Alias */ - ACPI_NS_NORMAL, /* 22 MethodAlias */ - ACPI_NS_NORMAL, /* 23 Notify */ - ACPI_NS_NORMAL, /* 24 Address Handler */ - ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 25 Resource Desc */ - ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL, /* 26 Resource Field */ - ACPI_NS_NEWSCOPE, /* 27 Scope */ - ACPI_NS_NORMAL, /* 28 Extra */ - ACPI_NS_NORMAL, /* 29 Data */ - ACPI_NS_NORMAL /* 30 Invalid */ -}; - - -/* Hex to ASCII conversion table */ - -static const char AcpiGbl_HexToAscii[] = -{ - '0','1','2','3','4','5','6','7', - '8','9','A','B','C','D','E','F' -}; - - -/******************************************************************************* - * - * FUNCTION: AcpiUtHexToAsciiChar - * - * PARAMETERS: Integer - Contains the hex digit - * Position - bit position of the digit within the - * integer (multiple of 4) - * - * RETURN: The converted Ascii character - * - * DESCRIPTION: Convert a hex digit to an Ascii character - * - ******************************************************************************/ - -char -AcpiUtHexToAsciiChar ( - ACPI_INTEGER Integer, - UINT32 Position) -{ - - return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]); -} - - -/****************************************************************************** - * - * Event and Hardware globals - * - ******************************************************************************/ - -ACPI_BIT_REGISTER_INFO AcpiGbl_BitRegisterInfo[ACPI_NUM_BITREG] = -{ - /* Name Parent Register Register Bit Position Register Bit Mask */ - - /* ACPI_BITREG_TIMER_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_TIMER_STATUS, ACPI_BITMASK_TIMER_STATUS}, - /* ACPI_BITREG_BUS_MASTER_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_BUS_MASTER_STATUS, ACPI_BITMASK_BUS_MASTER_STATUS}, - /* ACPI_BITREG_GLOBAL_LOCK_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_GLOBAL_LOCK_STATUS, ACPI_BITMASK_GLOBAL_LOCK_STATUS}, - /* ACPI_BITREG_POWER_BUTTON_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_POWER_BUTTON_STATUS, ACPI_BITMASK_POWER_BUTTON_STATUS}, - /* ACPI_BITREG_SLEEP_BUTTON_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_SLEEP_BUTTON_STATUS, ACPI_BITMASK_SLEEP_BUTTON_STATUS}, - /* ACPI_BITREG_RT_CLOCK_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_RT_CLOCK_STATUS, ACPI_BITMASK_RT_CLOCK_STATUS}, - /* ACPI_BITREG_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_WAKE_STATUS, ACPI_BITMASK_WAKE_STATUS}, - /* ACPI_BITREG_PCIEXP_WAKE_STATUS */ {ACPI_REGISTER_PM1_STATUS, ACPI_BITPOSITION_PCIEXP_WAKE_STATUS, ACPI_BITMASK_PCIEXP_WAKE_STATUS}, - - /* ACPI_BITREG_TIMER_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_TIMER_ENABLE, ACPI_BITMASK_TIMER_ENABLE}, - /* ACPI_BITREG_GLOBAL_LOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE, ACPI_BITMASK_GLOBAL_LOCK_ENABLE}, - /* ACPI_BITREG_POWER_BUTTON_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_POWER_BUTTON_ENABLE, ACPI_BITMASK_POWER_BUTTON_ENABLE}, - /* ACPI_BITREG_SLEEP_BUTTON_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE, ACPI_BITMASK_SLEEP_BUTTON_ENABLE}, - /* ACPI_BITREG_RT_CLOCK_ENABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_RT_CLOCK_ENABLE, ACPI_BITMASK_RT_CLOCK_ENABLE}, - /* ACPI_BITREG_PCIEXP_WAKE_DISABLE */ {ACPI_REGISTER_PM1_ENABLE, ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE, ACPI_BITMASK_PCIEXP_WAKE_DISABLE}, - - /* ACPI_BITREG_SCI_ENABLE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_SCI_ENABLE, ACPI_BITMASK_SCI_ENABLE}, - /* ACPI_BITREG_BUS_MASTER_RLD */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_BUS_MASTER_RLD, ACPI_BITMASK_BUS_MASTER_RLD}, - /* ACPI_BITREG_GLOBAL_LOCK_RELEASE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE, ACPI_BITMASK_GLOBAL_LOCK_RELEASE}, - /* ACPI_BITREG_SLEEP_TYPE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_SLEEP_TYPE, ACPI_BITMASK_SLEEP_TYPE}, - /* ACPI_BITREG_SLEEP_ENABLE */ {ACPI_REGISTER_PM1_CONTROL, ACPI_BITPOSITION_SLEEP_ENABLE, ACPI_BITMASK_SLEEP_ENABLE}, - - /* ACPI_BITREG_ARB_DIS */ {ACPI_REGISTER_PM2_CONTROL, ACPI_BITPOSITION_ARB_DISABLE, ACPI_BITMASK_ARB_DISABLE} -}; - - -ACPI_FIXED_EVENT_INFO AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS] = -{ - /* ACPI_EVENT_PMTIMER */ {ACPI_BITREG_TIMER_STATUS, ACPI_BITREG_TIMER_ENABLE, ACPI_BITMASK_TIMER_STATUS, ACPI_BITMASK_TIMER_ENABLE}, - /* ACPI_EVENT_GLOBAL */ {ACPI_BITREG_GLOBAL_LOCK_STATUS, ACPI_BITREG_GLOBAL_LOCK_ENABLE, ACPI_BITMASK_GLOBAL_LOCK_STATUS, ACPI_BITMASK_GLOBAL_LOCK_ENABLE}, - /* ACPI_EVENT_POWER_BUTTON */ {ACPI_BITREG_POWER_BUTTON_STATUS, ACPI_BITREG_POWER_BUTTON_ENABLE, ACPI_BITMASK_POWER_BUTTON_STATUS, ACPI_BITMASK_POWER_BUTTON_ENABLE}, - /* ACPI_EVENT_SLEEP_BUTTON */ {ACPI_BITREG_SLEEP_BUTTON_STATUS, ACPI_BITREG_SLEEP_BUTTON_ENABLE, ACPI_BITMASK_SLEEP_BUTTON_STATUS, ACPI_BITMASK_SLEEP_BUTTON_ENABLE}, - /* ACPI_EVENT_RTC */ {ACPI_BITREG_RT_CLOCK_STATUS, ACPI_BITREG_RT_CLOCK_ENABLE, ACPI_BITMASK_RT_CLOCK_STATUS, ACPI_BITMASK_RT_CLOCK_ENABLE}, -}; - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetRegionName - * - * PARAMETERS: None. - * - * RETURN: Status - * - * DESCRIPTION: Translate a Space ID into a name string (Debug only) - * - ******************************************************************************/ - -/* Region type decoding */ - -const char *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] = -{ - "SystemMemory", - "SystemIO", - "PCI_Config", - "EmbeddedControl", - "SMBus", - "SystemCMOS", - "PCIBARTarget", - "IPMI", - "DataTable" -}; - - -char * -AcpiUtGetRegionName ( - UINT8 SpaceId) -{ - - if (SpaceId >= ACPI_USER_REGION_BEGIN) - { - return ("UserDefinedRegion"); - } - else if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS) - { - return ("InvalidSpaceId"); - } - - return (ACPI_CAST_PTR (char, AcpiGbl_RegionTypes[SpaceId])); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetEventName - * - * PARAMETERS: None. - * - * RETURN: Status - * - * DESCRIPTION: Translate a Event ID into a name string (Debug only) - * - ******************************************************************************/ - -/* Event type decoding */ - -static const char *AcpiGbl_EventTypes[ACPI_NUM_FIXED_EVENTS] = -{ - "PM_Timer", - "GlobalLock", - "PowerButton", - "SleepButton", - "RealTimeClock", -}; - - -char * -AcpiUtGetEventName ( - UINT32 EventId) -{ - - if (EventId > ACPI_EVENT_MAX) - { - return ("InvalidEventID"); - } - - return (ACPI_CAST_PTR (char, AcpiGbl_EventTypes[EventId])); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetTypeName - * - * PARAMETERS: None. - * - * RETURN: Status - * - * DESCRIPTION: Translate a Type ID into a name string (Debug only) - * - ******************************************************************************/ - -/* - * Elements of AcpiGbl_NsTypeNames below must match - * one-to-one with values of ACPI_OBJECT_TYPE - * - * The type ACPI_TYPE_ANY (Untyped) is used as a "don't care" when searching; - * when stored in a table it really means that we have thus far seen no - * evidence to indicate what type is actually going to be stored for this entry. - */ -static const char AcpiGbl_BadType[] = "UNDEFINED"; - -/* Printable names of the ACPI object types */ - -static const char *AcpiGbl_NsTypeNames[] = -{ - /* 00 */ "Untyped", - /* 01 */ "Integer", - /* 02 */ "String", - /* 03 */ "Buffer", - /* 04 */ "Package", - /* 05 */ "FieldUnit", - /* 06 */ "Device", - /* 07 */ "Event", - /* 08 */ "Method", - /* 09 */ "Mutex", - /* 10 */ "Region", - /* 11 */ "Power", - /* 12 */ "Processor", - /* 13 */ "Thermal", - /* 14 */ "BufferField", - /* 15 */ "DdbHandle", - /* 16 */ "DebugObject", - /* 17 */ "RegionField", - /* 18 */ "BankField", - /* 19 */ "IndexField", - /* 20 */ "Reference", - /* 21 */ "Alias", - /* 22 */ "MethodAlias", - /* 23 */ "Notify", - /* 24 */ "AddrHandler", - /* 25 */ "ResourceDesc", - /* 26 */ "ResourceFld", - /* 27 */ "Scope", - /* 28 */ "Extra", - /* 29 */ "Data", - /* 30 */ "Invalid" -}; - - -char * -AcpiUtGetTypeName ( - ACPI_OBJECT_TYPE Type) -{ - - if (Type > ACPI_TYPE_INVALID) - { - return (ACPI_CAST_PTR (char, AcpiGbl_BadType)); - } - - return (ACPI_CAST_PTR (char, AcpiGbl_NsTypeNames[Type])); -} - - -char * -AcpiUtGetObjectTypeName ( - ACPI_OPERAND_OBJECT *ObjDesc) -{ - - if (!ObjDesc) - { - return ("[NULL Object Descriptor]"); - } - - return (AcpiUtGetTypeName (ObjDesc->Common.Type)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetNodeName - * - * PARAMETERS: Object - A namespace node - * - * RETURN: Pointer to a string - * - * DESCRIPTION: Validate the node and return the node's ACPI name. - * - ******************************************************************************/ - -char * -AcpiUtGetNodeName ( - void *Object) -{ - ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) Object; - - - /* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */ - - if (!Object) - { - return ("NULL"); - } - - /* Check for Root node */ - - if ((Object == ACPI_ROOT_OBJECT) || - (Object == AcpiGbl_RootNode)) - { - return ("\"\\\" "); - } - - /* Descriptor must be a namespace node */ - - if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED) - { - return ("####"); - } - - /* - * Ensure name is valid. The name was validated/repaired when the node - * was created, but make sure it has not been corrupted. - */ - AcpiUtRepairName (Node->Name.Ascii); - - /* Return the name */ - - return (Node->Name.Ascii); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetDescriptorName - * - * PARAMETERS: Object - An ACPI object - * - * RETURN: Pointer to a string - * - * DESCRIPTION: Validate object and return the descriptor type - * - ******************************************************************************/ - -/* Printable names of object descriptor types */ - -static const char *AcpiGbl_DescTypeNames[] = -{ - /* 00 */ "Invalid", - /* 01 */ "Cached", - /* 02 */ "State-Generic", - /* 03 */ "State-Update", - /* 04 */ "State-Package", - /* 05 */ "State-Control", - /* 06 */ "State-RootParseScope", - /* 07 */ "State-ParseScope", - /* 08 */ "State-WalkScope", - /* 09 */ "State-Result", - /* 10 */ "State-Notify", - /* 11 */ "State-Thread", - /* 12 */ "Walk", - /* 13 */ "Parser", - /* 14 */ "Operand", - /* 15 */ "Node" -}; - - -char * -AcpiUtGetDescriptorName ( - void *Object) -{ - - if (!Object) - { - return ("NULL OBJECT"); - } - - if (ACPI_GET_DESCRIPTOR_TYPE (Object) > ACPI_DESC_TYPE_MAX) - { - return (ACPI_CAST_PTR (char, AcpiGbl_BadType)); - } - - return (ACPI_CAST_PTR (char, - AcpiGbl_DescTypeNames[ACPI_GET_DESCRIPTOR_TYPE (Object)])); - -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetReferenceName - * - * PARAMETERS: Object - An ACPI reference object - * - * RETURN: Pointer to a string - * - * DESCRIPTION: Decode a reference object sub-type to a string. - * - ******************************************************************************/ - -/* Printable names of reference object sub-types */ - -static const char *AcpiGbl_RefClassNames[] = -{ - /* 00 */ "Local", - /* 01 */ "Argument", - /* 02 */ "RefOf", - /* 03 */ "Index", - /* 04 */ "DdbHandle", - /* 05 */ "Named Object", - /* 06 */ "Debug" -}; - -const char * -AcpiUtGetReferenceName ( - ACPI_OPERAND_OBJECT *Object) -{ - - if (!Object) - { - return ("NULL Object"); - } - - if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND) - { - return ("Not an Operand object"); - } - - if (Object->Common.Type != ACPI_TYPE_LOCAL_REFERENCE) - { - return ("Not a Reference object"); - } - - if (Object->Reference.Class > ACPI_REFCLASS_MAX) - { - return ("Unknown Reference class"); - } - - return (AcpiGbl_RefClassNames[Object->Reference.Class]); -} - - -#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) -/* - * Strings and procedures used for debug only - */ - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetMutexName - * - * PARAMETERS: MutexId - The predefined ID for this mutex. - * - * RETURN: String containing the name of the mutex. Always returns a valid - * pointer. - * - * DESCRIPTION: Translate a mutex ID into a name string (Debug only) - * - ******************************************************************************/ - -char * -AcpiUtGetMutexName ( - UINT32 MutexId) -{ - - if (MutexId > ACPI_MAX_MUTEX) - { - return ("Invalid Mutex ID"); - } - - return (AcpiGbl_MutexNames[MutexId]); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetNotifyName - * - * PARAMETERS: NotifyValue - Value from the Notify() request - * - * RETURN: String corresponding to the Notify Value. - * - * DESCRIPTION: Translate a Notify Value to a notify namestring. - * - ******************************************************************************/ - -/* Names for Notify() values, used for debug output */ - -static const char *AcpiGbl_NotifyValueNames[] = -{ - "Bus Check", - "Device Check", - "Device Wake", - "Eject Request", - "Device Check Light", - "Frequency Mismatch", - "Bus Mode Mismatch", - "Power Fault", - "Capabilities Check", - "Device PLD Check", - "Reserved", - "System Locality Update" -}; - -const char * -AcpiUtGetNotifyName ( - UINT32 NotifyValue) -{ - - if (NotifyValue <= ACPI_NOTIFY_MAX) - { - return (AcpiGbl_NotifyValueNames[NotifyValue]); - } - else if (NotifyValue <= ACPI_MAX_SYS_NOTIFY) - { - return ("Reserved"); - } - else /* Greater or equal to 0x80 */ - { - return ("**Device Specific**"); - } -} -#endif - - -/******************************************************************************* - * - * FUNCTION: AcpiUtValidObjectType - * - * PARAMETERS: Type - Object type to be validated - * - * RETURN: TRUE if valid object type, FALSE otherwise - * - * DESCRIPTION: Validate an object type - * - ******************************************************************************/ - -BOOLEAN -AcpiUtValidObjectType ( - ACPI_OBJECT_TYPE Type) -{ - - if (Type > ACPI_TYPE_LOCAL_MAX) - { - /* Note: Assumes all TYPEs are contiguous (external/local) */ - - return (FALSE); - } - - return (TRUE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtInitGlobals - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Init library globals. All globals that require specific - * initialization should be initialized here! - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtInitGlobals ( - void) -{ - ACPI_STATUS Status; - UINT32 i; - - - ACPI_FUNCTION_TRACE (UtInitGlobals); - - - /* Create all memory caches */ - - Status = AcpiUtCreateCaches (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Mutex locked flags */ - - for (i = 0; i < ACPI_NUM_MUTEX; i++) - { - AcpiGbl_MutexInfo[i].Mutex = NULL; - AcpiGbl_MutexInfo[i].ThreadId = ACPI_MUTEX_NOT_ACQUIRED; - AcpiGbl_MutexInfo[i].UseCount = 0; - } - - for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++) - { - AcpiGbl_OwnerIdMask[i] = 0; - } - - /* Last OwnerID is never valid */ - - AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000; - - /* Event counters */ - - AcpiMethodCount = 0; - AcpiSciCount = 0; - AcpiGpeCount = 0; - - for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) - { - AcpiFixedEventCount[i] = 0; - } - - /* GPE support */ - - AcpiGbl_GpeXruptListHead = NULL; - AcpiGbl_GpeFadtBlocks[0] = NULL; - AcpiGbl_GpeFadtBlocks[1] = NULL; - AcpiCurrentGpeCount = 0; - - /* Global handlers */ - - AcpiGbl_SystemNotify.Handler = NULL; - AcpiGbl_DeviceNotify.Handler = NULL; - AcpiGbl_ExceptionHandler = NULL; - AcpiGbl_InitHandler = NULL; - AcpiGbl_TableHandler = NULL; - - /* Global Lock support */ - - AcpiGbl_GlobalLockSemaphore = NULL; - AcpiGbl_GlobalLockMutex = NULL; - AcpiGbl_GlobalLockAcquired = FALSE; - AcpiGbl_GlobalLockHandle = 0; - AcpiGbl_GlobalLockPresent = FALSE; - - /* Miscellaneous variables */ - - AcpiGbl_CmSingleStep = FALSE; - AcpiGbl_DbTerminateThreads = FALSE; - AcpiGbl_Shutdown = FALSE; - AcpiGbl_NsLookupCount = 0; - AcpiGbl_PsFindCount = 0; - AcpiGbl_AcpiHardwarePresent = TRUE; - AcpiGbl_LastOwnerIdIndex = 0; - AcpiGbl_NextOwnerIdOffset = 0; - AcpiGbl_TraceMethodName = 0; - AcpiGbl_TraceDbgLevel = 0; - AcpiGbl_TraceDbgLayer = 0; - AcpiGbl_DebuggerConfiguration = DEBUGGER_THREADING; - AcpiGbl_DbOutputFlags = ACPI_DB_CONSOLE_OUTPUT; - AcpiGbl_OsiData = 0; - - /* Hardware oriented */ - - AcpiGbl_EventsInitialized = FALSE; - AcpiGbl_SystemAwakeAndRunning = TRUE; - - /* Namespace */ - - AcpiGbl_ModuleCodeList = NULL; - AcpiGbl_RootNode = NULL; - AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME; - AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED; - AcpiGbl_RootNodeStruct.Type = ACPI_TYPE_DEVICE; - AcpiGbl_RootNodeStruct.Child = NULL; - AcpiGbl_RootNodeStruct.Peer = NULL; - AcpiGbl_RootNodeStruct.Object = NULL; - AcpiGbl_RootNodeStruct.Flags = ANOBJ_END_OF_PEER_LIST; - - -#ifdef ACPI_DISASSEMBLER - AcpiGbl_ExternalList = NULL; -#endif - -#ifdef ACPI_DEBUG_OUTPUT - AcpiGbl_LowestStackPointer = ACPI_CAST_PTR (ACPI_SIZE, ACPI_SIZE_MAX); -#endif - -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - AcpiGbl_DisplayFinalMemStats = FALSE; -#endif - - return_ACPI_STATUS (AE_OK); -} - -/* Public globals */ - -ACPI_EXPORT_SYMBOL (AcpiGbl_FADT) -ACPI_EXPORT_SYMBOL (AcpiDbgLevel) -ACPI_EXPORT_SYMBOL (AcpiDbgLayer) -ACPI_EXPORT_SYMBOL (AcpiGpeCount) -ACPI_EXPORT_SYMBOL (AcpiCurrentGpeCount) - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utids.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utids.c deleted file mode 100644 index 766933050..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utids.c +++ /dev/null @@ -1,497 +0,0 @@ -/****************************************************************************** - * - * Module Name: utids - support for device IDs - HID, UID, CID - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __UTIDS_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acinterp.h" - - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utids") - -/* Local prototypes */ - -static void -AcpiUtCopyIdString ( - char *Destination, - char *Source); - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCopyIdString - * - * PARAMETERS: Destination - Where to copy the string - * Source - Source string - * - * RETURN: None - * - * DESCRIPTION: Copies an ID string for the _HID, _CID, and _UID methods. - * Performs removal of a leading asterisk if present -- workaround - * for a known issue on a bunch of machines. - * - ******************************************************************************/ - -static void -AcpiUtCopyIdString ( - char *Destination, - char *Source) -{ - - /* - * Workaround for ID strings that have a leading asterisk. This construct - * is not allowed by the ACPI specification (ID strings must be - * alphanumeric), but enough existing machines have this embedded in their - * ID strings that the following code is useful. - */ - if (*Source == '*') - { - Source++; - } - - /* Do the actual copy */ - - ACPI_STRCPY (Destination, Source); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtExecute_HID - * - * PARAMETERS: DeviceNode - Node for the device - * ReturnId - Where the string HID is returned - * - * RETURN: Status - * - * DESCRIPTION: Executes the _HID control method that returns the hardware - * ID of the device. The HID is either an 32-bit encoded EISAID - * Integer or a String. A string is always returned. An EISAID - * is converted to a string. - * - * NOTE: Internal function, no parameter validation - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtExecute_HID ( - ACPI_NAMESPACE_NODE *DeviceNode, - ACPI_DEVICE_ID **ReturnId) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_DEVICE_ID *Hid; - UINT32 Length; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (UtExecute_HID); - - - Status = AcpiUtEvaluateObject (DeviceNode, METHOD_NAME__HID, - ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING, &ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Get the size of the String to be returned, includes null terminator */ - - if (ObjDesc->Common.Type == ACPI_TYPE_INTEGER) - { - Length = ACPI_EISAID_STRING_SIZE; - } - else - { - Length = ObjDesc->String.Length + 1; - } - - /* Allocate a buffer for the HID */ - - Hid = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_DEVICE_ID) + (ACPI_SIZE) Length); - if (!Hid) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* Area for the string starts after DEVICE_ID struct */ - - Hid->String = ACPI_ADD_PTR (char, Hid, sizeof (ACPI_DEVICE_ID)); - - /* Convert EISAID to a string or simply copy existing string */ - - if (ObjDesc->Common.Type == ACPI_TYPE_INTEGER) - { - AcpiExEisaIdToString (Hid->String, ObjDesc->Integer.Value); - } - else - { - AcpiUtCopyIdString (Hid->String, ObjDesc->String.Pointer); - } - - Hid->Length = Length; - *ReturnId = Hid; - - -Cleanup: - - /* On exit, we must delete the return object */ - - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtExecute_UID - * - * PARAMETERS: DeviceNode - Node for the device - * ReturnId - Where the string UID is returned - * - * RETURN: Status - * - * DESCRIPTION: Executes the _UID control method that returns the unique - * ID of the device. The UID is either a 64-bit Integer (NOT an - * EISAID) or a string. Always returns a string. A 64-bit integer - * is converted to a decimal string. - * - * NOTE: Internal function, no parameter validation - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtExecute_UID ( - ACPI_NAMESPACE_NODE *DeviceNode, - ACPI_DEVICE_ID **ReturnId) -{ - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_DEVICE_ID *Uid; - UINT32 Length; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (UtExecute_UID); - - - Status = AcpiUtEvaluateObject (DeviceNode, METHOD_NAME__UID, - ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING, &ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Get the size of the String to be returned, includes null terminator */ - - if (ObjDesc->Common.Type == ACPI_TYPE_INTEGER) - { - Length = ACPI_MAX64_DECIMAL_DIGITS + 1; - } - else - { - Length = ObjDesc->String.Length + 1; - } - - /* Allocate a buffer for the UID */ - - Uid = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_DEVICE_ID) + (ACPI_SIZE) Length); - if (!Uid) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* Area for the string starts after DEVICE_ID struct */ - - Uid->String = ACPI_ADD_PTR (char, Uid, sizeof (ACPI_DEVICE_ID)); - - /* Convert an Integer to string, or just copy an existing string */ - - if (ObjDesc->Common.Type == ACPI_TYPE_INTEGER) - { - AcpiExIntegerToString (Uid->String, ObjDesc->Integer.Value); - } - else - { - AcpiUtCopyIdString (Uid->String, ObjDesc->String.Pointer); - } - - Uid->Length = Length; - *ReturnId = Uid; - - -Cleanup: - - /* On exit, we must delete the return object */ - - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtExecute_CID - * - * PARAMETERS: DeviceNode - Node for the device - * ReturnCidList - Where the CID list is returned - * - * RETURN: Status, list of CID strings - * - * DESCRIPTION: Executes the _CID control method that returns one or more - * compatible hardware IDs for the device. - * - * NOTE: Internal function, no parameter validation - * - * A _CID method can return either a single compatible ID or a package of - * compatible IDs. Each compatible ID can be one of the following: - * 1) Integer (32 bit compressed EISA ID) or - * 2) String (PCI ID format, e.g. "PCI\VEN_vvvv&DEV_dddd&SUBSYS_ssssssss") - * - * The Integer CIDs are converted to string format by this function. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtExecute_CID ( - ACPI_NAMESPACE_NODE *DeviceNode, - ACPI_DEVICE_ID_LIST **ReturnCidList) -{ - ACPI_OPERAND_OBJECT **CidObjects; - ACPI_OPERAND_OBJECT *ObjDesc; - ACPI_DEVICE_ID_LIST *CidList; - char *NextIdString; - UINT32 StringAreaSize; - UINT32 Length; - UINT32 CidListSize; - ACPI_STATUS Status; - UINT32 Count; - UINT32 i; - - - ACPI_FUNCTION_TRACE (UtExecute_CID); - - - /* Evaluate the _CID method for this device */ - - Status = AcpiUtEvaluateObject (DeviceNode, METHOD_NAME__CID, - ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_PACKAGE, - &ObjDesc); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Get the count and size of the returned _CIDs. _CID can return either - * a Package of Integers/Strings or a single Integer or String. - * Note: This section also validates that all CID elements are of the - * correct type (Integer or String). - */ - if (ObjDesc->Common.Type == ACPI_TYPE_PACKAGE) - { - Count = ObjDesc->Package.Count; - CidObjects = ObjDesc->Package.Elements; - } - else /* Single Integer or String CID */ - { - Count = 1; - CidObjects = &ObjDesc; - } - - StringAreaSize = 0; - for (i = 0; i < Count; i++) - { - /* String lengths include null terminator */ - - switch (CidObjects[i]->Common.Type) - { - case ACPI_TYPE_INTEGER: - StringAreaSize += ACPI_EISAID_STRING_SIZE; - break; - - case ACPI_TYPE_STRING: - StringAreaSize += CidObjects[i]->String.Length + 1; - break; - - default: - Status = AE_TYPE; - goto Cleanup; - } - } - - /* - * Now that we know the length of the CIDs, allocate return buffer: - * 1) Size of the base structure + - * 2) Size of the CID DEVICE_ID array + - * 3) Size of the actual CID strings - */ - CidListSize = sizeof (ACPI_DEVICE_ID_LIST) + - ((Count - 1) * sizeof (ACPI_DEVICE_ID)) + - StringAreaSize; - - CidList = ACPI_ALLOCATE_ZEROED (CidListSize); - if (!CidList) - { - Status = AE_NO_MEMORY; - goto Cleanup; - } - - /* Area for CID strings starts after the CID DEVICE_ID array */ - - NextIdString = ACPI_CAST_PTR (char, CidList->Ids) + - ((ACPI_SIZE) Count * sizeof (ACPI_DEVICE_ID)); - - /* Copy/convert the CIDs to the return buffer */ - - for (i = 0; i < Count; i++) - { - if (CidObjects[i]->Common.Type == ACPI_TYPE_INTEGER) - { - /* Convert the Integer (EISAID) CID to a string */ - - AcpiExEisaIdToString (NextIdString, CidObjects[i]->Integer.Value); - Length = ACPI_EISAID_STRING_SIZE; - } - else /* ACPI_TYPE_STRING */ - { - /* Copy the String CID from the returned object */ - - AcpiUtCopyIdString (NextIdString, CidObjects[i]->String.Pointer); - Length = CidObjects[i]->String.Length + 1; - } - - CidList->Ids[i].String = NextIdString; - CidList->Ids[i].Length = Length; - NextIdString += Length; - } - - /* Finish the CID list */ - - CidList->Count = Count; - CidList->ListSize = CidListSize; - *ReturnCidList = CidList; - - -Cleanup: - - /* On exit, we must delete the _CID return object */ - - AcpiUtRemoveReference (ObjDesc); - return_ACPI_STATUS (Status); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utinit.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utinit.c deleted file mode 100644 index d59904b46..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utinit.c +++ /dev/null @@ -1,228 +0,0 @@ -/****************************************************************************** - * - * Module Name: utinit - Common ACPI subsystem initialization - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __UTINIT_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" -#include "acevents.h" -#include "actables.h" - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utinit") - -/* Local prototypes */ - -static void AcpiUtTerminate ( - void); - - -/****************************************************************************** - * - * FUNCTION: AcpiUtTerminate - * - * PARAMETERS: none - * - * RETURN: none - * - * DESCRIPTION: Free global memory - * - ******************************************************************************/ - -static void -AcpiUtTerminate ( - void) -{ - ACPI_GPE_BLOCK_INFO *GpeBlock; - ACPI_GPE_BLOCK_INFO *NextGpeBlock; - ACPI_GPE_XRUPT_INFO *GpeXruptInfo; - ACPI_GPE_XRUPT_INFO *NextGpeXruptInfo; - - - ACPI_FUNCTION_TRACE (UtTerminate); - - - /* Free global GPE blocks and related info structures */ - - GpeXruptInfo = AcpiGbl_GpeXruptListHead; - while (GpeXruptInfo) - { - GpeBlock = GpeXruptInfo->GpeBlockListHead; - while (GpeBlock) - { - NextGpeBlock = GpeBlock->Next; - ACPI_FREE (GpeBlock->EventInfo); - ACPI_FREE (GpeBlock->RegisterInfo); - ACPI_FREE (GpeBlock); - - GpeBlock = NextGpeBlock; - } - NextGpeXruptInfo = GpeXruptInfo->Next; - ACPI_FREE (GpeXruptInfo); - GpeXruptInfo = NextGpeXruptInfo; - } - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtSubsystemShutdown - * - * PARAMETERS: None - * - * RETURN: None - * - * DESCRIPTION: Shutdown the various components. Do not delete the mutex - * objects here, because the AML debugger may be still running. - * - ******************************************************************************/ - -void -AcpiUtSubsystemShutdown ( - void) -{ - ACPI_FUNCTION_TRACE (UtSubsystemShutdown); - - -#ifndef ACPI_ASL_COMPILER - - /* Close the AcpiEvent Handling */ - - AcpiEvTerminate (); -#endif - - /* Close the Namespace */ - - AcpiNsTerminate (); - - /* Delete the ACPI tables */ - - AcpiTbTerminate (); - - /* Close the globals */ - - AcpiUtTerminate (); - - /* Purge the local caches */ - - (void) AcpiUtDeleteCaches (); - return_VOID; -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utlock.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utlock.c deleted file mode 100644 index dd4e10000..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utlock.c +++ /dev/null @@ -1,277 +0,0 @@ -/****************************************************************************** - * - * Module Name: utlock - Reader/Writer lock interfaces - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __UTLOCK_C__ - -#include "acpi.h" -#include "accommon.h" - - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utlock") - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreateRwLock - * AcpiUtDeleteRwLock - * - * PARAMETERS: Lock - Pointer to a valid RW lock - * - * RETURN: Status - * - * DESCRIPTION: Reader/writer lock creation and deletion interfaces. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtCreateRwLock ( - ACPI_RW_LOCK *Lock) -{ - ACPI_STATUS Status; - - - Lock->NumReaders = 0; - Status = AcpiOsCreateMutex (&Lock->ReaderMutex); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Status = AcpiOsCreateMutex (&Lock->WriterMutex); - return (Status); -} - - -void -AcpiUtDeleteRwLock ( - ACPI_RW_LOCK *Lock) -{ - - AcpiOsDeleteMutex (Lock->ReaderMutex); - AcpiOsDeleteMutex (Lock->WriterMutex); - - Lock->NumReaders = 0; - Lock->ReaderMutex = NULL; - Lock->WriterMutex = NULL; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtAcquireReadLock - * AcpiUtReleaseReadLock - * - * PARAMETERS: Lock - Pointer to a valid RW lock - * - * RETURN: Status - * - * DESCRIPTION: Reader interfaces for reader/writer locks. On acquisition, - * only the first reader acquires the write mutex. On release, - * only the last reader releases the write mutex. Although this - * algorithm can in theory starve writers, this should not be a - * problem with ACPICA since the subsystem is infrequently used - * in comparison to (for example) an I/O system. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtAcquireReadLock ( - ACPI_RW_LOCK *Lock) -{ - ACPI_STATUS Status; - - - Status = AcpiOsAcquireMutex (Lock->ReaderMutex, ACPI_WAIT_FOREVER); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Acquire the write lock only for the first reader */ - - Lock->NumReaders++; - if (Lock->NumReaders == 1) - { - Status = AcpiOsAcquireMutex (Lock->WriterMutex, ACPI_WAIT_FOREVER); - } - - AcpiOsReleaseMutex (Lock->ReaderMutex); - return (Status); -} - - -ACPI_STATUS -AcpiUtReleaseReadLock ( - ACPI_RW_LOCK *Lock) -{ - ACPI_STATUS Status; - - - Status = AcpiOsAcquireMutex (Lock->ReaderMutex, ACPI_WAIT_FOREVER); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - /* Release the write lock only for the very last reader */ - - Lock->NumReaders--; - if (Lock->NumReaders == 0) - { - AcpiOsReleaseMutex (Lock->WriterMutex); - } - - AcpiOsReleaseMutex (Lock->ReaderMutex); - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtAcquireWriteLock - * AcpiUtReleaseWriteLock - * - * PARAMETERS: Lock - Pointer to a valid RW lock - * - * RETURN: Status - * - * DESCRIPTION: Writer interfaces for reader/writer locks. Simply acquire or - * release the writer mutex associated with the lock. Acquisition - * of the lock is fully exclusive and will block all readers and - * writers until it is released. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtAcquireWriteLock ( - ACPI_RW_LOCK *Lock) -{ - ACPI_STATUS Status; - - - Status = AcpiOsAcquireMutex (Lock->WriterMutex, ACPI_WAIT_FOREVER); - return (Status); -} - - -void -AcpiUtReleaseWriteLock ( - ACPI_RW_LOCK *Lock) -{ - - AcpiOsReleaseMutex (Lock->WriterMutex); -} - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utmath.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utmath.c deleted file mode 100644 index b0a40ff2b..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utmath.c +++ /dev/null @@ -1,431 +0,0 @@ -/******************************************************************************* - * - * Module Name: utmath - Integer math support routines - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __UTMATH_C__ - -#include "acpi.h" -#include "accommon.h" - - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utmath") - -/* - * Support for double-precision integer divide. This code is included here - * in order to support kernel environments where the double-precision math - * library is not available. - */ - -#ifndef ACPI_USE_NATIVE_DIVIDE -/******************************************************************************* - * - * FUNCTION: AcpiUtShortDivide - * - * PARAMETERS: Dividend - 64-bit dividend - * Divisor - 32-bit divisor - * OutQuotient - Pointer to where the quotient is returned - * OutRemainder - Pointer to where the remainder is returned - * - * RETURN: Status (Checks for divide-by-zero) - * - * DESCRIPTION: Perform a short (maximum 64 bits divided by 32 bits) - * divide and modulo. The result is a 64-bit quotient and a - * 32-bit remainder. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtShortDivide ( - ACPI_INTEGER Dividend, - UINT32 Divisor, - ACPI_INTEGER *OutQuotient, - UINT32 *OutRemainder) -{ - UINT64_OVERLAY DividendOvl; - UINT64_OVERLAY Quotient; - UINT32 Remainder32; - - - ACPI_FUNCTION_TRACE (UtShortDivide); - - - /* Always check for a zero divisor */ - - if (Divisor == 0) - { - ACPI_ERROR ((AE_INFO, "Divide by zero")); - return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO); - } - - DividendOvl.Full = Dividend; - - /* - * The quotient is 64 bits, the remainder is always 32 bits, - * and is generated by the second divide. - */ - ACPI_DIV_64_BY_32 (0, DividendOvl.Part.Hi, Divisor, - Quotient.Part.Hi, Remainder32); - ACPI_DIV_64_BY_32 (Remainder32, DividendOvl.Part.Lo, Divisor, - Quotient.Part.Lo, Remainder32); - - /* Return only what was requested */ - - if (OutQuotient) - { - *OutQuotient = Quotient.Full; - } - if (OutRemainder) - { - *OutRemainder = Remainder32; - } - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtDivide - * - * PARAMETERS: InDividend - Dividend - * InDivisor - Divisor - * OutQuotient - Pointer to where the quotient is returned - * OutRemainder - Pointer to where the remainder is returned - * - * RETURN: Status (Checks for divide-by-zero) - * - * DESCRIPTION: Perform a divide and modulo. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtDivide ( - ACPI_INTEGER InDividend, - ACPI_INTEGER InDivisor, - ACPI_INTEGER *OutQuotient, - ACPI_INTEGER *OutRemainder) -{ - UINT64_OVERLAY Dividend; - UINT64_OVERLAY Divisor; - UINT64_OVERLAY Quotient; - UINT64_OVERLAY Remainder; - UINT64_OVERLAY NormalizedDividend; - UINT64_OVERLAY NormalizedDivisor; - UINT32 Partial1; - UINT64_OVERLAY Partial2; - UINT64_OVERLAY Partial3; - - - ACPI_FUNCTION_TRACE (UtDivide); - - - /* Always check for a zero divisor */ - - if (InDivisor == 0) - { - ACPI_ERROR ((AE_INFO, "Divide by zero")); - return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO); - } - - Divisor.Full = InDivisor; - Dividend.Full = InDividend; - if (Divisor.Part.Hi == 0) - { - /* - * 1) Simplest case is where the divisor is 32 bits, we can - * just do two divides - */ - Remainder.Part.Hi = 0; - - /* - * The quotient is 64 bits, the remainder is always 32 bits, - * and is generated by the second divide. - */ - ACPI_DIV_64_BY_32 (0, Dividend.Part.Hi, Divisor.Part.Lo, - Quotient.Part.Hi, Partial1); - ACPI_DIV_64_BY_32 (Partial1, Dividend.Part.Lo, Divisor.Part.Lo, - Quotient.Part.Lo, Remainder.Part.Lo); - } - - else - { - /* - * 2) The general case where the divisor is a full 64 bits - * is more difficult - */ - Quotient.Part.Hi = 0; - NormalizedDividend = Dividend; - NormalizedDivisor = Divisor; - - /* Normalize the operands (shift until the divisor is < 32 bits) */ - - do - { - ACPI_SHIFT_RIGHT_64 (NormalizedDivisor.Part.Hi, - NormalizedDivisor.Part.Lo); - ACPI_SHIFT_RIGHT_64 (NormalizedDividend.Part.Hi, - NormalizedDividend.Part.Lo); - - } while (NormalizedDivisor.Part.Hi != 0); - - /* Partial divide */ - - ACPI_DIV_64_BY_32 (NormalizedDividend.Part.Hi, - NormalizedDividend.Part.Lo, - NormalizedDivisor.Part.Lo, - Quotient.Part.Lo, Partial1); - - /* - * The quotient is always 32 bits, and simply requires adjustment. - * The 64-bit remainder must be generated. - */ - Partial1 = Quotient.Part.Lo * Divisor.Part.Hi; - Partial2.Full = (ACPI_INTEGER) Quotient.Part.Lo * Divisor.Part.Lo; - Partial3.Full = (ACPI_INTEGER) Partial2.Part.Hi + Partial1; - - Remainder.Part.Hi = Partial3.Part.Lo; - Remainder.Part.Lo = Partial2.Part.Lo; - - if (Partial3.Part.Hi == 0) - { - if (Partial3.Part.Lo >= Dividend.Part.Hi) - { - if (Partial3.Part.Lo == Dividend.Part.Hi) - { - if (Partial2.Part.Lo > Dividend.Part.Lo) - { - Quotient.Part.Lo--; - Remainder.Full -= Divisor.Full; - } - } - else - { - Quotient.Part.Lo--; - Remainder.Full -= Divisor.Full; - } - } - - Remainder.Full = Remainder.Full - Dividend.Full; - Remainder.Part.Hi = (UINT32) -((INT32) Remainder.Part.Hi); - Remainder.Part.Lo = (UINT32) -((INT32) Remainder.Part.Lo); - - if (Remainder.Part.Lo) - { - Remainder.Part.Hi--; - } - } - } - - /* Return only what was requested */ - - if (OutQuotient) - { - *OutQuotient = Quotient.Full; - } - if (OutRemainder) - { - *OutRemainder = Remainder.Full; - } - - return_ACPI_STATUS (AE_OK); -} - -#else - -/******************************************************************************* - * - * FUNCTION: AcpiUtShortDivide, AcpiUtDivide - * - * PARAMETERS: See function headers above - * - * DESCRIPTION: Native versions of the UtDivide functions. Use these if either - * 1) The target is a 64-bit platform and therefore 64-bit - * integer math is supported directly by the machine. - * 2) The target is a 32-bit or 16-bit platform, and the - * double-precision integer math library is available to - * perform the divide. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtShortDivide ( - ACPI_INTEGER InDividend, - UINT32 Divisor, - ACPI_INTEGER *OutQuotient, - UINT32 *OutRemainder) -{ - - ACPI_FUNCTION_TRACE (UtShortDivide); - - - /* Always check for a zero divisor */ - - if (Divisor == 0) - { - ACPI_ERROR ((AE_INFO, "Divide by zero")); - return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO); - } - - /* Return only what was requested */ - - if (OutQuotient) - { - *OutQuotient = InDividend / Divisor; - } - if (OutRemainder) - { - *OutRemainder = (UINT32) (InDividend % Divisor); - } - - return_ACPI_STATUS (AE_OK); -} - -ACPI_STATUS -AcpiUtDivide ( - ACPI_INTEGER InDividend, - ACPI_INTEGER InDivisor, - ACPI_INTEGER *OutQuotient, - ACPI_INTEGER *OutRemainder) -{ - ACPI_FUNCTION_TRACE (UtDivide); - - - /* Always check for a zero divisor */ - - if (InDivisor == 0) - { - ACPI_ERROR ((AE_INFO, "Divide by zero")); - return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO); - } - - - /* Return only what was requested */ - - if (OutQuotient) - { - *OutQuotient = InDividend / InDivisor; - } - if (OutRemainder) - { - *OutRemainder = InDividend % InDivisor; - } - - return_ACPI_STATUS (AE_OK); -} - -#endif - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utmisc.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utmisc.c deleted file mode 100644 index bc27cd529..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utmisc.c +++ /dev/null @@ -1,1485 +0,0 @@ -/******************************************************************************* - * - * Module Name: utmisc - common utility procedures - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __UTMISC_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utmisc") - -/* - * Common suffix for messages - */ -#define ACPI_COMMON_MSG_SUFFIX \ - AcpiOsPrintf (" (%8.8X/%s-%u)\n", ACPI_CA_VERSION, ModuleName, LineNumber) - - -/******************************************************************************* - * - * FUNCTION: AcpiUtValidateException - * - * PARAMETERS: Status - The ACPI_STATUS code to be formatted - * - * RETURN: A string containing the exception text. NULL if exception is - * not valid. - * - * DESCRIPTION: This function validates and translates an ACPI exception into - * an ASCII string. - * - ******************************************************************************/ - -const char * -AcpiUtValidateException ( - ACPI_STATUS Status) -{ - UINT32 SubStatus; - const char *Exception = NULL; - - - ACPI_FUNCTION_ENTRY (); - - - /* - * Status is composed of two parts, a "type" and an actual code - */ - SubStatus = (Status & ~AE_CODE_MASK); - - switch (Status & AE_CODE_MASK) - { - case AE_CODE_ENVIRONMENTAL: - - if (SubStatus <= AE_CODE_ENV_MAX) - { - Exception = AcpiGbl_ExceptionNames_Env [SubStatus]; - } - break; - - case AE_CODE_PROGRAMMER: - - if (SubStatus <= AE_CODE_PGM_MAX) - { - Exception = AcpiGbl_ExceptionNames_Pgm [SubStatus]; - } - break; - - case AE_CODE_ACPI_TABLES: - - if (SubStatus <= AE_CODE_TBL_MAX) - { - Exception = AcpiGbl_ExceptionNames_Tbl [SubStatus]; - } - break; - - case AE_CODE_AML: - - if (SubStatus <= AE_CODE_AML_MAX) - { - Exception = AcpiGbl_ExceptionNames_Aml [SubStatus]; - } - break; - - case AE_CODE_CONTROL: - - if (SubStatus <= AE_CODE_CTRL_MAX) - { - Exception = AcpiGbl_ExceptionNames_Ctrl [SubStatus]; - } - break; - - default: - break; - } - - return (ACPI_CAST_PTR (const char, Exception)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtIsPciRootBridge - * - * PARAMETERS: Id - The HID/CID in string format - * - * RETURN: TRUE if the Id is a match for a PCI/PCI-Express Root Bridge - * - * DESCRIPTION: Determine if the input ID is a PCI Root Bridge ID. - * - ******************************************************************************/ - -BOOLEAN -AcpiUtIsPciRootBridge ( - char *Id) -{ - - /* - * Check if this is a PCI root bridge. - * ACPI 3.0+: check for a PCI Express root also. - */ - if (!(ACPI_STRCMP (Id, - PCI_ROOT_HID_STRING)) || - - !(ACPI_STRCMP (Id, - PCI_EXPRESS_ROOT_HID_STRING))) - { - return (TRUE); - } - - return (FALSE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtIsAmlTable - * - * PARAMETERS: Table - An ACPI table - * - * RETURN: TRUE if table contains executable AML; FALSE otherwise - * - * DESCRIPTION: Check ACPI Signature for a table that contains AML code. - * Currently, these are DSDT,SSDT,PSDT. All other table types are - * data tables that do not contain AML code. - * - ******************************************************************************/ - -BOOLEAN -AcpiUtIsAmlTable ( - ACPI_TABLE_HEADER *Table) -{ - - /* These are the only tables that contain executable AML */ - - if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_DSDT) || - ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_PSDT) || - ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_SSDT)) - { - return (TRUE); - } - - return (FALSE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtAllocateOwnerId - * - * PARAMETERS: OwnerId - Where the new owner ID is returned - * - * RETURN: Status - * - * DESCRIPTION: Allocate a table or method owner ID. The owner ID is used to - * track objects created by the table or method, to be deleted - * when the method exits or the table is unloaded. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtAllocateOwnerId ( - ACPI_OWNER_ID *OwnerId) -{ - UINT32 i; - UINT32 j; - UINT32 k; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (UtAllocateOwnerId); - - - /* Guard against multiple allocations of ID to the same location */ - - if (*OwnerId) - { - ACPI_ERROR ((AE_INFO, "Owner ID [%2.2X] already exists", *OwnerId)); - return_ACPI_STATUS (AE_ALREADY_EXISTS); - } - - /* Mutex for the global ID mask */ - - Status = AcpiUtAcquireMutex (ACPI_MTX_CACHES); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Find a free owner ID, cycle through all possible IDs on repeated - * allocations. (ACPI_NUM_OWNERID_MASKS + 1) because first index may have - * to be scanned twice. - */ - for (i = 0, j = AcpiGbl_LastOwnerIdIndex; - i < (ACPI_NUM_OWNERID_MASKS + 1); - i++, j++) - { - if (j >= ACPI_NUM_OWNERID_MASKS) - { - j = 0; /* Wraparound to start of mask array */ - } - - for (k = AcpiGbl_NextOwnerIdOffset; k < 32; k++) - { - if (AcpiGbl_OwnerIdMask[j] == ACPI_UINT32_MAX) - { - /* There are no free IDs in this mask */ - - break; - } - - if (!(AcpiGbl_OwnerIdMask[j] & (1 << k))) - { - /* - * Found a free ID. The actual ID is the bit index plus one, - * making zero an invalid Owner ID. Save this as the last ID - * allocated and update the global ID mask. - */ - AcpiGbl_OwnerIdMask[j] |= (1 << k); - - AcpiGbl_LastOwnerIdIndex = (UINT8) j; - AcpiGbl_NextOwnerIdOffset = (UINT8) (k + 1); - - /* - * Construct encoded ID from the index and bit position - * - * Note: Last [j].k (bit 255) is never used and is marked - * permanently allocated (prevents +1 overflow) - */ - *OwnerId = (ACPI_OWNER_ID) ((k + 1) + ACPI_MUL_32 (j)); - - ACPI_DEBUG_PRINT ((ACPI_DB_VALUES, - "Allocated OwnerId: %2.2X\n", (unsigned int) *OwnerId)); - goto Exit; - } - } - - AcpiGbl_NextOwnerIdOffset = 0; - } - - /* - * All OwnerIds have been allocated. This typically should - * not happen since the IDs are reused after deallocation. The IDs are - * allocated upon table load (one per table) and method execution, and - * they are released when a table is unloaded or a method completes - * execution. - * - * If this error happens, there may be very deep nesting of invoked control - * methods, or there may be a bug where the IDs are not released. - */ - Status = AE_OWNER_ID_LIMIT; - ACPI_ERROR ((AE_INFO, - "Could not allocate new OwnerId (255 max), AE_OWNER_ID_LIMIT")); - -Exit: - (void) AcpiUtReleaseMutex (ACPI_MTX_CACHES); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtReleaseOwnerId - * - * PARAMETERS: OwnerIdPtr - Pointer to a previously allocated OwnerID - * - * RETURN: None. No error is returned because we are either exiting a - * control method or unloading a table. Either way, we would - * ignore any error anyway. - * - * DESCRIPTION: Release a table or method owner ID. Valid IDs are 1 - 255 - * - ******************************************************************************/ - -void -AcpiUtReleaseOwnerId ( - ACPI_OWNER_ID *OwnerIdPtr) -{ - ACPI_OWNER_ID OwnerId = *OwnerIdPtr; - ACPI_STATUS Status; - UINT32 Index; - UINT32 Bit; - - - ACPI_FUNCTION_TRACE_U32 (UtReleaseOwnerId, OwnerId); - - - /* Always clear the input OwnerId (zero is an invalid ID) */ - - *OwnerIdPtr = 0; - - /* Zero is not a valid OwnerID */ - - if (OwnerId == 0) - { - ACPI_ERROR ((AE_INFO, "Invalid OwnerId: %2.2X", OwnerId)); - return_VOID; - } - - /* Mutex for the global ID mask */ - - Status = AcpiUtAcquireMutex (ACPI_MTX_CACHES); - if (ACPI_FAILURE (Status)) - { - return_VOID; - } - - /* Normalize the ID to zero */ - - OwnerId--; - - /* Decode ID to index/offset pair */ - - Index = ACPI_DIV_32 (OwnerId); - Bit = 1 << ACPI_MOD_32 (OwnerId); - - /* Free the owner ID only if it is valid */ - - if (AcpiGbl_OwnerIdMask[Index] & Bit) - { - AcpiGbl_OwnerIdMask[Index] ^= Bit; - } - else - { - ACPI_ERROR ((AE_INFO, - "Release of non-allocated OwnerId: %2.2X", OwnerId + 1)); - } - - (void) AcpiUtReleaseMutex (ACPI_MTX_CACHES); - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtStrupr (strupr) - * - * PARAMETERS: SrcString - The source string to convert - * - * RETURN: None - * - * DESCRIPTION: Convert string to uppercase - * - * NOTE: This is not a POSIX function, so it appears here, not in utclib.c - * - ******************************************************************************/ - -void -AcpiUtStrupr ( - char *SrcString) -{ - char *String; - - - ACPI_FUNCTION_ENTRY (); - - - if (!SrcString) - { - return; - } - - /* Walk entire string, uppercasing the letters */ - - for (String = SrcString; *String; String++) - { - *String = (char) ACPI_TOUPPER (*String); - } - - return; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtPrintString - * - * PARAMETERS: String - Null terminated ASCII string - * MaxLength - Maximum output length - * - * RETURN: None - * - * DESCRIPTION: Dump an ASCII string with support for ACPI-defined escape - * sequences. - * - ******************************************************************************/ - -void -AcpiUtPrintString ( - char *String, - UINT8 MaxLength) -{ - UINT32 i; - - - if (!String) - { - AcpiOsPrintf ("<\"NULL STRING PTR\">"); - return; - } - - AcpiOsPrintf ("\""); - for (i = 0; String[i] && (i < MaxLength); i++) - { - /* Escape sequences */ - - switch (String[i]) - { - case 0x07: - AcpiOsPrintf ("\\a"); /* BELL */ - break; - - case 0x08: - AcpiOsPrintf ("\\b"); /* BACKSPACE */ - break; - - case 0x0C: - AcpiOsPrintf ("\\f"); /* FORMFEED */ - break; - - case 0x0A: - AcpiOsPrintf ("\\n"); /* LINEFEED */ - break; - - case 0x0D: - AcpiOsPrintf ("\\r"); /* CARRIAGE RETURN*/ - break; - - case 0x09: - AcpiOsPrintf ("\\t"); /* HORIZONTAL TAB */ - break; - - case 0x0B: - AcpiOsPrintf ("\\v"); /* VERTICAL TAB */ - break; - - case '\'': /* Single Quote */ - case '\"': /* Double Quote */ - case '\\': /* Backslash */ - AcpiOsPrintf ("\\%c", (int) String[i]); - break; - - default: - - /* Check for printable character or hex escape */ - - if (ACPI_IS_PRINT (String[i])) - { - /* This is a normal character */ - - AcpiOsPrintf ("%c", (int) String[i]); - } - else - { - /* All others will be Hex escapes */ - - AcpiOsPrintf ("\\x%2.2X", (INT32) String[i]); - } - break; - } - } - AcpiOsPrintf ("\""); - - if (i == MaxLength && String[i]) - { - AcpiOsPrintf ("..."); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtDwordByteSwap - * - * PARAMETERS: Value - Value to be converted - * - * RETURN: UINT32 integer with bytes swapped - * - * DESCRIPTION: Convert a 32-bit value to big-endian (swap the bytes) - * - ******************************************************************************/ - -UINT32 -AcpiUtDwordByteSwap ( - UINT32 Value) -{ - union - { - UINT32 Value; - UINT8 Bytes[4]; - } Out; - union - { - UINT32 Value; - UINT8 Bytes[4]; - } In; - - - ACPI_FUNCTION_ENTRY (); - - - In.Value = Value; - - Out.Bytes[0] = In.Bytes[3]; - Out.Bytes[1] = In.Bytes[2]; - Out.Bytes[2] = In.Bytes[1]; - Out.Bytes[3] = In.Bytes[0]; - - return (Out.Value); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtSetIntegerWidth - * - * PARAMETERS: Revision From DSDT header - * - * RETURN: None - * - * DESCRIPTION: Set the global integer bit width based upon the revision - * of the DSDT. For Revision 1 and 0, Integers are 32 bits. - * For Revision 2 and above, Integers are 64 bits. Yes, this - * makes a difference. - * - ******************************************************************************/ - -void -AcpiUtSetIntegerWidth ( - UINT8 Revision) -{ - - if (Revision < 2) - { - /* 32-bit case */ - - AcpiGbl_IntegerBitWidth = 32; - AcpiGbl_IntegerNybbleWidth = 8; - AcpiGbl_IntegerByteWidth = 4; - } - else - { - /* 64-bit case (ACPI 2.0+) */ - - AcpiGbl_IntegerBitWidth = 64; - AcpiGbl_IntegerNybbleWidth = 16; - AcpiGbl_IntegerByteWidth = 8; - } -} - - -#ifdef ACPI_DEBUG_OUTPUT -/******************************************************************************* - * - * FUNCTION: AcpiUtDisplayInitPathname - * - * PARAMETERS: Type - Object type of the node - * ObjHandle - Handle whose pathname will be displayed - * Path - Additional path string to be appended. - * (NULL if no extra path) - * - * RETURN: ACPI_STATUS - * - * DESCRIPTION: Display full pathname of an object, DEBUG ONLY - * - ******************************************************************************/ - -void -AcpiUtDisplayInitPathname ( - UINT8 Type, - ACPI_NAMESPACE_NODE *ObjHandle, - char *Path) -{ - ACPI_STATUS Status; - ACPI_BUFFER Buffer; - - - ACPI_FUNCTION_ENTRY (); - - - /* Only print the path if the appropriate debug level is enabled */ - - if (!(AcpiDbgLevel & ACPI_LV_INIT_NAMES)) - { - return; - } - - /* Get the full pathname to the node */ - - Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; - Status = AcpiNsHandleToPathname (ObjHandle, &Buffer); - if (ACPI_FAILURE (Status)) - { - return; - } - - /* Print what we're doing */ - - switch (Type) - { - case ACPI_TYPE_METHOD: - AcpiOsPrintf ("Executing "); - break; - - default: - AcpiOsPrintf ("Initializing "); - break; - } - - /* Print the object type and pathname */ - - AcpiOsPrintf ("%-12s %s", - AcpiUtGetTypeName (Type), (char *) Buffer.Pointer); - - /* Extra path is used to append names like _STA, _INI, etc. */ - - if (Path) - { - AcpiOsPrintf (".%s", Path); - } - AcpiOsPrintf ("\n"); - - ACPI_FREE (Buffer.Pointer); -} -#endif - - -/******************************************************************************* - * - * FUNCTION: AcpiUtValidAcpiChar - * - * PARAMETERS: Char - The character to be examined - * Position - Byte position (0-3) - * - * RETURN: TRUE if the character is valid, FALSE otherwise - * - * DESCRIPTION: Check for a valid ACPI character. Must be one of: - * 1) Upper case alpha - * 2) numeric - * 3) underscore - * - * We allow a '!' as the last character because of the ASF! table - * - ******************************************************************************/ - -BOOLEAN -AcpiUtValidAcpiChar ( - char Character, - UINT32 Position) -{ - - if (!((Character >= 'A' && Character <= 'Z') || - (Character >= '0' && Character <= '9') || - (Character == '_'))) - { - /* Allow a '!' in the last position */ - - if (Character == '!' && Position == 3) - { - return (TRUE); - } - - return (FALSE); - } - - return (TRUE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtValidAcpiName - * - * PARAMETERS: Name - The name to be examined - * - * RETURN: TRUE if the name is valid, FALSE otherwise - * - * DESCRIPTION: Check for a valid ACPI name. Each character must be one of: - * 1) Upper case alpha - * 2) numeric - * 3) underscore - * - ******************************************************************************/ - -BOOLEAN -AcpiUtValidAcpiName ( - UINT32 Name) -{ - UINT32 i; - - - ACPI_FUNCTION_ENTRY (); - - - for (i = 0; i < ACPI_NAME_SIZE; i++) - { - if (!AcpiUtValidAcpiChar ((ACPI_CAST_PTR (char, &Name))[i], i)) - { - return (FALSE); - } - } - - return (TRUE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtRepairName - * - * PARAMETERS: Name - The ACPI name to be repaired - * - * RETURN: Repaired version of the name - * - * DESCRIPTION: Repair an ACPI name: Change invalid characters to '*' and - * return the new name. NOTE: the Name parameter must reside in - * read/write memory, cannot be a const. - * - * An ACPI Name must consist of valid ACPI characters. We will repair the name - * if necessary because we don't want to abort because of this, but we want - * all namespace names to be printable. A warning message is appropriate. - * - * This issue came up because there are in fact machines that exhibit - * this problem, and we want to be able to enable ACPI support for them, - * even though there are a few bad names. - * - ******************************************************************************/ - -void -AcpiUtRepairName ( - char *Name) -{ - UINT32 i; - BOOLEAN FoundBadChar = FALSE; - - - ACPI_FUNCTION_NAME (UtRepairName); - - - /* Check each character in the name */ - - for (i = 0; i < ACPI_NAME_SIZE; i++) - { - if (AcpiUtValidAcpiChar (Name[i], i)) - { - continue; - } - - /* - * Replace a bad character with something printable, yet technically - * still invalid. This prevents any collisions with existing "good" - * names in the namespace. - */ - Name[i] = '*'; - FoundBadChar = TRUE; - } - - if (FoundBadChar) - { - /* Report warning only if in strict mode or debug mode */ - - if (!AcpiGbl_EnableInterpreterSlack) - { - ACPI_WARNING ((AE_INFO, - "Found bad character(s) in name, repaired: [%4.4s]\n", Name)); - } - else - { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Found bad character(s) in name, repaired: [%4.4s]\n", Name)); - } - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtStrtoul64 - * - * PARAMETERS: String - Null terminated string - * Base - Radix of the string: 16 or ACPI_ANY_BASE; - * ACPI_ANY_BASE means 'in behalf of ToInteger' - * RetInteger - Where the converted integer is returned - * - * RETURN: Status and Converted value - * - * DESCRIPTION: Convert a string into an unsigned value. Performs either a - * 32-bit or 64-bit conversion, depending on the current mode - * of the interpreter. - * NOTE: Does not support Octal strings, not needed. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtStrtoul64 ( - char *String, - UINT32 Base, - ACPI_INTEGER *RetInteger) -{ - UINT32 ThisDigit = 0; - ACPI_INTEGER ReturnValue = 0; - ACPI_INTEGER Quotient; - ACPI_INTEGER Dividend; - UINT32 ToIntegerOp = (Base == ACPI_ANY_BASE); - UINT32 Mode32 = (AcpiGbl_IntegerByteWidth == 4); - UINT8 ValidDigits = 0; - UINT8 SignOf0x = 0; - UINT8 Term = 0; - - - ACPI_FUNCTION_TRACE_STR (UtStroul64, String); - - - switch (Base) - { - case ACPI_ANY_BASE: - case 16: - break; - - default: - /* Invalid Base */ - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - if (!String) - { - goto ErrorExit; - } - - /* Skip over any white space in the buffer */ - - while ((*String) && (ACPI_IS_SPACE (*String) || *String == '\t')) - { - String++; - } - - if (ToIntegerOp) - { - /* - * Base equal to ACPI_ANY_BASE means 'ToInteger operation case'. - * We need to determine if it is decimal or hexadecimal. - */ - if ((*String == '0') && (ACPI_TOLOWER (*(String + 1)) == 'x')) - { - SignOf0x = 1; - Base = 16; - - /* Skip over the leading '0x' */ - String += 2; - } - else - { - Base = 10; - } - } - - /* Any string left? Check that '0x' is not followed by white space. */ - - if (!(*String) || ACPI_IS_SPACE (*String) || *String == '\t') - { - if (ToIntegerOp) - { - goto ErrorExit; - } - else - { - goto AllDone; - } - } - - /* - * Perform a 32-bit or 64-bit conversion, depending upon the current - * execution mode of the interpreter - */ - Dividend = (Mode32) ? ACPI_UINT32_MAX : ACPI_UINT64_MAX; - - /* Main loop: convert the string to a 32- or 64-bit integer */ - - while (*String) - { - if (ACPI_IS_DIGIT (*String)) - { - /* Convert ASCII 0-9 to Decimal value */ - - ThisDigit = ((UINT8) *String) - '0'; - } - else if (Base == 10) - { - /* Digit is out of range; possible in ToInteger case only */ - - Term = 1; - } - else - { - ThisDigit = (UINT8) ACPI_TOUPPER (*String); - if (ACPI_IS_XDIGIT ((char) ThisDigit)) - { - /* Convert ASCII Hex char to value */ - - ThisDigit = ThisDigit - 'A' + 10; - } - else - { - Term = 1; - } - } - - if (Term) - { - if (ToIntegerOp) - { - goto ErrorExit; - } - else - { - break; - } - } - else if ((ValidDigits == 0) && (ThisDigit == 0) && !SignOf0x) - { - /* Skip zeros */ - String++; - continue; - } - - ValidDigits++; - - if (SignOf0x && ((ValidDigits > 16) || ((ValidDigits > 8) && Mode32))) - { - /* - * This is ToInteger operation case. - * No any restrictions for string-to-integer conversion, - * see ACPI spec. - */ - goto ErrorExit; - } - - /* Divide the digit into the correct position */ - - (void) AcpiUtShortDivide ((Dividend - (ACPI_INTEGER) ThisDigit), - Base, &Quotient, NULL); - - if (ReturnValue > Quotient) - { - if (ToIntegerOp) - { - goto ErrorExit; - } - else - { - break; - } - } - - ReturnValue *= Base; - ReturnValue += ThisDigit; - String++; - } - - /* All done, normal exit */ - -AllDone: - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Converted value: %8.8X%8.8X\n", - ACPI_FORMAT_UINT64 (ReturnValue))); - - *RetInteger = ReturnValue; - return_ACPI_STATUS (AE_OK); - - -ErrorExit: - /* Base was set/validated above */ - - if (Base == 10) - { - return_ACPI_STATUS (AE_BAD_DECIMAL_CONSTANT); - } - else - { - return_ACPI_STATUS (AE_BAD_HEX_CONSTANT); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreateUpdateStateAndPush - * - * PARAMETERS: Object - Object to be added to the new state - * Action - Increment/Decrement - * StateList - List the state will be added to - * - * RETURN: Status - * - * DESCRIPTION: Create a new state and push it - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtCreateUpdateStateAndPush ( - ACPI_OPERAND_OBJECT *Object, - UINT16 Action, - ACPI_GENERIC_STATE **StateList) -{ - ACPI_GENERIC_STATE *State; - - - ACPI_FUNCTION_ENTRY (); - - - /* Ignore null objects; these are expected */ - - if (!Object) - { - return (AE_OK); - } - - State = AcpiUtCreateUpdateState (Object, Action); - if (!State) - { - return (AE_NO_MEMORY); - } - - AcpiUtPushGenericState (StateList, State); - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtWalkPackageTree - * - * PARAMETERS: SourceObject - The package to walk - * TargetObject - Target object (if package is being copied) - * WalkCallback - Called once for each package element - * Context - Passed to the callback function - * - * RETURN: Status - * - * DESCRIPTION: Walk through a package - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtWalkPackageTree ( - ACPI_OPERAND_OBJECT *SourceObject, - void *TargetObject, - ACPI_PKG_CALLBACK WalkCallback, - void *Context) -{ - ACPI_STATUS Status = AE_OK; - ACPI_GENERIC_STATE *StateList = NULL; - ACPI_GENERIC_STATE *State; - UINT32 ThisIndex; - ACPI_OPERAND_OBJECT *ThisSourceObj; - - - ACPI_FUNCTION_TRACE (UtWalkPackageTree); - - - State = AcpiUtCreatePkgState (SourceObject, TargetObject, 0); - if (!State) - { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - while (State) - { - /* Get one element of the package */ - - ThisIndex = State->Pkg.Index; - ThisSourceObj = (ACPI_OPERAND_OBJECT *) - State->Pkg.SourceObject->Package.Elements[ThisIndex]; - - /* - * Check for: - * 1) An uninitialized package element. It is completely - * legal to declare a package and leave it uninitialized - * 2) Not an internal object - can be a namespace node instead - * 3) Any type other than a package. Packages are handled in else - * case below. - */ - if ((!ThisSourceObj) || - (ACPI_GET_DESCRIPTOR_TYPE (ThisSourceObj) != ACPI_DESC_TYPE_OPERAND) || - (ThisSourceObj->Common.Type != ACPI_TYPE_PACKAGE)) - { - Status = WalkCallback (ACPI_COPY_TYPE_SIMPLE, ThisSourceObj, - State, Context); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - State->Pkg.Index++; - while (State->Pkg.Index >= State->Pkg.SourceObject->Package.Count) - { - /* - * We've handled all of the objects at this level, This means - * that we have just completed a package. That package may - * have contained one or more packages itself. - * - * Delete this state and pop the previous state (package). - */ - AcpiUtDeleteGenericState (State); - State = AcpiUtPopGenericState (&StateList); - - /* Finished when there are no more states */ - - if (!State) - { - /* - * We have handled all of the objects in the top level - * package just add the length of the package objects - * and exit - */ - return_ACPI_STATUS (AE_OK); - } - - /* - * Go back up a level and move the index past the just - * completed package object. - */ - State->Pkg.Index++; - } - } - else - { - /* This is a subobject of type package */ - - Status = WalkCallback (ACPI_COPY_TYPE_PACKAGE, ThisSourceObj, - State, Context); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Push the current state and create a new one - * The callback above returned a new target package object. - */ - AcpiUtPushGenericState (&StateList, State); - State = AcpiUtCreatePkgState (ThisSourceObj, - State->Pkg.ThisTargetObj, 0); - if (!State) - { - /* Free any stacked Update State objects */ - - while (StateList) - { - State = AcpiUtPopGenericState (&StateList); - AcpiUtDeleteGenericState (State); - } - return_ACPI_STATUS (AE_NO_MEMORY); - } - } - } - - /* We should never get here */ - - return_ACPI_STATUS (AE_AML_INTERNAL); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiError, AcpiException, AcpiWarning, AcpiInfo - * - * PARAMETERS: ModuleName - Caller's module name (for error output) - * LineNumber - Caller's line number (for error output) - * Format - Printf format string + additional args - * - * RETURN: None - * - * DESCRIPTION: Print message with module/line/version info - * - ******************************************************************************/ - -void ACPI_INTERNAL_VAR_XFACE -AcpiError ( - const char *ModuleName, - UINT32 LineNumber, - const char *Format, - ...) -{ - va_list args; - - - AcpiOsPrintf ("ACPI Error: "); - - va_start (args, Format); - AcpiOsVprintf (Format, args); - ACPI_COMMON_MSG_SUFFIX; - va_end (args); -} - -void ACPI_INTERNAL_VAR_XFACE -AcpiException ( - const char *ModuleName, - UINT32 LineNumber, - ACPI_STATUS Status, - const char *Format, - ...) -{ - va_list args; - - - AcpiOsPrintf ("ACPI Exception: %s, ", AcpiFormatException (Status)); - - va_start (args, Format); - AcpiOsVprintf (Format, args); - ACPI_COMMON_MSG_SUFFIX; - va_end (args); -} - -void ACPI_INTERNAL_VAR_XFACE -AcpiWarning ( - const char *ModuleName, - UINT32 LineNumber, - const char *Format, - ...) -{ - va_list args; - - - AcpiOsPrintf ("ACPI Warning: "); - - va_start (args, Format); - AcpiOsVprintf (Format, args); - ACPI_COMMON_MSG_SUFFIX; - va_end (args); -} - -void ACPI_INTERNAL_VAR_XFACE -AcpiInfo ( - const char *ModuleName, - UINT32 LineNumber, - const char *Format, - ...) -{ - va_list args; - - - AcpiOsPrintf ("ACPI: "); - - va_start (args, Format); - AcpiOsVprintf (Format, args); - AcpiOsPrintf ("\n"); - va_end (args); -} - -ACPI_EXPORT_SYMBOL (AcpiError) -ACPI_EXPORT_SYMBOL (AcpiException) -ACPI_EXPORT_SYMBOL (AcpiWarning) -ACPI_EXPORT_SYMBOL (AcpiInfo) - - -/******************************************************************************* - * - * FUNCTION: AcpiUtPredefinedWarning - * - * PARAMETERS: ModuleName - Caller's module name (for error output) - * LineNumber - Caller's line number (for error output) - * Pathname - Full pathname to the node - * NodeFlags - From Namespace node for the method/object - * Format - Printf format string + additional args - * - * RETURN: None - * - * DESCRIPTION: Warnings for the predefined validation module. Messages are - * only emitted the first time a problem with a particular - * method/object is detected. This prevents a flood of error - * messages for methods that are repeatedly evaluated. - * - ******************************************************************************/ - -void ACPI_INTERNAL_VAR_XFACE -AcpiUtPredefinedWarning ( - const char *ModuleName, - UINT32 LineNumber, - char *Pathname, - UINT8 NodeFlags, - const char *Format, - ...) -{ - va_list args; - - - /* - * Warning messages for this method/object will be disabled after the - * first time a validation fails or an object is successfully repaired. - */ - if (NodeFlags & ANOBJ_EVALUATED) - { - return; - } - - AcpiOsPrintf ("ACPI Warning for %s: ", Pathname); - - va_start (args, Format); - AcpiOsVprintf (Format, args); - ACPI_COMMON_MSG_SUFFIX; - va_end (args); -} - -/******************************************************************************* - * - * FUNCTION: AcpiUtPredefinedInfo - * - * PARAMETERS: ModuleName - Caller's module name (for error output) - * LineNumber - Caller's line number (for error output) - * Pathname - Full pathname to the node - * NodeFlags - From Namespace node for the method/object - * Format - Printf format string + additional args - * - * RETURN: None - * - * DESCRIPTION: Info messages for the predefined validation module. Messages - * are only emitted the first time a problem with a particular - * method/object is detected. This prevents a flood of - * messages for methods that are repeatedly evaluated. - * - ******************************************************************************/ - -void ACPI_INTERNAL_VAR_XFACE -AcpiUtPredefinedInfo ( - const char *ModuleName, - UINT32 LineNumber, - char *Pathname, - UINT8 NodeFlags, - const char *Format, - ...) -{ - va_list args; - - - /* - * Warning messages for this method/object will be disabled after the - * first time a validation fails or an object is successfully repaired. - */ - if (NodeFlags & ANOBJ_EVALUATED) - { - return; - } - - AcpiOsPrintf ("ACPI Info for %s: ", Pathname); - - va_start (args, Format); - AcpiOsVprintf (Format, args); - ACPI_COMMON_MSG_SUFFIX; - va_end (args); -} diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utmutex.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utmutex.c deleted file mode 100644 index f6e7cc365..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utmutex.c +++ /dev/null @@ -1,477 +0,0 @@ -/******************************************************************************* - * - * Module Name: utmutex - local mutex support - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __UTMUTEX_C__ - -#include "acpi.h" -#include "accommon.h" - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utmutex") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiUtCreateMutex ( - ACPI_MUTEX_HANDLE MutexId); - -static ACPI_STATUS -AcpiUtDeleteMutex ( - ACPI_MUTEX_HANDLE MutexId); - - -/******************************************************************************* - * - * FUNCTION: AcpiUtMutexInitialize - * - * PARAMETERS: None. - * - * RETURN: Status - * - * DESCRIPTION: Create the system mutex objects. This includes mutexes, - * spin locks, and reader/writer locks. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtMutexInitialize ( - void) -{ - UINT32 i; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (UtMutexInitialize); - - - /* Create each of the predefined mutex objects */ - - for (i = 0; i < ACPI_NUM_MUTEX; i++) - { - Status = AcpiUtCreateMutex (i); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* Create the spinlocks for use at interrupt level */ - - Status = AcpiOsCreateLock (&AcpiGbl_GpeLock); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - Status = AcpiOsCreateLock (&AcpiGbl_HardwareLock); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Create the reader/writer lock for namespace access */ - - Status = AcpiUtCreateRwLock (&AcpiGbl_NamespaceRwLock); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtMutexTerminate - * - * PARAMETERS: None. - * - * RETURN: None. - * - * DESCRIPTION: Delete all of the system mutex objects. This includes mutexes, - * spin locks, and reader/writer locks. - * - ******************************************************************************/ - -void -AcpiUtMutexTerminate ( - void) -{ - UINT32 i; - - - ACPI_FUNCTION_TRACE (UtMutexTerminate); - - - /* Delete each predefined mutex object */ - - for (i = 0; i < ACPI_NUM_MUTEX; i++) - { - (void) AcpiUtDeleteMutex (i); - } - - /* Delete the spinlocks */ - - AcpiOsDeleteLock (AcpiGbl_GpeLock); - AcpiOsDeleteLock (AcpiGbl_HardwareLock); - - /* Delete the reader/writer lock */ - - AcpiUtDeleteRwLock (&AcpiGbl_NamespaceRwLock); - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreateMutex - * - * PARAMETERS: MutexID - ID of the mutex to be created - * - * RETURN: Status - * - * DESCRIPTION: Create a mutex object. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiUtCreateMutex ( - ACPI_MUTEX_HANDLE MutexId) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE_U32 (UtCreateMutex, MutexId); - - - if (MutexId > ACPI_MAX_MUTEX) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - if (!AcpiGbl_MutexInfo[MutexId].Mutex) - { - Status = AcpiOsCreateMutex (&AcpiGbl_MutexInfo[MutexId].Mutex); - AcpiGbl_MutexInfo[MutexId].ThreadId = ACPI_MUTEX_NOT_ACQUIRED; - AcpiGbl_MutexInfo[MutexId].UseCount = 0; - } - - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtDeleteMutex - * - * PARAMETERS: MutexID - ID of the mutex to be deleted - * - * RETURN: Status - * - * DESCRIPTION: Delete a mutex object. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiUtDeleteMutex ( - ACPI_MUTEX_HANDLE MutexId) -{ - - ACPI_FUNCTION_TRACE_U32 (UtDeleteMutex, MutexId); - - - if (MutexId > ACPI_MAX_MUTEX) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - AcpiOsDeleteMutex (AcpiGbl_MutexInfo[MutexId].Mutex); - - AcpiGbl_MutexInfo[MutexId].Mutex = NULL; - AcpiGbl_MutexInfo[MutexId].ThreadId = ACPI_MUTEX_NOT_ACQUIRED; - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtAcquireMutex - * - * PARAMETERS: MutexID - ID of the mutex to be acquired - * - * RETURN: Status - * - * DESCRIPTION: Acquire a mutex object. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtAcquireMutex ( - ACPI_MUTEX_HANDLE MutexId) -{ - ACPI_STATUS Status; - ACPI_THREAD_ID ThisThreadId; - - - ACPI_FUNCTION_NAME (UtAcquireMutex); - - - if (MutexId > ACPI_MAX_MUTEX) - { - return (AE_BAD_PARAMETER); - } - - ThisThreadId = AcpiOsGetThreadId (); - -#ifdef ACPI_MUTEX_DEBUG - { - UINT32 i; - /* - * Mutex debug code, for internal debugging only. - * - * Deadlock prevention. Check if this thread owns any mutexes of value - * greater than or equal to this one. If so, the thread has violated - * the mutex ordering rule. This indicates a coding error somewhere in - * the ACPI subsystem code. - */ - for (i = MutexId; i < ACPI_NUM_MUTEX; i++) - { - if (AcpiGbl_MutexInfo[i].ThreadId == ThisThreadId) - { - if (i == MutexId) - { - ACPI_ERROR ((AE_INFO, - "Mutex [%s] already acquired by this thread [%p]", - AcpiUtGetMutexName (MutexId), - ACPI_CAST_PTR (void, ThisThreadId))); - - return (AE_ALREADY_ACQUIRED); - } - - ACPI_ERROR ((AE_INFO, - "Invalid acquire order: Thread %p owns [%s], wants [%s]", - ACPI_CAST_PTR (void, ThisThreadId), AcpiUtGetMutexName (i), - AcpiUtGetMutexName (MutexId))); - - return (AE_ACQUIRE_DEADLOCK); - } - } - } -#endif - - ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, - "Thread %p attempting to acquire Mutex [%s]\n", - ACPI_CAST_PTR (void, ThisThreadId), AcpiUtGetMutexName (MutexId))); - - Status = AcpiOsAcquireMutex (AcpiGbl_MutexInfo[MutexId].Mutex, - ACPI_WAIT_FOREVER); - if (ACPI_SUCCESS (Status)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Thread %p acquired Mutex [%s]\n", - ACPI_CAST_PTR (void, ThisThreadId), AcpiUtGetMutexName (MutexId))); - - AcpiGbl_MutexInfo[MutexId].UseCount++; - AcpiGbl_MutexInfo[MutexId].ThreadId = ThisThreadId; - } - else - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Thread %p could not acquire Mutex [%X]", - ACPI_CAST_PTR (void, ThisThreadId), MutexId)); - } - - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtReleaseMutex - * - * PARAMETERS: MutexID - ID of the mutex to be released - * - * RETURN: Status - * - * DESCRIPTION: Release a mutex object. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtReleaseMutex ( - ACPI_MUTEX_HANDLE MutexId) -{ - ACPI_THREAD_ID ThisThreadId; - - - ACPI_FUNCTION_NAME (UtReleaseMutex); - - - ThisThreadId = AcpiOsGetThreadId (); - ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Thread %p releasing Mutex [%s]\n", - ACPI_CAST_PTR (void, ThisThreadId), AcpiUtGetMutexName (MutexId))); - - if (MutexId > ACPI_MAX_MUTEX) - { - return (AE_BAD_PARAMETER); - } - - /* - * Mutex must be acquired in order to release it! - */ - if (AcpiGbl_MutexInfo[MutexId].ThreadId == ACPI_MUTEX_NOT_ACQUIRED) - { - ACPI_ERROR ((AE_INFO, - "Mutex [%X] is not acquired, cannot release", MutexId)); - - return (AE_NOT_ACQUIRED); - } - -#ifdef ACPI_MUTEX_DEBUG - { - UINT32 i; - /* - * Mutex debug code, for internal debugging only. - * - * Deadlock prevention. Check if this thread owns any mutexes of value - * greater than this one. If so, the thread has violated the mutex - * ordering rule. This indicates a coding error somewhere in - * the ACPI subsystem code. - */ - for (i = MutexId; i < ACPI_NUM_MUTEX; i++) - { - if (AcpiGbl_MutexInfo[i].ThreadId == ThisThreadId) - { - if (i == MutexId) - { - continue; - } - - ACPI_ERROR ((AE_INFO, - "Invalid release order: owns [%s], releasing [%s]", - AcpiUtGetMutexName (i), AcpiUtGetMutexName (MutexId))); - - return (AE_RELEASE_DEADLOCK); - } - } - } -#endif - - /* Mark unlocked FIRST */ - - AcpiGbl_MutexInfo[MutexId].ThreadId = ACPI_MUTEX_NOT_ACQUIRED; - - AcpiOsReleaseMutex (AcpiGbl_MutexInfo[MutexId].Mutex); - return (AE_OK); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utobject.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utobject.c deleted file mode 100644 index 516474489..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utobject.c +++ /dev/null @@ -1,859 +0,0 @@ -/****************************************************************************** - * - * Module Name: utobject - ACPI object create/delete/size/cache routines - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -#define __UTOBJECT_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utobject") - -/* Local prototypes */ - -static ACPI_STATUS -AcpiUtGetSimpleObjectSize ( - ACPI_OPERAND_OBJECT *Obj, - ACPI_SIZE *ObjLength); - -static ACPI_STATUS -AcpiUtGetPackageObjectSize ( - ACPI_OPERAND_OBJECT *Obj, - ACPI_SIZE *ObjLength); - -static ACPI_STATUS -AcpiUtGetElementLength ( - UINT8 ObjectType, - ACPI_OPERAND_OBJECT *SourceObject, - ACPI_GENERIC_STATE *State, - void *Context); - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreateInternalObjectDbg - * - * PARAMETERS: ModuleName - Source file name of caller - * LineNumber - Line number of caller - * ComponentId - Component type of caller - * Type - ACPI Type of the new object - * - * RETURN: A new internal object, null on failure - * - * DESCRIPTION: Create and initialize a new internal object. - * - * NOTE: We always allocate the worst-case object descriptor because - * these objects are cached, and we want them to be - * one-size-satisifies-any-request. This in itself may not be - * the most memory efficient, but the efficiency of the object - * cache should more than make up for this! - * - ******************************************************************************/ - -ACPI_OPERAND_OBJECT * -AcpiUtCreateInternalObjectDbg ( - const char *ModuleName, - UINT32 LineNumber, - UINT32 ComponentId, - ACPI_OBJECT_TYPE Type) -{ - ACPI_OPERAND_OBJECT *Object; - ACPI_OPERAND_OBJECT *SecondObject; - - - ACPI_FUNCTION_TRACE_STR (UtCreateInternalObjectDbg, - AcpiUtGetTypeName (Type)); - - - /* Allocate the raw object descriptor */ - - Object = AcpiUtAllocateObjectDescDbg (ModuleName, LineNumber, ComponentId); - if (!Object) - { - return_PTR (NULL); - } - - switch (Type) - { - case ACPI_TYPE_REGION: - case ACPI_TYPE_BUFFER_FIELD: - case ACPI_TYPE_LOCAL_BANK_FIELD: - - /* These types require a secondary object */ - - SecondObject = AcpiUtAllocateObjectDescDbg (ModuleName, - LineNumber, ComponentId); - if (!SecondObject) - { - AcpiUtDeleteObjectDesc (Object); - return_PTR (NULL); - } - - SecondObject->Common.Type = ACPI_TYPE_LOCAL_EXTRA; - SecondObject->Common.ReferenceCount = 1; - - /* Link the second object to the first */ - - Object->Common.NextObject = SecondObject; - break; - - default: - /* All others have no secondary object */ - break; - } - - /* Save the object type in the object descriptor */ - - Object->Common.Type = (UINT8) Type; - - /* Init the reference count */ - - Object->Common.ReferenceCount = 1; - - /* Any per-type initialization should go here */ - - return_PTR (Object); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreatePackageObject - * - * PARAMETERS: Count - Number of package elements - * - * RETURN: Pointer to a new Package object, null on failure - * - * DESCRIPTION: Create a fully initialized package object - * - ******************************************************************************/ - -ACPI_OPERAND_OBJECT * -AcpiUtCreatePackageObject ( - UINT32 Count) -{ - ACPI_OPERAND_OBJECT *PackageDesc; - ACPI_OPERAND_OBJECT **PackageElements; - - - ACPI_FUNCTION_TRACE_U32 (UtCreatePackageObject, Count); - - - /* Create a new Package object */ - - PackageDesc = AcpiUtCreateInternalObject (ACPI_TYPE_PACKAGE); - if (!PackageDesc) - { - return_PTR (NULL); - } - - /* - * Create the element array. Count+1 allows the array to be null - * terminated. - */ - PackageElements = ACPI_ALLOCATE_ZEROED ( - ((ACPI_SIZE) Count + 1) * sizeof (void *)); - if (!PackageElements) - { - ACPI_FREE (PackageDesc); - return_PTR (NULL); - } - - PackageDesc->Package.Count = Count; - PackageDesc->Package.Elements = PackageElements; - return_PTR (PackageDesc); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreateIntegerObject - * - * PARAMETERS: InitialValue - Initial value for the integer - * - * RETURN: Pointer to a new Integer object, null on failure - * - * DESCRIPTION: Create an initialized integer object - * - ******************************************************************************/ - -ACPI_OPERAND_OBJECT * -AcpiUtCreateIntegerObject ( - UINT64 InitialValue) -{ - ACPI_OPERAND_OBJECT *IntegerDesc; - - - ACPI_FUNCTION_TRACE (UtCreateIntegerObject); - - - /* Create and initialize a new integer object */ - - IntegerDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); - if (!IntegerDesc) - { - return_PTR (NULL); - } - - IntegerDesc->Integer.Value = InitialValue; - return_PTR (IntegerDesc); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreateBufferObject - * - * PARAMETERS: BufferSize - Size of buffer to be created - * - * RETURN: Pointer to a new Buffer object, null on failure - * - * DESCRIPTION: Create a fully initialized buffer object - * - ******************************************************************************/ - -ACPI_OPERAND_OBJECT * -AcpiUtCreateBufferObject ( - ACPI_SIZE BufferSize) -{ - ACPI_OPERAND_OBJECT *BufferDesc; - UINT8 *Buffer = NULL; - - - ACPI_FUNCTION_TRACE_U32 (UtCreateBufferObject, BufferSize); - - - /* Create a new Buffer object */ - - BufferDesc = AcpiUtCreateInternalObject (ACPI_TYPE_BUFFER); - if (!BufferDesc) - { - return_PTR (NULL); - } - - /* Create an actual buffer only if size > 0 */ - - if (BufferSize > 0) - { - /* Allocate the actual buffer */ - - Buffer = ACPI_ALLOCATE_ZEROED (BufferSize); - if (!Buffer) - { - ACPI_ERROR ((AE_INFO, "Could not allocate size %X", - (UINT32) BufferSize)); - AcpiUtRemoveReference (BufferDesc); - return_PTR (NULL); - } - } - - /* Complete buffer object initialization */ - - BufferDesc->Buffer.Flags |= AOPOBJ_DATA_VALID; - BufferDesc->Buffer.Pointer = Buffer; - BufferDesc->Buffer.Length = (UINT32) BufferSize; - - /* Return the new buffer descriptor */ - - return_PTR (BufferDesc); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreateStringObject - * - * PARAMETERS: StringSize - Size of string to be created. Does not - * include NULL terminator, this is added - * automatically. - * - * RETURN: Pointer to a new String object - * - * DESCRIPTION: Create a fully initialized string object - * - ******************************************************************************/ - -ACPI_OPERAND_OBJECT * -AcpiUtCreateStringObject ( - ACPI_SIZE StringSize) -{ - ACPI_OPERAND_OBJECT *StringDesc; - char *String; - - - ACPI_FUNCTION_TRACE_U32 (UtCreateStringObject, StringSize); - - - /* Create a new String object */ - - StringDesc = AcpiUtCreateInternalObject (ACPI_TYPE_STRING); - if (!StringDesc) - { - return_PTR (NULL); - } - - /* - * Allocate the actual string buffer -- (Size + 1) for NULL terminator. - * NOTE: Zero-length strings are NULL terminated - */ - String = ACPI_ALLOCATE_ZEROED (StringSize + 1); - if (!String) - { - ACPI_ERROR ((AE_INFO, "Could not allocate size %X", - (UINT32) StringSize)); - AcpiUtRemoveReference (StringDesc); - return_PTR (NULL); - } - - /* Complete string object initialization */ - - StringDesc->String.Pointer = String; - StringDesc->String.Length = (UINT32) StringSize; - - /* Return the new string descriptor */ - - return_PTR (StringDesc); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtValidInternalObject - * - * PARAMETERS: Object - Object to be validated - * - * RETURN: TRUE if object is valid, FALSE otherwise - * - * DESCRIPTION: Validate a pointer to be an ACPI_OPERAND_OBJECT - * - ******************************************************************************/ - -BOOLEAN -AcpiUtValidInternalObject ( - void *Object) -{ - - ACPI_FUNCTION_NAME (UtValidInternalObject); - - - /* Check for a null pointer */ - - if (!Object) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "**** Null Object Ptr\n")); - return (FALSE); - } - - /* Check the descriptor type field */ - - switch (ACPI_GET_DESCRIPTOR_TYPE (Object)) - { - case ACPI_DESC_TYPE_OPERAND: - - /* The object appears to be a valid ACPI_OPERAND_OBJECT */ - - return (TRUE); - - default: - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "%p is not not an ACPI operand obj [%s]\n", - Object, AcpiUtGetDescriptorName (Object))); - break; - } - - return (FALSE); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtAllocateObjectDescDbg - * - * PARAMETERS: ModuleName - Caller's module name (for error output) - * LineNumber - Caller's line number (for error output) - * ComponentId - Caller's component ID (for error output) - * - * RETURN: Pointer to newly allocated object descriptor. Null on error - * - * DESCRIPTION: Allocate a new object descriptor. Gracefully handle - * error conditions. - * - ******************************************************************************/ - -void * -AcpiUtAllocateObjectDescDbg ( - const char *ModuleName, - UINT32 LineNumber, - UINT32 ComponentId) -{ - ACPI_OPERAND_OBJECT *Object; - - - ACPI_FUNCTION_TRACE (UtAllocateObjectDescDbg); - - - Object = AcpiOsAcquireObject (AcpiGbl_OperandCache); - if (!Object) - { - ACPI_ERROR ((ModuleName, LineNumber, - "Could not allocate an object descriptor")); - - return_PTR (NULL); - } - - /* Mark the descriptor type */ - - ACPI_SET_DESCRIPTOR_TYPE (Object, ACPI_DESC_TYPE_OPERAND); - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "%p Size %X\n", - Object, (UINT32) sizeof (ACPI_OPERAND_OBJECT))); - - return_PTR (Object); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtDeleteObjectDesc - * - * PARAMETERS: Object - An Acpi internal object to be deleted - * - * RETURN: None. - * - * DESCRIPTION: Free an ACPI object descriptor or add it to the object cache - * - ******************************************************************************/ - -void -AcpiUtDeleteObjectDesc ( - ACPI_OPERAND_OBJECT *Object) -{ - ACPI_FUNCTION_TRACE_PTR (UtDeleteObjectDesc, Object); - - - /* Object must be an ACPI_OPERAND_OBJECT */ - - if (ACPI_GET_DESCRIPTOR_TYPE (Object) != ACPI_DESC_TYPE_OPERAND) - { - ACPI_ERROR ((AE_INFO, - "%p is not an ACPI Operand object [%s]", Object, - AcpiUtGetDescriptorName (Object))); - return_VOID; - } - - (void) AcpiOsReleaseObject (AcpiGbl_OperandCache, Object); - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetSimpleObjectSize - * - * PARAMETERS: InternalObject - An ACPI operand object - * ObjLength - Where the length is returned - * - * RETURN: Status - * - * DESCRIPTION: This function is called to determine the space required to - * contain a simple object for return to an external user. - * - * The length includes the object structure plus any additional - * needed space. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiUtGetSimpleObjectSize ( - ACPI_OPERAND_OBJECT *InternalObject, - ACPI_SIZE *ObjLength) -{ - ACPI_SIZE Length; - ACPI_SIZE Size; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE_PTR (UtGetSimpleObjectSize, InternalObject); - - - /* Start with the length of the (external) Acpi object */ - - Length = sizeof (ACPI_OBJECT); - - /* A NULL object is allowed, can be a legal uninitialized package element */ - - if (!InternalObject) - { - /* - * Object is NULL, just return the length of ACPI_OBJECT - * (A NULL ACPI_OBJECT is an object of all zeroes.) - */ - *ObjLength = ACPI_ROUND_UP_TO_NATIVE_WORD (Length); - return_ACPI_STATUS (AE_OK); - } - - /* A Namespace Node should never appear here */ - - if (ACPI_GET_DESCRIPTOR_TYPE (InternalObject) == ACPI_DESC_TYPE_NAMED) - { - /* A namespace node should never get here */ - - return_ACPI_STATUS (AE_AML_INTERNAL); - } - - /* - * The final length depends on the object type - * Strings and Buffers are packed right up against the parent object and - * must be accessed bytewise or there may be alignment problems on - * certain processors - */ - switch (InternalObject->Common.Type) - { - case ACPI_TYPE_STRING: - - Length += (ACPI_SIZE) InternalObject->String.Length + 1; - break; - - - case ACPI_TYPE_BUFFER: - - Length += (ACPI_SIZE) InternalObject->Buffer.Length; - break; - - - case ACPI_TYPE_INTEGER: - case ACPI_TYPE_PROCESSOR: - case ACPI_TYPE_POWER: - - /* No extra data for these types */ - - break; - - - case ACPI_TYPE_LOCAL_REFERENCE: - - switch (InternalObject->Reference.Class) - { - case ACPI_REFCLASS_NAME: - - /* - * Get the actual length of the full pathname to this object. - * The reference will be converted to the pathname to the object - */ - Size = AcpiNsGetPathnameLength (InternalObject->Reference.Node); - if (!Size) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - Length += ACPI_ROUND_UP_TO_NATIVE_WORD (Size); - break; - - default: - - /* - * No other reference opcodes are supported. - * Notably, Locals and Args are not supported, but this may be - * required eventually. - */ - ACPI_ERROR ((AE_INFO, "Cannot convert to external object - " - "unsupported Reference Class [%s] %X in object %p", - AcpiUtGetReferenceName (InternalObject), - InternalObject->Reference.Class, InternalObject)); - Status = AE_TYPE; - break; - } - break; - - - default: - - ACPI_ERROR ((AE_INFO, "Cannot convert to external object - " - "unsupported type [%s] %X in object %p", - AcpiUtGetObjectTypeName (InternalObject), - InternalObject->Common.Type, InternalObject)); - Status = AE_TYPE; - break; - } - - /* - * Account for the space required by the object rounded up to the next - * multiple of the machine word size. This keeps each object aligned - * on a machine word boundary. (preventing alignment faults on some - * machines.) - */ - *ObjLength = ACPI_ROUND_UP_TO_NATIVE_WORD (Length); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetElementLength - * - * PARAMETERS: ACPI_PKG_CALLBACK - * - * RETURN: Status - * - * DESCRIPTION: Get the length of one package element. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiUtGetElementLength ( - UINT8 ObjectType, - ACPI_OPERAND_OBJECT *SourceObject, - ACPI_GENERIC_STATE *State, - void *Context) -{ - ACPI_STATUS Status = AE_OK; - ACPI_PKG_INFO *Info = (ACPI_PKG_INFO *) Context; - ACPI_SIZE ObjectSpace; - - - switch (ObjectType) - { - case ACPI_COPY_TYPE_SIMPLE: - - /* - * Simple object - just get the size (Null object/entry is handled - * here also) and sum it into the running package length - */ - Status = AcpiUtGetSimpleObjectSize (SourceObject, &ObjectSpace); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Info->Length += ObjectSpace; - break; - - - case ACPI_COPY_TYPE_PACKAGE: - - /* Package object - nothing much to do here, let the walk handle it */ - - Info->NumPackages++; - State->Pkg.ThisTargetObj = NULL; - break; - - - default: - - /* No other types allowed */ - - return (AE_BAD_PARAMETER); - } - - return (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetPackageObjectSize - * - * PARAMETERS: InternalObject - An ACPI internal object - * ObjLength - Where the length is returned - * - * RETURN: Status - * - * DESCRIPTION: This function is called to determine the space required to - * contain a package object for return to an external user. - * - * This is moderately complex since a package contains other - * objects including packages. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiUtGetPackageObjectSize ( - ACPI_OPERAND_OBJECT *InternalObject, - ACPI_SIZE *ObjLength) -{ - ACPI_STATUS Status; - ACPI_PKG_INFO Info; - - - ACPI_FUNCTION_TRACE_PTR (UtGetPackageObjectSize, InternalObject); - - - Info.Length = 0; - Info.ObjectSpace = 0; - Info.NumPackages = 1; - - Status = AcpiUtWalkPackageTree (InternalObject, NULL, - AcpiUtGetElementLength, &Info); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * We have handled all of the objects in all levels of the package. - * just add the length of the package objects themselves. - * Round up to the next machine word. - */ - Info.Length += ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT)) * - (ACPI_SIZE) Info.NumPackages; - - /* Return the total package length */ - - *ObjLength = Info.Length; - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetObjectSize - * - * PARAMETERS: InternalObject - An ACPI internal object - * ObjLength - Where the length will be returned - * - * RETURN: Status - * - * DESCRIPTION: This function is called to determine the space required to - * contain an object for return to an API user. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtGetObjectSize ( - ACPI_OPERAND_OBJECT *InternalObject, - ACPI_SIZE *ObjLength) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_ENTRY (); - - - if ((ACPI_GET_DESCRIPTOR_TYPE (InternalObject) == ACPI_DESC_TYPE_OPERAND) && - (InternalObject->Common.Type == ACPI_TYPE_PACKAGE)) - { - Status = AcpiUtGetPackageObjectSize (InternalObject, ObjLength); - } - else - { - Status = AcpiUtGetSimpleObjectSize (InternalObject, ObjLength); - } - - return (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utresrc.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utresrc.c deleted file mode 100644 index 2f19d6398..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utresrc.c +++ /dev/null @@ -1,772 +0,0 @@ -/******************************************************************************* - * - * Module Name: utresrc - Resource managment utilities - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __UTRESRC_C__ - -#include "acpi.h" -#include "accommon.h" -#include "amlresrc.h" - - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utresrc") - - -#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER) - -/* - * Strings used to decode resource descriptors. - * Used by both the disasssembler and the debugger resource dump routines - */ -const char *AcpiGbl_BmDecode[] = -{ - "NotBusMaster", - "BusMaster" -}; - -const char *AcpiGbl_ConfigDecode[] = -{ - "0 - Good Configuration", - "1 - Acceptable Configuration", - "2 - Suboptimal Configuration", - "3 - ***Invalid Configuration***", -}; - -const char *AcpiGbl_ConsumeDecode[] = -{ - "ResourceProducer", - "ResourceConsumer" -}; - -const char *AcpiGbl_DecDecode[] = -{ - "PosDecode", - "SubDecode" -}; - -const char *AcpiGbl_HeDecode[] = -{ - "Level", - "Edge" -}; - -const char *AcpiGbl_IoDecode[] = -{ - "Decode10", - "Decode16" -}; - -const char *AcpiGbl_LlDecode[] = -{ - "ActiveHigh", - "ActiveLow" -}; - -const char *AcpiGbl_MaxDecode[] = -{ - "MaxNotFixed", - "MaxFixed" -}; - -const char *AcpiGbl_MemDecode[] = -{ - "NonCacheable", - "Cacheable", - "WriteCombining", - "Prefetchable" -}; - -const char *AcpiGbl_MinDecode[] = -{ - "MinNotFixed", - "MinFixed" -}; - -const char *AcpiGbl_MtpDecode[] = -{ - "AddressRangeMemory", - "AddressRangeReserved", - "AddressRangeACPI", - "AddressRangeNVS" -}; - -const char *AcpiGbl_RngDecode[] = -{ - "InvalidRanges", - "NonISAOnlyRanges", - "ISAOnlyRanges", - "EntireRange" -}; - -const char *AcpiGbl_RwDecode[] = -{ - "ReadOnly", - "ReadWrite" -}; - -const char *AcpiGbl_ShrDecode[] = -{ - "Exclusive", - "Shared" -}; - -const char *AcpiGbl_SizDecode[] = -{ - "Transfer8", - "Transfer8_16", - "Transfer16", - "InvalidSize" -}; - -const char *AcpiGbl_TrsDecode[] = -{ - "DenseTranslation", - "SparseTranslation" -}; - -const char *AcpiGbl_TtpDecode[] = -{ - "TypeStatic", - "TypeTranslation" -}; - -const char *AcpiGbl_TypDecode[] = -{ - "Compatibility", - "TypeA", - "TypeB", - "TypeF" -}; - -#endif - - -/* - * Base sizes of the raw AML resource descriptors, indexed by resource type. - * Zero indicates a reserved (and therefore invalid) resource type. - */ -const UINT8 AcpiGbl_ResourceAmlSizes[] = -{ - /* Small descriptors */ - - 0, - 0, - 0, - 0, - ACPI_AML_SIZE_SMALL (AML_RESOURCE_IRQ), - ACPI_AML_SIZE_SMALL (AML_RESOURCE_DMA), - ACPI_AML_SIZE_SMALL (AML_RESOURCE_START_DEPENDENT), - ACPI_AML_SIZE_SMALL (AML_RESOURCE_END_DEPENDENT), - ACPI_AML_SIZE_SMALL (AML_RESOURCE_IO), - ACPI_AML_SIZE_SMALL (AML_RESOURCE_FIXED_IO), - 0, - 0, - 0, - 0, - ACPI_AML_SIZE_SMALL (AML_RESOURCE_VENDOR_SMALL), - ACPI_AML_SIZE_SMALL (AML_RESOURCE_END_TAG), - - /* Large descriptors */ - - 0, - ACPI_AML_SIZE_LARGE (AML_RESOURCE_MEMORY24), - ACPI_AML_SIZE_LARGE (AML_RESOURCE_GENERIC_REGISTER), - 0, - ACPI_AML_SIZE_LARGE (AML_RESOURCE_VENDOR_LARGE), - ACPI_AML_SIZE_LARGE (AML_RESOURCE_MEMORY32), - ACPI_AML_SIZE_LARGE (AML_RESOURCE_FIXED_MEMORY32), - ACPI_AML_SIZE_LARGE (AML_RESOURCE_ADDRESS32), - ACPI_AML_SIZE_LARGE (AML_RESOURCE_ADDRESS16), - ACPI_AML_SIZE_LARGE (AML_RESOURCE_EXTENDED_IRQ), - ACPI_AML_SIZE_LARGE (AML_RESOURCE_ADDRESS64), - ACPI_AML_SIZE_LARGE (AML_RESOURCE_EXTENDED_ADDRESS64) -}; - - -/* - * Resource types, used to validate the resource length field. - * The length of fixed-length types must match exactly, variable - * lengths must meet the minimum required length, etc. - * Zero indicates a reserved (and therefore invalid) resource type. - */ -static const UINT8 AcpiGbl_ResourceTypes[] = -{ - /* Small descriptors */ - - 0, - 0, - 0, - 0, - ACPI_SMALL_VARIABLE_LENGTH, - ACPI_FIXED_LENGTH, - ACPI_SMALL_VARIABLE_LENGTH, - ACPI_FIXED_LENGTH, - ACPI_FIXED_LENGTH, - ACPI_FIXED_LENGTH, - 0, - 0, - 0, - 0, - ACPI_VARIABLE_LENGTH, - ACPI_FIXED_LENGTH, - - /* Large descriptors */ - - 0, - ACPI_FIXED_LENGTH, - ACPI_FIXED_LENGTH, - 0, - ACPI_VARIABLE_LENGTH, - ACPI_FIXED_LENGTH, - ACPI_FIXED_LENGTH, - ACPI_VARIABLE_LENGTH, - ACPI_VARIABLE_LENGTH, - ACPI_VARIABLE_LENGTH, - ACPI_VARIABLE_LENGTH, - ACPI_FIXED_LENGTH -}; - - -/******************************************************************************* - * - * FUNCTION: AcpiUtWalkAmlResources - * - * PARAMETERS: Aml - Pointer to the raw AML resource template - * AmlLength - Length of the entire template - * UserFunction - Called once for each descriptor found. If - * NULL, a pointer to the EndTag is returned - * Context - Passed to UserFunction - * - * RETURN: Status - * - * DESCRIPTION: Walk a raw AML resource list(buffer). User function called - * once for each resource found. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtWalkAmlResources ( - UINT8 *Aml, - ACPI_SIZE AmlLength, - ACPI_WALK_AML_CALLBACK UserFunction, - void *Context) -{ - ACPI_STATUS Status; - UINT8 *EndAml; - UINT8 ResourceIndex; - UINT32 Length; - UINT32 Offset = 0; - - - ACPI_FUNCTION_TRACE (UtWalkAmlResources); - - - /* The absolute minimum resource template is one EndTag descriptor */ - - if (AmlLength < sizeof (AML_RESOURCE_END_TAG)) - { - return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG); - } - - /* Point to the end of the resource template buffer */ - - EndAml = Aml + AmlLength; - - /* Walk the byte list, abort on any invalid descriptor type or length */ - - while (Aml < EndAml) - { - /* Validate the Resource Type and Resource Length */ - - Status = AcpiUtValidateResource (Aml, &ResourceIndex); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Get the length of this descriptor */ - - Length = AcpiUtGetDescriptorLength (Aml); - - /* Invoke the user function */ - - if (UserFunction) - { - Status = UserFunction (Aml, Length, Offset, ResourceIndex, Context); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - - /* An EndTag descriptor terminates this resource template */ - - if (AcpiUtGetResourceType (Aml) == ACPI_RESOURCE_NAME_END_TAG) - { - /* - * There must be at least one more byte in the buffer for - * the 2nd byte of the EndTag - */ - if ((Aml + 1) >= EndAml) - { - return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG); - } - - /* Return the pointer to the EndTag if requested */ - - if (!UserFunction) - { - *(void **) Context = Aml; - } - - /* Normal exit */ - - return_ACPI_STATUS (AE_OK); - } - - Aml += Length; - Offset += Length; - } - - /* Did not find an EndTag descriptor */ - - return (AE_AML_NO_RESOURCE_END_TAG); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtValidateResource - * - * PARAMETERS: Aml - Pointer to the raw AML resource descriptor - * ReturnIndex - Where the resource index is returned. NULL - * if the index is not required. - * - * RETURN: Status, and optionally the Index into the global resource tables - * - * DESCRIPTION: Validate an AML resource descriptor by checking the Resource - * Type and Resource Length. Returns an index into the global - * resource information/dispatch tables for later use. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtValidateResource ( - void *Aml, - UINT8 *ReturnIndex) -{ - UINT8 ResourceType; - UINT8 ResourceIndex; - ACPI_RS_LENGTH ResourceLength; - ACPI_RS_LENGTH MinimumResourceLength; - - - ACPI_FUNCTION_ENTRY (); - - - /* - * 1) Validate the ResourceType field (Byte 0) - */ - ResourceType = ACPI_GET8 (Aml); - - /* - * Byte 0 contains the descriptor name (Resource Type) - * Examine the large/small bit in the resource header - */ - if (ResourceType & ACPI_RESOURCE_NAME_LARGE) - { - /* Verify the large resource type (name) against the max */ - - if (ResourceType > ACPI_RESOURCE_NAME_LARGE_MAX) - { - return (AE_AML_INVALID_RESOURCE_TYPE); - } - - /* - * Large Resource Type -- bits 6:0 contain the name - * Translate range 0x80-0x8B to index range 0x10-0x1B - */ - ResourceIndex = (UINT8) (ResourceType - 0x70); - } - else - { - /* - * Small Resource Type -- bits 6:3 contain the name - * Shift range to index range 0x00-0x0F - */ - ResourceIndex = (UINT8) - ((ResourceType & ACPI_RESOURCE_NAME_SMALL_MASK) >> 3); - } - - /* Check validity of the resource type, zero indicates name is invalid */ - - if (!AcpiGbl_ResourceTypes[ResourceIndex]) - { - return (AE_AML_INVALID_RESOURCE_TYPE); - } - - - /* - * 2) Validate the ResourceLength field. This ensures that the length - * is at least reasonable, and guarantees that it is non-zero. - */ - ResourceLength = AcpiUtGetResourceLength (Aml); - MinimumResourceLength = AcpiGbl_ResourceAmlSizes[ResourceIndex]; - - /* Validate based upon the type of resource - fixed length or variable */ - - switch (AcpiGbl_ResourceTypes[ResourceIndex]) - { - case ACPI_FIXED_LENGTH: - - /* Fixed length resource, length must match exactly */ - - if (ResourceLength != MinimumResourceLength) - { - return (AE_AML_BAD_RESOURCE_LENGTH); - } - break; - - case ACPI_VARIABLE_LENGTH: - - /* Variable length resource, length must be at least the minimum */ - - if (ResourceLength < MinimumResourceLength) - { - return (AE_AML_BAD_RESOURCE_LENGTH); - } - break; - - case ACPI_SMALL_VARIABLE_LENGTH: - - /* Small variable length resource, length can be (Min) or (Min-1) */ - - if ((ResourceLength > MinimumResourceLength) || - (ResourceLength < (MinimumResourceLength - 1))) - { - return (AE_AML_BAD_RESOURCE_LENGTH); - } - break; - - default: - - /* Shouldn't happen (because of validation earlier), but be sure */ - - return (AE_AML_INVALID_RESOURCE_TYPE); - } - - /* Optionally return the resource table index */ - - if (ReturnIndex) - { - *ReturnIndex = ResourceIndex; - } - - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetResourceType - * - * PARAMETERS: Aml - Pointer to the raw AML resource descriptor - * - * RETURN: The Resource Type with no extraneous bits (except the - * Large/Small descriptor bit -- this is left alone) - * - * DESCRIPTION: Extract the Resource Type/Name from the first byte of - * a resource descriptor. - * - ******************************************************************************/ - -UINT8 -AcpiUtGetResourceType ( - void *Aml) -{ - ACPI_FUNCTION_ENTRY (); - - - /* - * Byte 0 contains the descriptor name (Resource Type) - * Examine the large/small bit in the resource header - */ - if (ACPI_GET8 (Aml) & ACPI_RESOURCE_NAME_LARGE) - { - /* Large Resource Type -- bits 6:0 contain the name */ - - return (ACPI_GET8 (Aml)); - } - else - { - /* Small Resource Type -- bits 6:3 contain the name */ - - return ((UINT8) (ACPI_GET8 (Aml) & ACPI_RESOURCE_NAME_SMALL_MASK)); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetResourceLength - * - * PARAMETERS: Aml - Pointer to the raw AML resource descriptor - * - * RETURN: Byte Length - * - * DESCRIPTION: Get the "Resource Length" of a raw AML descriptor. By - * definition, this does not include the size of the descriptor - * header or the length field itself. - * - ******************************************************************************/ - -UINT16 -AcpiUtGetResourceLength ( - void *Aml) -{ - ACPI_RS_LENGTH ResourceLength; - - - ACPI_FUNCTION_ENTRY (); - - - /* - * Byte 0 contains the descriptor name (Resource Type) - * Examine the large/small bit in the resource header - */ - if (ACPI_GET8 (Aml) & ACPI_RESOURCE_NAME_LARGE) - { - /* Large Resource type -- bytes 1-2 contain the 16-bit length */ - - ACPI_MOVE_16_TO_16 (&ResourceLength, ACPI_ADD_PTR (UINT8, Aml, 1)); - - } - else - { - /* Small Resource type -- bits 2:0 of byte 0 contain the length */ - - ResourceLength = (UINT16) (ACPI_GET8 (Aml) & - ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK); - } - - return (ResourceLength); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetResourceHeaderLength - * - * PARAMETERS: Aml - Pointer to the raw AML resource descriptor - * - * RETURN: Length of the AML header (depends on large/small descriptor) - * - * DESCRIPTION: Get the length of the header for this resource. - * - ******************************************************************************/ - -UINT8 -AcpiUtGetResourceHeaderLength ( - void *Aml) -{ - ACPI_FUNCTION_ENTRY (); - - - /* Examine the large/small bit in the resource header */ - - if (ACPI_GET8 (Aml) & ACPI_RESOURCE_NAME_LARGE) - { - return (sizeof (AML_RESOURCE_LARGE_HEADER)); - } - else - { - return (sizeof (AML_RESOURCE_SMALL_HEADER)); - } -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetDescriptorLength - * - * PARAMETERS: Aml - Pointer to the raw AML resource descriptor - * - * RETURN: Byte length - * - * DESCRIPTION: Get the total byte length of a raw AML descriptor, including the - * length of the descriptor header and the length field itself. - * Used to walk descriptor lists. - * - ******************************************************************************/ - -UINT32 -AcpiUtGetDescriptorLength ( - void *Aml) -{ - ACPI_FUNCTION_ENTRY (); - - - /* - * Get the Resource Length (does not include header length) and add - * the header length (depends on if this is a small or large resource) - */ - return (AcpiUtGetResourceLength (Aml) + - AcpiUtGetResourceHeaderLength (Aml)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtGetResourceEndTag - * - * PARAMETERS: ObjDesc - The resource template buffer object - * EndTag - Where the pointer to the EndTag is returned - * - * RETURN: Status, pointer to the end tag - * - * DESCRIPTION: Find the EndTag resource descriptor in an AML resource template - * Note: allows a buffer length of zero. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtGetResourceEndTag ( - ACPI_OPERAND_OBJECT *ObjDesc, - UINT8 **EndTag) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (UtGetResourceEndTag); - - - /* Allow a buffer length of zero */ - - if (!ObjDesc->Buffer.Length) - { - *EndTag = ObjDesc->Buffer.Pointer; - return_ACPI_STATUS (AE_OK); - } - - /* Validate the template and get a pointer to the EndTag */ - - Status = AcpiUtWalkAmlResources (ObjDesc->Buffer.Pointer, - ObjDesc->Buffer.Length, NULL, EndTag); - - return_ACPI_STATUS (Status); -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utstate.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utstate.c deleted file mode 100644 index 245ca02bf..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utstate.c +++ /dev/null @@ -1,470 +0,0 @@ -/******************************************************************************* - * - * Module Name: utstate - state object support procedures - * - ******************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __UTSTATE_C__ - -#include "acpi.h" -#include "accommon.h" - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utstate") - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreatePkgStateAndPush - * - * PARAMETERS: Object - Object to be added to the new state - * Action - Increment/Decrement - * StateList - List the state will be added to - * - * RETURN: Status - * - * DESCRIPTION: Create a new state and push it - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtCreatePkgStateAndPush ( - void *InternalObject, - void *ExternalObject, - UINT16 Index, - ACPI_GENERIC_STATE **StateList) -{ - ACPI_GENERIC_STATE *State; - - - ACPI_FUNCTION_ENTRY (); - - - State = AcpiUtCreatePkgState (InternalObject, ExternalObject, Index); - if (!State) - { - return (AE_NO_MEMORY); - } - - AcpiUtPushGenericState (StateList, State); - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtPushGenericState - * - * PARAMETERS: ListHead - Head of the state stack - * State - State object to push - * - * RETURN: None - * - * DESCRIPTION: Push a state object onto a state stack - * - ******************************************************************************/ - -void -AcpiUtPushGenericState ( - ACPI_GENERIC_STATE **ListHead, - ACPI_GENERIC_STATE *State) -{ - ACPI_FUNCTION_TRACE (UtPushGenericState); - - - /* Push the state object onto the front of the list (stack) */ - - State->Common.Next = *ListHead; - *ListHead = State; - - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtPopGenericState - * - * PARAMETERS: ListHead - Head of the state stack - * - * RETURN: The popped state object - * - * DESCRIPTION: Pop a state object from a state stack - * - ******************************************************************************/ - -ACPI_GENERIC_STATE * -AcpiUtPopGenericState ( - ACPI_GENERIC_STATE **ListHead) -{ - ACPI_GENERIC_STATE *State; - - - ACPI_FUNCTION_TRACE (UtPopGenericState); - - - /* Remove the state object at the head of the list (stack) */ - - State = *ListHead; - if (State) - { - /* Update the list head */ - - *ListHead = State->Common.Next; - } - - return_PTR (State); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreateGenericState - * - * PARAMETERS: None - * - * RETURN: The new state object. NULL on failure. - * - * DESCRIPTION: Create a generic state object. Attempt to obtain one from - * the global state cache; If none available, create a new one. - * - ******************************************************************************/ - -ACPI_GENERIC_STATE * -AcpiUtCreateGenericState ( - void) -{ - ACPI_GENERIC_STATE *State; - - - ACPI_FUNCTION_ENTRY (); - - - State = AcpiOsAcquireObject (AcpiGbl_StateCache); - if (State) - { - /* Initialize */ - State->Common.DescriptorType = ACPI_DESC_TYPE_STATE; - } - - return (State); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreateThreadState - * - * PARAMETERS: None - * - * RETURN: New Thread State. NULL on failure - * - * DESCRIPTION: Create a "Thread State" - a flavor of the generic state used - * to track per-thread info during method execution - * - ******************************************************************************/ - -ACPI_THREAD_STATE * -AcpiUtCreateThreadState ( - void) -{ - ACPI_GENERIC_STATE *State; - - - ACPI_FUNCTION_TRACE (UtCreateThreadState); - - - /* Create the generic state object */ - - State = AcpiUtCreateGenericState (); - if (!State) - { - return_PTR (NULL); - } - - /* Init fields specific to the update struct */ - - State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_THREAD; - State->Thread.ThreadId = AcpiOsGetThreadId (); - - /* Check for invalid thread ID - zero is very bad, it will break things */ - - if (!State->Thread.ThreadId) - { - ACPI_ERROR ((AE_INFO, "Invalid zero ID from AcpiOsGetThreadId")); - State->Thread.ThreadId = (ACPI_THREAD_ID) 1; - } - - return_PTR ((ACPI_THREAD_STATE *) State); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreateUpdateState - * - * PARAMETERS: Object - Initial Object to be installed in the state - * Action - Update action to be performed - * - * RETURN: New state object, null on failure - * - * DESCRIPTION: Create an "Update State" - a flavor of the generic state used - * to update reference counts and delete complex objects such - * as packages. - * - ******************************************************************************/ - -ACPI_GENERIC_STATE * -AcpiUtCreateUpdateState ( - ACPI_OPERAND_OBJECT *Object, - UINT16 Action) -{ - ACPI_GENERIC_STATE *State; - - - ACPI_FUNCTION_TRACE_PTR (UtCreateUpdateState, Object); - - - /* Create the generic state object */ - - State = AcpiUtCreateGenericState (); - if (!State) - { - return_PTR (NULL); - } - - /* Init fields specific to the update struct */ - - State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_UPDATE; - State->Update.Object = Object; - State->Update.Value = Action; - - return_PTR (State); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreatePkgState - * - * PARAMETERS: Object - Initial Object to be installed in the state - * Action - Update action to be performed - * - * RETURN: New state object, null on failure - * - * DESCRIPTION: Create a "Package State" - * - ******************************************************************************/ - -ACPI_GENERIC_STATE * -AcpiUtCreatePkgState ( - void *InternalObject, - void *ExternalObject, - UINT16 Index) -{ - ACPI_GENERIC_STATE *State; - - - ACPI_FUNCTION_TRACE_PTR (UtCreatePkgState, InternalObject); - - - /* Create the generic state object */ - - State = AcpiUtCreateGenericState (); - if (!State) - { - return_PTR (NULL); - } - - /* Init fields specific to the update struct */ - - State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_PACKAGE; - State->Pkg.SourceObject = (ACPI_OPERAND_OBJECT *) InternalObject; - State->Pkg.DestObject = ExternalObject; - State->Pkg.Index= Index; - State->Pkg.NumPackages = 1; - - return_PTR (State); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreateControlState - * - * PARAMETERS: None - * - * RETURN: New state object, null on failure - * - * DESCRIPTION: Create a "Control State" - a flavor of the generic state used - * to support nested IF/WHILE constructs in the AML. - * - ******************************************************************************/ - -ACPI_GENERIC_STATE * -AcpiUtCreateControlState ( - void) -{ - ACPI_GENERIC_STATE *State; - - - ACPI_FUNCTION_TRACE (UtCreateControlState); - - - /* Create the generic state object */ - - State = AcpiUtCreateGenericState (); - if (!State) - { - return_PTR (NULL); - } - - /* Init fields specific to the control struct */ - - State->Common.DescriptorType = ACPI_DESC_TYPE_STATE_CONTROL; - State->Common.State = ACPI_CONTROL_CONDITIONAL_EXECUTING; - - return_PTR (State); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtDeleteGenericState - * - * PARAMETERS: State - The state object to be deleted - * - * RETURN: None - * - * DESCRIPTION: Release a state object to the state cache. NULL state objects - * are ignored. - * - ******************************************************************************/ - -void -AcpiUtDeleteGenericState ( - ACPI_GENERIC_STATE *State) -{ - ACPI_FUNCTION_TRACE (UtDeleteGenericState); - - - /* Ignore null state */ - - if (State) - { - (void) AcpiOsReleaseObject (AcpiGbl_StateCache, State); - } - return_VOID; -} - - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/uttrack.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/uttrack.c deleted file mode 100644 index d712c1a3e..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/uttrack.c +++ /dev/null @@ -1,726 +0,0 @@ -/****************************************************************************** - * - * Module Name: uttrack - Memory allocation tracking routines (debug only) - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - -/* - * These procedures are used for tracking memory leaks in the subsystem, and - * they get compiled out when the ACPI_DBG_TRACK_ALLOCATIONS is not set. - * - * Each memory allocation is tracked via a doubly linked list. Each - * element contains the caller's component, module name, function name, and - * line number. AcpiUtAllocate and AcpiUtAllocateZeroed call - * AcpiUtTrackAllocation to add an element to the list; deletion - * occurs in the body of AcpiUtFree. - */ - -#define __UTTRACK_C__ - -#include "acpi.h" -#include "accommon.h" - -#ifdef ACPI_DBG_TRACK_ALLOCATIONS - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("uttrack") - -/* Local prototypes */ - -static ACPI_DEBUG_MEM_BLOCK * -AcpiUtFindAllocation ( - void *Allocation); - -static ACPI_STATUS -AcpiUtTrackAllocation ( - ACPI_DEBUG_MEM_BLOCK *Address, - ACPI_SIZE Size, - UINT8 AllocType, - UINT32 Component, - const char *Module, - UINT32 Line); - -static ACPI_STATUS -AcpiUtRemoveAllocation ( - ACPI_DEBUG_MEM_BLOCK *Address, - UINT32 Component, - const char *Module, - UINT32 Line); - - -/******************************************************************************* - * - * FUNCTION: AcpiUtCreateList - * - * PARAMETERS: CacheName - Ascii name for the cache - * ObjectSize - Size of each cached object - * ReturnCache - Where the new cache object is returned - * - * RETURN: Status - * - * DESCRIPTION: Create a local memory list for tracking purposed - * - ******************************************************************************/ - -ACPI_STATUS -AcpiUtCreateList ( - char *ListName, - UINT16 ObjectSize, - ACPI_MEMORY_LIST **ReturnCache) -{ - ACPI_MEMORY_LIST *Cache; - - - Cache = AcpiOsAllocate (sizeof (ACPI_MEMORY_LIST)); - if (!Cache) - { - return (AE_NO_MEMORY); - } - - ACPI_MEMSET (Cache, 0, sizeof (ACPI_MEMORY_LIST)); - - Cache->ListName = ListName; - Cache->ObjectSize = ObjectSize; - - *ReturnCache = Cache; - return (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtAllocateAndTrack - * - * PARAMETERS: Size - Size of the allocation - * Component - Component type of caller - * Module - Source file name of caller - * Line - Line number of caller - * - * RETURN: Address of the allocated memory on success, NULL on failure. - * - * DESCRIPTION: The subsystem's equivalent of malloc. - * - ******************************************************************************/ - -void * -AcpiUtAllocateAndTrack ( - ACPI_SIZE Size, - UINT32 Component, - const char *Module, - UINT32 Line) -{ - ACPI_DEBUG_MEM_BLOCK *Allocation; - ACPI_STATUS Status; - - - Allocation = AcpiUtAllocate (Size + sizeof (ACPI_DEBUG_MEM_HEADER), - Component, Module, Line); - if (!Allocation) - { - return (NULL); - } - - Status = AcpiUtTrackAllocation (Allocation, Size, - ACPI_MEM_MALLOC, Component, Module, Line); - if (ACPI_FAILURE (Status)) - { - AcpiOsFree (Allocation); - return (NULL); - } - - AcpiGbl_GlobalList->TotalAllocated++; - AcpiGbl_GlobalList->TotalSize += (UINT32) Size; - AcpiGbl_GlobalList->CurrentTotalSize += (UINT32) Size; - if (AcpiGbl_GlobalList->CurrentTotalSize > AcpiGbl_GlobalList->MaxOccupied) - { - AcpiGbl_GlobalList->MaxOccupied = AcpiGbl_GlobalList->CurrentTotalSize; - } - - return ((void *) &Allocation->UserSpace); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtAllocateZeroedAndTrack - * - * PARAMETERS: Size - Size of the allocation - * Component - Component type of caller - * Module - Source file name of caller - * Line - Line number of caller - * - * RETURN: Address of the allocated memory on success, NULL on failure. - * - * DESCRIPTION: Subsystem equivalent of calloc. - * - ******************************************************************************/ - -void * -AcpiUtAllocateZeroedAndTrack ( - ACPI_SIZE Size, - UINT32 Component, - const char *Module, - UINT32 Line) -{ - ACPI_DEBUG_MEM_BLOCK *Allocation; - ACPI_STATUS Status; - - - Allocation = AcpiUtAllocateZeroed (Size + sizeof (ACPI_DEBUG_MEM_HEADER), - Component, Module, Line); - if (!Allocation) - { - /* Report allocation error */ - - ACPI_ERROR ((Module, Line, - "Could not allocate size %X", (UINT32) Size)); - return (NULL); - } - - Status = AcpiUtTrackAllocation (Allocation, Size, - ACPI_MEM_CALLOC, Component, Module, Line); - if (ACPI_FAILURE (Status)) - { - AcpiOsFree (Allocation); - return (NULL); - } - - AcpiGbl_GlobalList->TotalAllocated++; - AcpiGbl_GlobalList->TotalSize += (UINT32) Size; - AcpiGbl_GlobalList->CurrentTotalSize += (UINT32) Size; - if (AcpiGbl_GlobalList->CurrentTotalSize > AcpiGbl_GlobalList->MaxOccupied) - { - AcpiGbl_GlobalList->MaxOccupied = AcpiGbl_GlobalList->CurrentTotalSize; - } - - return ((void *) &Allocation->UserSpace); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtFreeAndTrack - * - * PARAMETERS: Allocation - Address of the memory to deallocate - * Component - Component type of caller - * Module - Source file name of caller - * Line - Line number of caller - * - * RETURN: None - * - * DESCRIPTION: Frees the memory at Allocation - * - ******************************************************************************/ - -void -AcpiUtFreeAndTrack ( - void *Allocation, - UINT32 Component, - const char *Module, - UINT32 Line) -{ - ACPI_DEBUG_MEM_BLOCK *DebugBlock; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE_PTR (UtFree, Allocation); - - - if (NULL == Allocation) - { - ACPI_ERROR ((Module, Line, - "Attempt to delete a NULL address")); - - return_VOID; - } - - DebugBlock = ACPI_CAST_PTR (ACPI_DEBUG_MEM_BLOCK, - (((char *) Allocation) - sizeof (ACPI_DEBUG_MEM_HEADER))); - - AcpiGbl_GlobalList->TotalFreed++; - AcpiGbl_GlobalList->CurrentTotalSize -= DebugBlock->Size; - - Status = AcpiUtRemoveAllocation (DebugBlock, - Component, Module, Line); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, "Could not free memory")); - } - - AcpiOsFree (DebugBlock); - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "%p freed\n", Allocation)); - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtFindAllocation - * - * PARAMETERS: Allocation - Address of allocated memory - * - * RETURN: A list element if found; NULL otherwise. - * - * DESCRIPTION: Searches for an element in the global allocation tracking list. - * - ******************************************************************************/ - -static ACPI_DEBUG_MEM_BLOCK * -AcpiUtFindAllocation ( - void *Allocation) -{ - ACPI_DEBUG_MEM_BLOCK *Element; - - - ACPI_FUNCTION_ENTRY (); - - - Element = AcpiGbl_GlobalList->ListHead; - - /* Search for the address. */ - - while (Element) - { - if (Element == Allocation) - { - return (Element); - } - - Element = Element->Next; - } - - return (NULL); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtTrackAllocation - * - * PARAMETERS: Allocation - Address of allocated memory - * Size - Size of the allocation - * AllocType - MEM_MALLOC or MEM_CALLOC - * Component - Component type of caller - * Module - Source file name of caller - * Line - Line number of caller - * - * RETURN: None. - * - * DESCRIPTION: Inserts an element into the global allocation tracking list. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiUtTrackAllocation ( - ACPI_DEBUG_MEM_BLOCK *Allocation, - ACPI_SIZE Size, - UINT8 AllocType, - UINT32 Component, - const char *Module, - UINT32 Line) -{ - ACPI_MEMORY_LIST *MemList; - ACPI_DEBUG_MEM_BLOCK *Element; - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE_PTR (UtTrackAllocation, Allocation); - - - MemList = AcpiGbl_GlobalList; - Status = AcpiUtAcquireMutex (ACPI_MTX_MEMORY); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Search list for this address to make sure it is not already on the list. - * This will catch several kinds of problems. - */ - Element = AcpiUtFindAllocation (Allocation); - if (Element) - { - ACPI_ERROR ((AE_INFO, - "UtTrackAllocation: Allocation already present in list! (%p)", - Allocation)); - - ACPI_ERROR ((AE_INFO, "Element %p Address %p", - Element, Allocation)); - - goto UnlockAndExit; - } - - /* Fill in the instance data. */ - - Allocation->Size = (UINT32) Size; - Allocation->AllocType = AllocType; - Allocation->Component = Component; - Allocation->Line = Line; - - ACPI_STRNCPY (Allocation->Module, Module, ACPI_MAX_MODULE_NAME); - Allocation->Module[ACPI_MAX_MODULE_NAME-1] = 0; - - /* Insert at list head */ - - if (MemList->ListHead) - { - ((ACPI_DEBUG_MEM_BLOCK *)(MemList->ListHead))->Previous = Allocation; - } - - Allocation->Next = MemList->ListHead; - Allocation->Previous = NULL; - - MemList->ListHead = Allocation; - - -UnlockAndExit: - Status = AcpiUtReleaseMutex (ACPI_MTX_MEMORY); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtRemoveAllocation - * - * PARAMETERS: Allocation - Address of allocated memory - * Component - Component type of caller - * Module - Source file name of caller - * Line - Line number of caller - * - * RETURN: - * - * DESCRIPTION: Deletes an element from the global allocation tracking list. - * - ******************************************************************************/ - -static ACPI_STATUS -AcpiUtRemoveAllocation ( - ACPI_DEBUG_MEM_BLOCK *Allocation, - UINT32 Component, - const char *Module, - UINT32 Line) -{ - ACPI_MEMORY_LIST *MemList; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (UtRemoveAllocation); - - - MemList = AcpiGbl_GlobalList; - if (NULL == MemList->ListHead) - { - /* No allocations! */ - - ACPI_ERROR ((Module, Line, - "Empty allocation list, nothing to free!")); - - return_ACPI_STATUS (AE_OK); - } - - Status = AcpiUtAcquireMutex (ACPI_MTX_MEMORY); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Unlink */ - - if (Allocation->Previous) - { - (Allocation->Previous)->Next = Allocation->Next; - } - else - { - MemList->ListHead = Allocation->Next; - } - - if (Allocation->Next) - { - (Allocation->Next)->Previous = Allocation->Previous; - } - - /* Mark the segment as deleted */ - - ACPI_MEMSET (&Allocation->UserSpace, 0xEA, Allocation->Size); - - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Freeing size 0%X\n", - Allocation->Size)); - - Status = AcpiUtReleaseMutex (ACPI_MTX_MEMORY); - return_ACPI_STATUS (Status); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtDumpAllocationInfo - * - * PARAMETERS: - * - * RETURN: None - * - * DESCRIPTION: Print some info about the outstanding allocations. - * - ******************************************************************************/ - -void -AcpiUtDumpAllocationInfo ( - void) -{ -/* - ACPI_MEMORY_LIST *MemList; -*/ - - ACPI_FUNCTION_TRACE (UtDumpAllocationInfo); - -/* - ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, - ("%30s: %4d (%3d Kb)\n", "Current allocations", - MemList->CurrentCount, - ROUND_UP_TO_1K (MemList->CurrentSize))); - - ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, - ("%30s: %4d (%3d Kb)\n", "Max concurrent allocations", - MemList->MaxConcurrentCount, - ROUND_UP_TO_1K (MemList->MaxConcurrentSize))); - - - ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, - ("%30s: %4d (%3d Kb)\n", "Total (all) internal objects", - RunningObjectCount, - ROUND_UP_TO_1K (RunningObjectSize))); - - ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, - ("%30s: %4d (%3d Kb)\n", "Total (all) allocations", - RunningAllocCount, - ROUND_UP_TO_1K (RunningAllocSize))); - - - ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, - ("%30s: %4d (%3d Kb)\n", "Current Nodes", - AcpiGbl_CurrentNodeCount, - ROUND_UP_TO_1K (AcpiGbl_CurrentNodeSize))); - - ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, - ("%30s: %4d (%3d Kb)\n", "Max Nodes", - AcpiGbl_MaxConcurrentNodeCount, - ROUND_UP_TO_1K ((AcpiGbl_MaxConcurrentNodeCount * - sizeof (ACPI_NAMESPACE_NODE))))); -*/ - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiUtDumpAllocations - * - * PARAMETERS: Component - Component(s) to dump info for. - * Module - Module to dump info for. NULL means all. - * - * RETURN: None - * - * DESCRIPTION: Print a list of all outstanding allocations. - * - ******************************************************************************/ - -void -AcpiUtDumpAllocations ( - UINT32 Component, - const char *Module) -{ - ACPI_DEBUG_MEM_BLOCK *Element; - ACPI_DESCRIPTOR *Descriptor; - UINT32 NumOutstanding = 0; - - - ACPI_FUNCTION_TRACE (UtDumpAllocations); - - - /* - * Walk the allocation list. - */ - if (ACPI_FAILURE (AcpiUtAcquireMutex (ACPI_MTX_MEMORY))) - { - return; - } - - Element = AcpiGbl_GlobalList->ListHead; - while (Element) - { - if ((Element->Component & Component) && - ((Module == NULL) || (0 == ACPI_STRCMP (Module, Element->Module)))) - { - /* Ignore allocated objects that are in a cache */ - - Descriptor = ACPI_CAST_PTR (ACPI_DESCRIPTOR, &Element->UserSpace); - if (ACPI_GET_DESCRIPTOR_TYPE (Descriptor) != ACPI_DESC_TYPE_CACHED) - { - AcpiOsPrintf ("%p Len %04X %9.9s-%d [%s] ", - Descriptor, Element->Size, Element->Module, - Element->Line, AcpiUtGetDescriptorName (Descriptor)); - - /* Most of the elements will be Operand objects. */ - - switch (ACPI_GET_DESCRIPTOR_TYPE (Descriptor)) - { - case ACPI_DESC_TYPE_OPERAND: - AcpiOsPrintf ("%12.12s R%hd", - AcpiUtGetTypeName (Descriptor->Object.Common.Type), - Descriptor->Object.Common.ReferenceCount); - break; - - case ACPI_DESC_TYPE_PARSER: - AcpiOsPrintf ("AmlOpcode %04hX", - Descriptor->Op.Asl.AmlOpcode); - break; - - case ACPI_DESC_TYPE_NAMED: - AcpiOsPrintf ("%4.4s", - AcpiUtGetNodeName (&Descriptor->Node)); - break; - - default: - break; - } - - AcpiOsPrintf ( "\n"); - NumOutstanding++; - } - } - Element = Element->Next; - } - - (void) AcpiUtReleaseMutex (ACPI_MTX_MEMORY); - - /* Print summary */ - - if (!NumOutstanding) - { - ACPI_INFO ((AE_INFO, - "No outstanding allocations")); - } - else - { - ACPI_ERROR ((AE_INFO, - "%d(%X) Outstanding allocations", - NumOutstanding, NumOutstanding)); - } - - return_VOID; -} - -#endif /* ACPI_DBG_TRACK_ALLOCATIONS */ - diff --git a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utxface.c b/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utxface.c deleted file mode 100644 index ba57f4922..000000000 --- a/l4/pkg/acpica/lib-acpi/src/acpica/utilities/utxface.c +++ /dev/null @@ -1,734 +0,0 @@ -/****************************************************************************** - * - * Module Name: utxface - External interfaces for "global" ACPI functions - * - *****************************************************************************/ - -/****************************************************************************** - * - * 1. Copyright Notice - * - * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. - * All rights reserved. - * - * 2. License - * - * 2.1. This is your license from Intel Corp. under its intellectual property - * rights. You may have additional license terms from the party that provided - * you this software, covering your right to use that party's intellectual - * property rights. - * - * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a - * copy of the source code appearing in this file ("Covered Code") an - * irrevocable, perpetual, worldwide license under Intel's copyrights in the - * base code distributed originally by Intel ("Original Intel Code") to copy, - * make derivatives, distribute, use and display any portion of the Covered - * Code in any form, with the right to sublicense such rights; and - * - * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent - * license (with the right to sublicense), under only those claims of Intel - * patents that are infringed by the Original Intel Code, to make, use, sell, - * offer to sell, and import the Covered Code and derivative works thereof - * solely to the minimum extent necessary to exercise the above copyright - * license, and in no event shall the patent license extend to any additions - * to or modifications of the Original Intel Code. No other license or right - * is granted directly or by implication, estoppel or otherwise; - * - * The above copyright and patent license is granted only if the following - * conditions are met: - * - * 3. Conditions - * - * 3.1. Redistribution of Source with Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification with rights to further distribute source must include - * the above Copyright Notice, the above License, this list of Conditions, - * and the following Disclaimer and Export Compliance provision. In addition, - * Licensee must cause all Covered Code to which Licensee contributes to - * contain a file documenting the changes Licensee made to create that Covered - * Code and the date of any change. Licensee must include in that file the - * documentation of any changes made by any predecessor Licensee. Licensee - * must include a prominent statement that the modification is derived, - * directly or indirectly, from Original Intel Code. - * - * 3.2. Redistribution of Source with no Rights to Further Distribute Source. - * Redistribution of source code of any substantial portion of the Covered - * Code or modification without rights to further distribute source must - * include the following Disclaimer and Export Compliance provision in the - * documentation and/or other materials provided with distribution. In - * addition, Licensee may not authorize further sublicense of source of any - * portion of the Covered Code, and must include terms to the effect that the - * license from Licensee to its licensee is limited to the intellectual - * property embodied in the software Licensee provides to its licensee, and - * not to intellectual property embodied in modifications its licensee may - * make. - * - * 3.3. Redistribution of Executable. Redistribution in executable form of any - * substantial portion of the Covered Code or modification must reproduce the - * above Copyright Notice, and the following Disclaimer and Export Compliance - * provision in the documentation and/or other materials provided with the - * distribution. - * - * 3.4. Intel retains all right, title, and interest in and to the Original - * Intel Code. - * - * 3.5. Neither the name Intel nor any other trademark owned or controlled by - * Intel shall be used in advertising or otherwise to promote the sale, use or - * other dealings in products derived from or relating to the Covered Code - * without prior written authorization from Intel. - * - * 4. Disclaimer and Export Compliance - * - * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED - * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE - * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, - * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY - * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY - * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A - * PARTICULAR PURPOSE. - * - * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES - * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR - * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, - * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY - * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL - * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS - * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY - * LIMITED REMEDY. - * - * 4.3. Licensee shall not export, either directly or indirectly, any of this - * software or system incorporating such software without first obtaining any - * required license or other approval from the U. S. Department of Commerce or - * any other agency or department of the United States Government. In the - * event Licensee exports any such software from the United States or - * re-exports any such software from a foreign destination, Licensee shall - * ensure that the distribution and export/re-export of the software is in - * compliance with all laws, regulations, orders, or other restrictions of the - * U.S. Export Administration Regulations. Licensee agrees that neither it nor - * any of its subsidiaries will export/re-export any technical data, process, - * software, or service, directly or indirectly, to any country for which the - * United States government or any agency thereof requires an export license, - * other governmental approval, or letter of assurance, without first obtaining - * such license, approval or letter. - * - *****************************************************************************/ - - -#define __UTXFACE_C__ - -#include "acpi.h" -#include "accommon.h" -#include "acevents.h" -#include "acnamesp.h" -#include "acdebug.h" -#include "actables.h" - -#define _COMPONENT ACPI_UTILITIES - ACPI_MODULE_NAME ("utxface") - - -#ifndef ACPI_ASL_COMPILER - -/******************************************************************************* - * - * FUNCTION: AcpiInitializeSubsystem - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Initializes all global variables. This is the first function - * called, so any early initialization belongs here. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiInitializeSubsystem ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiInitializeSubsystem); - - - AcpiGbl_StartupFlags = ACPI_SUBSYSTEM_INITIALIZE; - ACPI_DEBUG_EXEC (AcpiUtInitStackPtrTrace ()); - - /* Initialize the OS-Dependent layer */ - - Status = AcpiOsInitialize (); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, "During OSL initialization")); - return_ACPI_STATUS (Status); - } - - /* Initialize all globals used by the subsystem */ - - Status = AcpiUtInitGlobals (); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, "During initialization of globals")); - return_ACPI_STATUS (Status); - } - - /* Create the default mutex objects */ - - Status = AcpiUtMutexInitialize (); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, "During Global Mutex creation")); - return_ACPI_STATUS (Status); - } - - /* - * Initialize the namespace manager and - * the root of the namespace tree - */ - Status = AcpiNsRootInitialize (); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, "During Namespace initialization")); - return_ACPI_STATUS (Status); - } - - /* If configured, initialize the AML debugger */ - - ACPI_DEBUGGER_EXEC (Status = AcpiDbInitialize ()); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiInitializeSubsystem) - - -/******************************************************************************* - * - * FUNCTION: AcpiEnableSubsystem - * - * PARAMETERS: Flags - Init/enable Options - * - * RETURN: Status - * - * DESCRIPTION: Completes the subsystem initialization including hardware. - * Puts system into ACPI mode if it isn't already. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEnableSubsystem ( - UINT32 Flags) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (AcpiEnableSubsystem); - - - /* Enable ACPI mode */ - - if (!(Flags & ACPI_NO_ACPI_ENABLE)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Going into ACPI mode\n")); - - AcpiGbl_OriginalMode = AcpiHwGetMode(); - - Status = AcpiEnable (); - if (ACPI_FAILURE (Status)) - { - ACPI_WARNING ((AE_INFO, "AcpiEnable failed")); - return_ACPI_STATUS (Status); - } - } - - /* - * Obtain a permanent mapping for the FACS. This is required for the - * Global Lock and the Firmware Waking Vector - */ - Status = AcpiTbInitializeFacs (); - if (ACPI_FAILURE (Status)) - { - ACPI_WARNING ((AE_INFO, "Could not map the FACS table")); - return_ACPI_STATUS (Status); - } - - /* - * Install the default OpRegion handlers. These are installed unless - * other handlers have already been installed via the - * InstallAddressSpaceHandler interface. - */ - if (!(Flags & ACPI_NO_ADDRESS_SPACE_INIT)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "[Init] Installing default address space handlers\n")); - - Status = AcpiEvInstallRegionHandlers (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* - * Initialize ACPI Event handling (Fixed and General Purpose) - * - * Note1: We must have the hardware and events initialized before we can - * execute any control methods safely. Any control method can require - * ACPI hardware support, so the hardware must be fully initialized before - * any method execution! - * - * Note2: Fixed events are initialized and enabled here. GPEs are - * initialized, but cannot be enabled until after the hardware is - * completely initialized (SCI and GlobalLock activated) and the various - * initialization control methods are run (_REG, _STA, _INI) on the - * entire namespace. - */ - if (!(Flags & ACPI_NO_EVENT_INIT)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "[Init] Initializing ACPI events\n")); - - Status = AcpiEvInitializeEvents (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* - * Install the SCI handler and Global Lock handler. This completes the - * hardware initialization. - */ - if (!(Flags & ACPI_NO_HANDLER_INIT)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "[Init] Installing SCI/GL handlers\n")); - - Status = AcpiEvInstallXruptHandlers (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiEnableSubsystem) - - -/******************************************************************************* - * - * FUNCTION: AcpiInitializeObjects - * - * PARAMETERS: Flags - Init/enable Options - * - * RETURN: Status - * - * DESCRIPTION: Completes namespace initialization by initializing device - * objects and executing AML code for Regions, buffers, etc. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiInitializeObjects ( - UINT32 Flags) -{ - ACPI_STATUS Status = AE_OK; - - - ACPI_FUNCTION_TRACE (AcpiInitializeObjects); - - - /* - * Run all _REG methods - * - * Note: Any objects accessed by the _REG methods will be automatically - * initialized, even if they contain executable AML (see the call to - * AcpiNsInitializeObjects below). - */ - if (!(Flags & ACPI_NO_ADDRESS_SPACE_INIT)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "[Init] Executing _REG OpRegion methods\n")); - - Status = AcpiEvInitializeOpRegions (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* - * Execute any module-level code that was detected during the table load - * phase. Although illegal since ACPI 2.0, there are many machines that - * contain this type of code. Each block of detected executable AML code - * outside of any control method is wrapped with a temporary control - * method object and placed on a global list. The methods on this list - * are executed below. - */ - AcpiNsExecModuleCodeList (); - - /* - * Initialize the objects that remain uninitialized. This runs the - * executable AML that may be part of the declaration of these objects: - * OperationRegions, BufferFields, Buffers, and Packages. - */ - if (!(Flags & ACPI_NO_OBJECT_INIT)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "[Init] Completing Initialization of ACPI Objects\n")); - - Status = AcpiNsInitializeObjects (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* - * Initialize all device objects in the namespace. This runs the device - * _STA and _INI methods. - */ - if (!(Flags & ACPI_NO_DEVICE_INIT)) - { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "[Init] Initializing ACPI Devices\n")); - - Status = AcpiNsInitializeDevices (); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - } - - /* - * Initialize the GPE blocks defined in the FADT (GPE block 0 and 1). - * The runtime GPEs are enabled here. - * - * This is where the _PRW methods are executed for the GPEs. These - * methods can only be executed after the SCI and Global Lock handlers are - * installed and initialized. - * - * GPEs can only be enabled after the _REG, _STA, and _INI methods have - * been run. This ensures that all Operation Regions and all Devices have - * been initialized and are ready. - */ - if (!(Flags & ACPI_NO_EVENT_INIT)) - { - Status = AcpiEvInstallFadtGpes (); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - } - - /* - * Empty the caches (delete the cached objects) on the assumption that - * the table load filled them up more than they will be at runtime -- - * thus wasting non-paged memory. - */ - Status = AcpiPurgeCachedObjects (); - - AcpiGbl_StartupFlags |= ACPI_INITIALIZED_OK; - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiInitializeObjects) - - -#endif - -/******************************************************************************* - * - * FUNCTION: AcpiTerminate - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Shutdown the ACPICA subsystem and release all resources. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiTerminate ( - void) -{ - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiTerminate); - - - /* Just exit if subsystem is already shutdown */ - - if (AcpiGbl_Shutdown) - { - ACPI_ERROR ((AE_INFO, "ACPI Subsystem is already terminated")); - return_ACPI_STATUS (AE_OK); - } - - /* Subsystem appears active, go ahead and shut it down */ - - AcpiGbl_Shutdown = TRUE; - AcpiGbl_StartupFlags = 0; - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Shutting down ACPI Subsystem\n")); - - /* Terminate the AML Debugger if present */ - - ACPI_DEBUGGER_EXEC (AcpiGbl_DbTerminateThreads = TRUE); - - /* Shutdown and free all resources */ - - AcpiUtSubsystemShutdown (); - - /* Free the mutex objects */ - - AcpiUtMutexTerminate (); - - -#ifdef ACPI_DEBUGGER - - /* Shut down the debugger */ - - AcpiDbTerminate (); -#endif - - /* Now we can shutdown the OS-dependent layer */ - - Status = AcpiOsTerminate (); - return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiTerminate) - - -#ifndef ACPI_ASL_COMPILER -/******************************************************************************* - * - * FUNCTION: AcpiSubsystemStatus - * - * PARAMETERS: None - * - * RETURN: Status of the ACPI subsystem - * - * DESCRIPTION: Other drivers that use the ACPI subsystem should call this - * before making any other calls, to ensure the subsystem - * initialized successfully. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiSubsystemStatus ( - void) -{ - - if (AcpiGbl_StartupFlags & ACPI_INITIALIZED_OK) - { - return (AE_OK); - } - else - { - return (AE_ERROR); - } -} - -ACPI_EXPORT_SYMBOL (AcpiSubsystemStatus) - - -/******************************************************************************* - * - * FUNCTION: AcpiGetSystemInfo - * - * PARAMETERS: OutBuffer - A buffer to receive the resources for the - * device - * - * RETURN: Status - the status of the call - * - * DESCRIPTION: This function is called to get information about the current - * state of the ACPI subsystem. It will return system information - * in the OutBuffer. - * - * If the function fails an appropriate status will be returned - * and the value of OutBuffer is undefined. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetSystemInfo ( - ACPI_BUFFER *OutBuffer) -{ - ACPI_SYSTEM_INFO *InfoPtr; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (AcpiGetSystemInfo); - - - /* Parameter validation */ - - Status = AcpiUtValidateBuffer (OutBuffer); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* Validate/Allocate/Clear caller buffer */ - - Status = AcpiUtInitializeBuffer (OutBuffer, sizeof (ACPI_SYSTEM_INFO)); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } - - /* - * Populate the return buffer - */ - InfoPtr = (ACPI_SYSTEM_INFO *) OutBuffer->Pointer; - - InfoPtr->AcpiCaVersion = ACPI_CA_VERSION; - - /* System flags (ACPI capabilities) */ - - InfoPtr->Flags = ACPI_SYS_MODE_ACPI; - - /* Timer resolution - 24 or 32 bits */ - - if (AcpiGbl_FADT.Flags & ACPI_FADT_32BIT_TIMER) - { - InfoPtr->TimerResolution = 24; - } - else - { - InfoPtr->TimerResolution = 32; - } - - /* Clear the reserved fields */ - - InfoPtr->Reserved1 = 0; - InfoPtr->Reserved2 = 0; - - /* Current debug levels */ - - InfoPtr->DebugLayer = AcpiDbgLayer; - InfoPtr->DebugLevel = AcpiDbgLevel; - - return_ACPI_STATUS (AE_OK); -} - -ACPI_EXPORT_SYMBOL (AcpiGetSystemInfo) - - -/******************************************************************************* - * - * FUNCTION: AcpiGetStatistics - * - * PARAMETERS: Stats - Where the statistics are returned - * - * RETURN: Status - the status of the call - * - * DESCRIPTION: Get the contents of the various system counters - * - ******************************************************************************/ - -ACPI_STATUS -AcpiGetStatistics ( - ACPI_STATISTICS *Stats) -{ - ACPI_FUNCTION_TRACE (AcpiGetStatistics); - - - /* Parameter validation */ - - if (!Stats) - { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } - - /* Various interrupt-based event counters */ - - Stats->SciCount = AcpiSciCount; - Stats->GpeCount = AcpiGpeCount; - - ACPI_MEMCPY (Stats->FixedEventCount, AcpiFixedEventCount, - sizeof (AcpiFixedEventCount)); - - - /* Other counters */ - - Stats->MethodCount = AcpiMethodCount; - - return_ACPI_STATUS (AE_OK); -} - -ACPI_EXPORT_SYMBOL (AcpiGetStatistics) - - -/***************************************************************************** - * - * FUNCTION: AcpiInstallInitializationHandler - * - * PARAMETERS: Handler - Callback procedure - * Function - Not (currently) used, see below - * - * RETURN: Status - * - * DESCRIPTION: Install an initialization handler - * - * TBD: When a second function is added, must save the Function also. - * - ****************************************************************************/ - -ACPI_STATUS -AcpiInstallInitializationHandler ( - ACPI_INIT_HANDLER Handler, - UINT32 Function) -{ - - if (!Handler) - { - return (AE_BAD_PARAMETER); - } - - if (AcpiGbl_InitHandler) - { - return (AE_ALREADY_EXISTS); - } - - AcpiGbl_InitHandler = Handler; - return AE_OK; -} - -ACPI_EXPORT_SYMBOL (AcpiInstallInitializationHandler) - - -/***************************************************************************** - * - * FUNCTION: AcpiPurgeCachedObjects - * - * PARAMETERS: None - * - * RETURN: Status - * - * DESCRIPTION: Empty all caches (delete the cached objects) - * - ****************************************************************************/ - -ACPI_STATUS -AcpiPurgeCachedObjects ( - void) -{ - ACPI_FUNCTION_TRACE (AcpiPurgeCachedObjects); - - (void) AcpiOsPurgeCache (AcpiGbl_StateCache); - (void) AcpiOsPurgeCache (AcpiGbl_OperandCache); - (void) AcpiOsPurgeCache (AcpiGbl_PsNodeCache); - (void) AcpiOsPurgeCache (AcpiGbl_PsNodeExtCache); - return_ACPI_STATUS (AE_OK); -} - -ACPI_EXPORT_SYMBOL (AcpiPurgeCachedObjects) - -#endif /* ACPI_ASL_COMPILER */ - diff --git a/l4/pkg/drivers/generic/include/io.h b/l4/pkg/drivers/generic/include/io.h deleted file mode 100644 index f6961e575..000000000 --- a/l4/pkg/drivers/generic/include/io.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * (c) 2009 Adam Lackorzynski - * economic rights: Technische Universität Dresden (Germany) - * This file is part of TUD:OS and distributed under the terms of the - * GNU Lesser General Public License 2.1. - * Please see the COPYING-LGPL-2.1 file for details. - */ -#ifndef __ARM_DRIVERS__GENERIC__INCLUDE__IO_H__ -#define __ARM_DRIVERS__GENERIC__INCLUDE__IO_H__ - -#include -#include - -EXTERN_C_BEGIN - -L4_INLINE -l4_umword_t io_read_mword(l4_addr_t addr); - -L4_INLINE -void io_write_mword(l4_addr_t addr, l4_addr_t val); - - - -L4_INLINE -l4_umword_t io_read_mword(l4_addr_t addr) -{ - return *(volatile l4_umword_t *)addr; -} - - -L4_INLINE -void io_write_mword(l4_addr_t addr, l4_umword_t val) -{ - *(volatile l4_umword_t *)addr = val; -} - -EXTERN_C_END - -#endif /* ! __ARM_DRIVERS__LCD__INCLUDE__LCD_H__ */ diff --git a/l4/pkg/drivers/generic/src/amba.c b/l4/pkg/drivers/generic/src/amba.c deleted file mode 100644 index c9eabf0e5..000000000 --- a/l4/pkg/drivers/generic/src/amba.c +++ /dev/null @@ -1,17 +0,0 @@ - -#include -#include - - -void amba_read_id(l4_addr_t address, uint32_t *periphid, uint32_t *cellid) -{ - *periphid = ((io_read_mword((l4_addr_t)address + 0) & 0xff) << 0) - | ((io_read_mword((l4_addr_t)address + 4) & 0xff) << 8) - | ((io_read_mword((l4_addr_t)address + 8) & 0xff) << 16) - | ((io_read_mword((l4_addr_t)address + 12) & 0xff) << 24); - - *cellid = ((io_read_mword((l4_addr_t)address + 16) & 0xff) << 0) - | ((io_read_mword((l4_addr_t)address + 20) & 0xff) << 8) - | ((io_read_mword((l4_addr_t)address + 24) & 0xff) << 16) - | ((io_read_mword((l4_addr_t)address + 28) & 0xff) << 24); -} diff --git a/l4/pkg/examples/sys/vmtest/main.c b/l4/pkg/examples/sys/vmtest/main.c deleted file mode 100644 index 4017b2f31..000000000 --- a/l4/pkg/examples/sys/vmtest/main.c +++ /dev/null @@ -1,499 +0,0 @@ -/* - * (c) 2008-2009 Adam Lackorzynski , - * Henning Schild - * economic rights: Technische Universität Dresden (Germany) - * - * This file is part of TUD:OS and distributed under the terms of the - * GNU General Public License 2. - * Please see the COPYING-GPL-2 file for details. - */ -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#define STACKSIZE (8<<10) - -static char stack[STACKSIZE]; -static char hdl_stack[STACKSIZE]; -static unsigned long idt[32 * 2] __attribute__((aligned(4096))); -static unsigned long gdt[32 * 2] __attribute__((aligned(4096))); - -void vm_resume(void); -void handle_vmexit(void); -l4_vcpu_state_t *vcpu; -l4_vm_svm_vmcb_t *vmcb_s; - -static void init_vmcb(l4_vm_svm_vmcb_t *vmcb_s) { - - vmcb_s->control_area.np_enable = 1; - vmcb_s->control_area.guest_asid_tlb_ctl = 1; - - vmcb_s->state_save_area.es.selector = 0; - vmcb_s->state_save_area.es.attrib = 0; - vmcb_s->state_save_area.es.limit = 0; - vmcb_s->state_save_area.es.base = 0ULL; - - // vmcb[256 + 0] = 0; // es; attrib sel - - vmcb_s->state_save_area.cs.selector = 0x8; - vmcb_s->state_save_area.cs.attrib = 0xc9b; - vmcb_s->state_save_area.cs.limit = 0xffffffff; - vmcb_s->state_save_area.cs.base = 0ULL; - - vmcb_s->state_save_area.ss.selector = 0x10; - vmcb_s->state_save_area.ss.attrib = 0xc93; - vmcb_s->state_save_area.ss.limit = 0xffffffff; - vmcb_s->state_save_area.ss.base = 0ULL; - - vmcb_s->state_save_area.ds.selector = 0x23; - vmcb_s->state_save_area.ds.attrib = 0xcf3; - vmcb_s->state_save_area.ds.limit = 0xffffffff; - vmcb_s->state_save_area.ds.base = 0ULL; - - vmcb_s->state_save_area.fs.selector = 0; - vmcb_s->state_save_area.fs.attrib = 0xcf3; - vmcb_s->state_save_area.fs.limit = 0xffffffff; - vmcb_s->state_save_area.fs.base = 0ULL; - - vmcb_s->state_save_area.gs.selector = 0; - vmcb_s->state_save_area.gs.attrib = 0xcf3; - vmcb_s->state_save_area.gs.limit = 0xffffffff; - vmcb_s->state_save_area.gs.base = 0ULL; - - vmcb_s->state_save_area.gdtr.selector = 0; - vmcb_s->state_save_area.gdtr.attrib = 0; - vmcb_s->state_save_area.gdtr.limit = 0x3f; - vmcb_s->state_save_area.gdtr.base = (unsigned long) gdt; - - vmcb_s->state_save_area.ldtr.selector = 0; - vmcb_s->state_save_area.ldtr.attrib = 0; - vmcb_s->state_save_area.ldtr.limit = 0; - vmcb_s->state_save_area.ldtr.base = 0; - - vmcb_s->state_save_area.idtr.selector = 0; - vmcb_s->state_save_area.idtr.attrib = 0; - vmcb_s->state_save_area.idtr.limit = 0xff; - vmcb_s->state_save_area.idtr.base = (unsigned long) idt; - - vmcb_s->state_save_area.tr.selector = 0x28; - vmcb_s->state_save_area.tr.attrib = 0x8b; - vmcb_s->state_save_area.tr.limit = 0x67; - vmcb_s->state_save_area.tr.base = 0; - - vmcb_s->state_save_area.g_pat = 0x7040600010406ULL; -} - -static int check_svm(void) { - l4_umword_t ax, bx, cx, dx; - - if (!l4util_cpu_has_cpuid()) - return 1; - - l4util_cpu_cpuid(0x80000001, &ax, &bx, &cx, &dx); - - if (!(cx & 4)) { - printf("CPU does not support SVM.\n"); - return 1; - } - - l4util_cpu_cpuid(0x8000000a, &ax, &bx, &cx, &dx); - - printf("SVM revision: %lx\n", ax & 0xf); - printf("Number of ASIDs: %lx\n", bx); - - return 0; -} - -static int check_svm_npt(void) { - l4_umword_t ax, bx, cx, dx; - - l4util_cpu_cpuid(0x8000000a, &ax, &bx, &cx, &dx); - - printf("NPT available: %s\n", dx & 1 ? "yes" : "no"); - - return (!(dx & 1)); -} - -int vmexit = 0; - -static int cnt_triggered, cnt_received; - -static void handler(void) { - //if(vmexit){ - //vmexit = 0; - //handle_vmexit(); - //} else { - // exception and ipc handling here - cnt_received++; - printf("received interrupt %d | %d %d\n", (int)vcpu->i.label, - cnt_triggered, cnt_received); - //} - vm_resume(); -} - -void vm_resume(void) { - l4_msgtag_t tag; - -// if ((vmcb_s->state_save_area.rip >= marker)) { -// //printf("set tf for rip=%llx\n", vmcb_s->state_save_area.rip); -// vmcb_s->state_save_area.rflags |= 0x100; // set tf -// } - - vmcb_s->control_area.intercept_exceptions |= 0xa; // intercept #1 & #3 - vmcb_s->control_area.intercept_exceptions |= 0xffffffff; - vmcb_s->control_area.intercept_instruction1 |= 0x20; // intercept int1 - - //vmcb_s->control_area.exitcode = 0x100 << i; - vmcb_s->control_area.exitcode = 0; - - tag = l4_thread_vcpu_resume_commit(L4_INVALID_CAP, - l4_thread_vcpu_resume_start()); - if (l4_error(tag)) - printf("vm-resume failed: %s (%ld)\n", l4sys_errtostr(l4_error(tag)), - l4_error(tag)); - - // if l4_thread_vcpu_resume_commit returns without error - // tell the handler that a vmexit occurred - vmexit = 1; - // and rewind the stack before we return into the handler - // simulating an upcall - handle_vmexit(); - vm_resume(); -#if 0 - asm volatile ( - "movl %0, %%esp\n" - "pushl %1\n" - "ret\n" - : : "r"(vcpu->entry_sp), "r"(handler) ); -#endif -} - -void handle_vmexit(void) { - static unsigned int i = 0; - ++i; - printf("iteration=%d, exit code=%llx", i, - vmcb_s->control_area.exitcode); - - if (vmcb_s->control_area.exitcode == 0x43) - // int3 is treated as fault, not trap - vmcb_s->state_save_area.rip += 1; - - if (vmcb_s->control_area.exitcode == 0x46) { -// if (vmcb_s->state_save_area.rip >= test_end) -// break; - vmcb_s->state_save_area.rip += 2; - } - - if (vmcb_s->control_area.exitcode == 0x400) { - printf("host-level page fault; error code=%llx, gpa=%llx\n", - vmcb_s->control_area.exitinfo1, vmcb_s->control_area.exitinfo2); - } - - if (vmcb_s->control_area.exitcode == 0x4e) { - printf("page fault; error code=%llx, pfa=%llx\n", - vmcb_s->control_area.exitinfo1, vmcb_s->control_area.exitinfo2); - } - - if (vmcb_s->control_area.exitcode == 0x81) { - printf("VMMCALL\n"); - vmcb_s->state_save_area.rip += 3; - } - - if (vmcb_s->control_area.exitcode == 0x4d) { - printf("cs=%08x attrib=%x, limit=%x, base=%llx\n", - vmcb_s->state_save_area.cs.selector, - vmcb_s->state_save_area.cs.attrib, - vmcb_s->state_save_area.cs.limit, - vmcb_s->state_save_area.cs.base); - printf("ss=%08x attrib=%x, limit=%x, base=%llx\n", - vmcb_s->state_save_area.ss.selector, - vmcb_s->state_save_area.ss.attrib, - vmcb_s->state_save_area.ss.limit, - vmcb_s->state_save_area.ss.base); - printf("np_enabled=%lld\n", vmcb_s->control_area.np_enable); - printf("cr0=%llx cr4=%llx\n", vmcb_s->state_save_area.cr0, - vmcb_s->state_save_area.cr4); - printf("interrupt_ctl=%llx\n", vmcb_s->control_area.interrupt_ctl); - printf("rip=%llx, rsp=%llx, cpl=%d\n", vmcb_s->state_save_area.rip, - vmcb_s->state_save_area.rsp, vmcb_s->state_save_area.cpl); - printf("exitinfo1=%llx\n", vmcb_s->control_area.exitinfo1); - } -} - -static l4_vcpu_state_t *get_state_mem(l4_addr_t *extstate) { - static int done; - long r; - l4_msgtag_t tag; - static l4_addr_t ext_state; - - if (done) { - *extstate = ext_state; - return vcpu; - } - - if ((r = l4vcpu_ext_alloc(&vcpu, &ext_state, L4_BASE_TASK_CAP, - l4re_env()->rm))) { - printf("Adding state mem failed: %ld\n", r); - exit(1); - } - - vcpu->state = L4_VCPU_F_FPU_ENABLED; - vcpu->saved_state = L4_VCPU_F_USER_MODE | L4_VCPU_F_FPU_ENABLED | L4_VCPU_F_IRQ; - - vcpu->entry_ip = (l4_umword_t)handler; - l4_umword_t * stack = (l4_umword_t*)(hdl_stack + STACKSIZE); - --stack; - *stack = 0; - vcpu->entry_sp = (l4_umword_t)stack; - - - tag = l4_thread_vcpu_control_ext(L4_INVALID_CAP, (l4_addr_t) vcpu); - if (l4_error(tag)) { - printf("Could not enable ext vCPU\n"); - exit(1); - } - - done = 1; - *extstate = ext_state; - - return vcpu; -} - - -static void run_test(int np_available) { - l4_umword_t eflags; - l4_msgtag_t tag; - l4_cap_idx_t vm_task = l4re_util_cap_alloc(); -// int i; - l4_umword_t ip; //, marker, test_end; - l4_addr_t vmcx; - get_state_mem(&vmcx); - - printf("run test, np_available=%d\n", np_available); - - if (l4_is_invalid_cap(vm_task)) { - printf("No more caps.\n"); - return; - } - - tag = l4_factory_create_vm(l4re_env()->factory, vm_task); - if (l4_error(tag)) { - printf("Failed to create new task\n"); - exit(1); - } - - vmcb_s = (l4_vm_svm_vmcb_t *) vmcx; - - vcpu->user_task = vm_task; - - vcpu->r.dx = 1; - vcpu->r.cx = 2; - vcpu->r.bx = 3; - vcpu->r.bp = 4; - vcpu->r.si = 5; - vcpu->r.di = 6; - - printf("clearing exit codes\n"); - - // asm volatile(" jmp 1f; \n" - // "2: nop \n" - // " nop \n" - // " ud2 \n" - // " int3 \n" - // "3: nop \n" - // " nop \n" - // " int3 \n" - // //"3: nop \n" - // //" int3 \n" - // " nop \n" - // " nop \n" - // " movl %%eax, %%ecx \n" - // " addl %%edx, %%ecx \n" - // " vmmcall \n" - // "4: \n" - // " ud2 \n" - // "1: movl $2b, %0 \n" - // " movl $3b, %1 \n" - // " movl $4b, %2 \n" - // : "=r" (ip), "=r" (marker), "=r" (test_end)); - - asm volatile(" jmp 1f; \n" - "2: nop \n" - " nop \n" - " nop \n" - " jmp 2b \n" - "1: movl $2b, %0 \n" - : "=r" (ip)); - - init_vmcb(vmcb_s); - - vmcb_s->state_save_area.cpl = 0; - vmcb_s->state_save_area.efer = 0x1000; // svme set - - vmcb_s->state_save_area.cr4 = 0x690; - vmcb_s->state_save_area.cr3 = 0; - // PG[31] = 0, WP[16] = 1, NE[5] = 1, ET[4] = 1 - // TS[3] = 1, MP[1] = 1, PE[0] = 1 - vmcb_s->state_save_area.cr0 = 0x1003b; - - if (!np_available) { - vmcb_s->state_save_area.cr0 |= 0x80000000; // PG = 1 - vmcb_s->control_area.np_enable &= ~1; - } - - vmcb_s->state_save_area.dr7 = 0x300; - vmcb_s->state_save_area.dr6 = 0; - - asm volatile("pushf \n" - "popl %0 \n" - : "=r" (eflags)); - - vmcb_s->state_save_area.rflags = eflags; - vmcb_s->state_save_area.rip = ip; - vmcb_s->state_save_area.rsp = (l4_umword_t) stack + STACKSIZE; - - unsigned ofs; - for (ofs = 0; ofs < STACKSIZE; ofs += L4_PAGESIZE) { - stack[ofs] = 0; - unsigned char c = stack[ofs]; - unsigned dummy; - - asm volatile("nop" : "=a"(dummy) : "0" (c)); - - tag = l4_task_map(vm_task, L4RE_THIS_TASK_CAP, l4_fpage( - (((l4_umword_t)(stack)) + ofs) & L4_PAGEMASK, L4_PAGESHIFT, - L4_FPAGE_RW), l4_map_control(((l4_umword_t) stack) + ofs, 0, - L4_MAP_ITEM_MAP)); - printf("msgtag raw=%08x, ofs=%08x\n", (unsigned) tag.raw, ofs); - } - - tag = l4_task_map(vm_task, L4RE_THIS_TASK_CAP, l4_fpage(ip & L4_PAGEMASK, - L4_PAGESHIFT, L4_FPAGE_RW), l4_map_control(ip, 0, L4_MAP_ITEM_MAP)); - - printf("msgtag raw=%08lx, ip=%08lx\n", tag.raw, ip); - - idt[26] = 0x80000; // #13 general protection fault - idt[27] = 0x8e00; - - idt[28] = 0x80000; // #14 page fault - idt[29] = 0x8e00; - - // code segment 0x08 - gdt[2] = 0xffff; - gdt[3] = 0xcf9b00; - - // stack segment 0x10 - gdt[4] = 0xffff; - gdt[5] = 0xcf9300; - - // data segment 0x20 - gdt[8] = 0xffff; - gdt[9] = 0xcff300; - - // tss 0x28 - gdt[10] = 0x67; - gdt[11] = 0x8b00; - - unsigned idt0 = (unsigned) idt; - tag = l4_task_map(vm_task, L4RE_THIS_TASK_CAP, l4_fpage(idt0 & L4_PAGEMASK, - L4_PAGESHIFT, L4_FPAGE_RW), - l4_map_control(idt0, 0, L4_MAP_ITEM_MAP)); - printf("msgtag raw=%08x, idt=%08x\n", (unsigned) tag.raw, idt0); - - unsigned gdt0 = (unsigned) gdt; - tag = l4_task_map(vm_task, L4RE_THIS_TASK_CAP, l4_fpage(gdt0 & L4_PAGEMASK, - L4_PAGESHIFT, L4_FPAGE_RW), - l4_map_control(gdt0, 0, L4_MAP_ITEM_MAP)); - printf("msgtag raw=%08x, gdt=%08x\n", (unsigned) tag.raw, gdt0); - - // printf("sizes vmcb=%x, control=%x, state=%x\n", - // sizeof(*vmcb_s), - // sizeof(vmcb_s->control_area), sizeof(vmcb_s->sitate_save_area)); - - printf("start rip=%llx\n", vmcb_s->state_save_area.rip); - - vmcb_s->state_save_area.rax = 8; - - vm_resume(); - -} - - -// printf("rip=%08llx, rax=%llx, edx=%lx, ecx=%lx\n", -// vmcb_s->state_save_area.rip, -// vmcb_s->state_save_area.rax, -// vcpu->r.dx, vcpu->r.cx); -// -// printf("run vm stop, status=%s\n", vcpu->r.cx == 9 ? "success" : "failure"); -// -// l4_task_unmap(L4RE_THIS_TASK_CAP, -// l4_obj_fpage(vm_task, 0, L4_FPAGE_RWX), -// L4_FP_ALL_SPACES); -//} - -#include -l4_cap_idx_t timer_irq; -void * timer_thread(void * ); -void * timer_thread(void * data) { - (void)data; - l4_sleep(1000); - fiasco_tbuf_log("FIRST"); - while(1){ - l4_sleep(200); - fiasco_tbuf_log("Trig"); - printf("trigger\n"); - cnt_triggered++; - l4_irq_trigger(timer_irq); - } -} - -#include - -int main(void) -{ - timer_irq = l4re_util_cap_alloc(); - if (l4_error(l4_factory_create_irq(l4re_env()->factory, timer_irq))) - printf("irq creation failed\n"); - - if (l4_error(l4_irq_attach(timer_irq, 0x120, L4_INVALID_CAP))) - printf("irq attach failed\n"); - - printf("VM testing\n"); - - if (check_svm()) - { - printf("No SVM CPU. Bye.\n"); - return 1; - } - - l4_touch_rw(stack, sizeof(stack)); - l4_touch_rw(hdl_stack, sizeof(hdl_stack)); - - pthread_t pthread_timer_thread; - - pthread_create(&pthread_timer_thread, NULL, timer_thread, NULL); - - run_test(0); - - if (!check_svm_npt()) - run_test(1); - - return 0; -} diff --git a/l4/pkg/l4re_c/util/include/cap.h b/l4/pkg/l4re_c/util/include/cap.h deleted file mode 100644 index 2f51f100c..000000000 --- a/l4/pkg/l4re_c/util/include/cap.h +++ /dev/null @@ -1,58 +0,0 @@ -/** - * \file - * \brief Capability allocator C interface - */ -/* - * (c) 2008-2009 Adam Lackorzynski - * economic rights: Technische Universität Dresden (Germany) - * - * This file is part of TUD:OS and distributed under the terms of the - * GNU General Public License 2. - * Please see the COPYING-GPL-2 file for details. - * - * As a special exception, you may use this file as part of a free software - * library without restriction. Specifically, if other files instantiate - * templates or use macros or inline functions from this file, or you compile - * this file and link it with other files to produce an executable, this - * file does not by itself cause the resulting executable to be covered by - * the GNU General Public License. This exception does not however - * invalidate any other reasons why the executable file might be covered by - * the GNU General Public License. - */ -#pragma once - -/** - * \defgroup api_l4re_c_util_cap Capability allocator - * \ingroup api_l4re_c - * \brief Capability allocator C interface. - */ - -#include -#include -#include - -EXTERN_C_BEGIN - -/** - * \brief Release a capability from a task (unmap). - * \ingroup api_l4re_c_util - * - * Note that the given capability does not need to be handled by the - * capability allocator in any way. - */ -L4_CV L4_INLINE -l4_msgtag_t -l4re_util_cap_release(l4_cap_idx_t cap); - -/* Implementations */ - -L4_CV L4_INLINE -l4_msgtag_t -l4re_util_cap_release(l4_cap_idx_t cap) -{ - return l4_task_unmap(L4_BASE_TASK_CAP, - l4_obj_fpage(cap, 0, L4_FPAGE_RWX), - L4_FP_ALL_SPACES); -} - -EXTERN_C_END -- 2.39.2