static PyObject *bits_acpi_eval(PyObject *self, PyObject *args) { char *pathname; PyObject *acpi_args_tuple; ACPI_OBJECT_LIST acpi_args; ACPI_BUFFER results = { .Length = ACPI_ALLOCATE_BUFFER, .Pointer = NULL }; PyObject *ret; if (!PyArg_ParseTuple(args, "sO", &pathname, &acpi_args_tuple)) return NULL; if (!acpi_objects_from_python(acpi_args_tuple, &acpi_args.Pointer, &acpi_args.Count)) return NULL; if (acpica_init() != GRUB_ERR_NONE) { free_acpi_objects(acpi_args.Pointer, acpi_args.Count); return PyErr_Format(PyExc_RuntimeError, "ACPICA module failed to initialize."); } if (ACPI_FAILURE(AcpiEvaluateObject(NULL, pathname, &acpi_args, &results))) { free_acpi_objects(acpi_args.Pointer, acpi_args.Count); return Py_BuildValue(""); } free_acpi_objects(acpi_args.Pointer, acpi_args.Count); ret = acpi_object_to_python(results.Pointer); ACPI_FREE(results.Pointer); return Py_BuildValue("N", ret); }
static int xen_uppc_init_acpi(void) { int verboseflags = 0; int sci; iflag_t sci_flags; /* * Process SCI configuration here; this may return * an error if acpi-user-options has specified * legacy mode (use ACPI without ACPI mode or SCI) */ if (acpica_get_sci(&sci, &sci_flags) != AE_OK) sci = -1; /* * Initialize sub-system - if error is returns, ACPI is not * used. */ if (acpica_init() != AE_OK) return (0); /* * uppc implies system is in PIC mode; set edge/level * via ELCR based on return value from get_sci; this * will default to level/low if no override present, * as recommended by Intel ACPI CA team. */ if (sci >= 0) { ASSERT((sci_flags.intr_el == INTR_EL_LEVEL) || (sci_flags.intr_el == INTR_EL_EDGE)); psm_set_elcr(sci, sci_flags.intr_el == INTR_EL_LEVEL); } /* * Remember SCI for later use */ xen_uppc_sci = sci; if (xen_uppc_verbose & XEN_UPPC_VERBOSE_IRQ_FLAG) verboseflags |= PSM_VERBOSE_IRQ_FLAG; if (xen_uppc_verbose & XEN_UPPC_VERBOSE_POWEROFF_FLAG) verboseflags |= PSM_VERBOSE_POWEROFF_FLAG; if (xen_uppc_verbose & XEN_UPPC_VERBOSE_POWEROFF_PAUSE_FLAG) verboseflags |= PSM_VERBOSE_POWEROFF_PAUSE_FLAG; if (acpi_psm_init(xen_uppc_info.p_mach_idstring, verboseflags) == ACPI_PSM_FAILURE) { return (0); } return (1); }
static PyObject *bits_acpi_get_root_pointer(PyObject *self, PyObject *args) { ACPI_TABLE_RSDP *rsdp; if (acpica_init() != GRUB_ERR_NONE) return PyErr_Format(PyExc_RuntimeError, "ACPICA module failed to initialize."); rsdp = (ACPI_TABLE_RSDP *)AcpiOsGetRootPointer(); if (rsdp) return Py_BuildValue("k", (unsigned long)rsdp); return Py_BuildValue(""); }
static PyObject *bits_acpi_get_table_by_index(PyObject *self, PyObject *args) { U32 index; ACPI_TABLE_HEADER *table_header; if (!PyArg_ParseTuple(args, "I", &index)) return NULL; if (acpica_init() != GRUB_ERR_NONE) return PyErr_Format(PyExc_RuntimeError, "ACPICA module failed to initialize."); if (ACPI_FAILURE(AcpiGetTableByIndex(index, &table_header))) return Py_BuildValue(""); return Py_BuildValue("s#", table_header, table_header->Length); }
static PyObject *bits_acpi_get_rsdt(PyObject *self, PyObject *args) { ACPI_TABLE_RSDP *rsdp; ACPI_TABLE_RSDT *rsdt; if (acpica_init() != GRUB_ERR_NONE) return PyErr_Format(PyExc_RuntimeError, "ACPICA module failed to initialize."); rsdp = (ACPI_TABLE_RSDP *)AcpiOsGetRootPointer(); if (rsdp) { rsdt = (ACPI_TABLE_RSDT *)(unsigned long)rsdp->RsdtPhysicalAddress; if (rsdt) return Py_BuildValue("s#", rsdt, (Py_ssize_t)rsdt->Header.Length); } return Py_BuildValue(""); }
static PyObject *bits_acpi_get_table(PyObject *self, PyObject *args) { char *signature; U32 instance = 1; ACPI_TABLE_HEADER *table_header; if (!PyArg_ParseTuple(args, "s|I", &signature, &instance)) return NULL; if (acpica_init() != GRUB_ERR_NONE) return PyErr_Format(PyExc_RuntimeError, "ACPICA module failed to initialize."); if (ACPI_FAILURE(AcpiGetTable(signature, instance, &table_header))) return Py_BuildValue(""); return Py_BuildValue("s#", table_header, table_header->Length); }
static PyObject *bits_acpi_get_rsdp(PyObject *self, PyObject *args) { ACPI_TABLE_RSDP *rsdp; Py_ssize_t length = 0; if (acpica_init() != GRUB_ERR_NONE) return PyErr_Format(PyExc_RuntimeError, "ACPICA module failed to initialize."); rsdp = (ACPI_TABLE_RSDP *)AcpiOsGetRootPointer(); if (rsdp) { if (rsdp->Revision == 0) length = sizeof(ACPI_RSDP_COMMON); else if (rsdp->Revision >= 2) length = rsdp->Length; if (length) return Py_BuildValue("s#", rsdp, length); } return Py_BuildValue(""); }
static PyObject *bits_acpi_get_xsdt(PyObject *self, PyObject *args) { ACPI_TABLE_RSDP *rsdp; ACPI_TABLE_XSDT *xsdt; if (acpica_init() != GRUB_ERR_NONE) return PyErr_Format(PyExc_RuntimeError, "ACPICA module failed to initialize."); rsdp = (ACPI_TABLE_RSDP *)AcpiOsGetRootPointer(); if (rsdp) { if (rsdp->Revision >= 2) { #if defined(GRUB_TARGET_CPU_I386) if (rsdp->XsdtPhysicalAddress > GRUB_UINT_MAX) return PyErr_Format(PyExc_RuntimeError, "XSDT located above 4G; cannot access on 32-bit"); #endif xsdt = (ACPI_TABLE_XSDT *)(unsigned long)rsdp->XsdtPhysicalAddress; if (xsdt) return Py_BuildValue("s#", xsdt, (Py_ssize_t)xsdt->Header.Length); } } return Py_BuildValue(""); }
static PyObject *bits_acpi_get_object_info(PyObject *self, PyObject *args) { char *pathname; ACPI_HANDLE handle = 0; ACPI_DEVICE_INFO *info = NULL; PyObject *ret; ACPI_DEVICE_INFO *addr; if (!PyArg_ParseTuple(args, "s", &pathname)) return NULL; if (acpica_init() != GRUB_ERR_NONE) return PyErr_Format(PyExc_RuntimeError, "ACPICA module failed to initialize."); if (ACPI_FAILURE(AcpiGetHandle(NULL, pathname, &handle)) || (handle == 0)) return PyErr_Format(PyExc_RuntimeError, "Couldn't get object handle for \"%s\"", pathname); if (ACPI_FAILURE(AcpiGetObjectInfo(handle, &info))) return PyErr_Format(PyExc_RuntimeError, "Couldn't get object info for \"%s\"", pathname); ret = Py_BuildValue("(s#k)", info, info->InfoSize, info); ACPI_FREE(info); return ret; }