#ifndef AML_OBJECT_H_ #define AML_OBJECT_H_ #include #include "constants.h" enum acpi_object_type { ACPI_OBJECT_NONE = 0, ACPI_OBJECT_VALUE, ACPI_OBJECT_NAMESPACE, ACPI_OBJECT_PROCESSOR, ACPI_OBJECT_DEVICE, ACPI_OBJECT_METHOD, ACPI_OBJECT_POWER_RESOURCE, ACPI_OBJECT_OPERATION_REGION, ACPI_OBJECT_THERMAL_ZONE, ACPI_OBJECT_FIELD, ACPI_OBJECT_PACKAGE, ACPI_OBJECT_BUFFER, ACPI_OBJECT_ALIAS, ACPI_OBJECT_MUTEX, ACPI_OBJECT_EVENT, }; struct acpi_object { int ref; enum acpi_object_type type; union { char name[ACPI_OBJECT_NAME_MAX]; char *publish_path; }; size_t scope_end; struct acpi_object *parent; struct acpi_object *first_child, *next_sibling; }; struct acpi_namespace { struct acpi_object *root; }; extern struct acpi_namespace *acpi_namespace_create(void); extern struct acpi_object *acpi_namespace_get_object(struct acpi_namespace *ns, const char *path); extern struct acpi_object *acpi_object_create(const char name[ACPI_OBJECT_NAME_MAX], enum acpi_object_type type); extern struct acpi_object *acpi_object_ref(struct acpi_object *object); extern void acpi_object_deref(struct acpi_object *object); extern void acpi_object_add_child(struct acpi_object *parent, struct acpi_object *child); extern struct acpi_object *acpi_object_get_child(struct acpi_object *object, const char *name); extern void acpi_object_print(struct acpi_object *object, int depth); extern const char *acpi_object_type_string(enum acpi_object_type type); #endif