Now and again while debugging systems I would like to be able to evaluate an ACPI method or object and see what it returns. To solve this problem in a generic way I put a little bit of effort today in developing a short SystemTap script that allows me to run acpi_evaluate_object() on a given named object and to dump out any returned data.
I've wrapped the gory details up into a small wrapper function called which is passed just the name of the object to evaluate and if necessary an acpi_object_list containing the arguments to be passed into a method call. For methods that don't require arguments, we end up with a simple call like the following:
acpi_eval("_BIF", NULL);
..and for more complex examples, with arguments, we have:
struct acpi_object_list arg_list;
union acpi_object args[1];
args[0].type = ACPI_TYPE_INTEGER;
args[0].integer.value = 1;
arg_list.count = 1;
arg_list.pointer = args;
acpi_eval("_WAK", &arg_list);
The script is designed to allow one to hack away and add in the calls to the objects that one requires to be evaluated, quick-n-dirty, but it does the job.
It was surprisingly easy to get this up and running with SystemTap once I had figured how to dump out the evalated objects to the tty - the script is fairly compact and the main bulk of the code is a terse error message table.
The script can be found it my SystemTap git repo: git://kernel.ubuntu.com/cking/systemtap-scripts.git
No comments:
Post a Comment