UACPI: Difference between revisions

144 bytes added ,  29 days ago
m
Bot: Replace deprecated source tag with syntaxhighlight
[unchecked revision][unchecked revision]
m (Bot: Replace deprecated source tag with syntaxhighlight)
 
(One intermediate revision by the same user not shown)
Line 35:
Below is an example of basic uACPI initialization sequence that enters ACPI mode, parses tables, brings the event system online, and finally loads & initializes the namespace.
 
<sourcesyntaxhighlight lang="c">
#include <uacpi/uacpi.h>
#include <uacpi/event.h>
Line 118:
return 0;
}
</syntaxhighlight>
</source>
 
== Code examples ==
Line 130:
so that it's called by kernel code during initialization.
 
<sourcesyntaxhighlight lang="c">
// ps2k.c
#include <uacpi/utilities.h>
Line 162:
uacpi_find_devices(PS2K_PNP_ID, match_ps2k, NULL);
}
</syntaxhighlight>
</source>
 
<sourcesyntaxhighlight lang="c">
// acpi_init.c
void find_acpi_devices(void) {
Line 173:
// ...and more
}
</syntaxhighlight>
</source>
 
As you can see it's a very simple approach, but it has lots of drawbacks:
Line 184:
In this approach, we treat the ACPI namespace as a bus in our kernel, and let devices provide a way to identify them.
 
<sourcesyntaxhighlight lang="c">
// acpi_bus.h
#include <uacpi/uacpi.h>
Line 200:
 
void acpi_register_driver(struct acpi_driver *driver);
</syntaxhighlight>
</source>
 
<sourcesyntaxhighlight lang="c">
// ps2k.c
#include <acpi_bus.h>
Line 252:
return 0;
}
</syntaxhighlight>
</source>
 
<sourcesyntaxhighlight lang="c">
// acpi_bus.c
#include <acpi_bus.h>
Line 311:
);
}
</syntaxhighlight>
</source>
 
As you can see above, this approach is more scalable, faster, and involves way less code duplication.
Line 317:
 
=== Shutting Down the System ===
<sourcesyntaxhighlight lang="c">
#include <uacpi/sleep.h>
 
Line 357:
return 0;
}
</syntaxhighlight>
</source>
 
=== Hooking Up the Power Button ===
Line 363:
The example below hooks up the power button press using a fixed event callback.
 
<sourcesyntaxhighlight lang="c">
#include <uacpi/event.h>
 
Line 396:
return 0;
}
</syntaxhighlight>
</source>
 
Note that some of the more modern hardware routes the power button in a more complicated way, via an embedded controller.