Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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("");
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
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("");
}
Esempio n. 6
0
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);
}
Esempio n. 7
0
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("");
}
Esempio n. 8
0
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("");
}
Esempio n. 9
0
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;
}