Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/acpica/acpi_pci.c
Show All 32 Lines | |||||
#include "opt_iommu.h" | #include "opt_iommu.h" | ||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <sys/systm.h> | #include <sys/systm.h> | ||||
#include <sys/bus.h> | #include <sys/bus.h> | ||||
#include <sys/kernel.h> | #include <sys/kernel.h> | ||||
#include <sys/malloc.h> | #include <sys/malloc.h> | ||||
#include <sys/module.h> | #include <sys/module.h> | ||||
#include <sys/sbuf.h> | |||||
#include <sys/taskqueue.h> | #include <sys/taskqueue.h> | ||||
#include <sys/tree.h> | #include <sys/tree.h> | ||||
#include <contrib/dev/acpica/include/acpi.h> | #include <contrib/dev/acpica/include/acpi.h> | ||||
#include <contrib/dev/acpica/include/accommon.h> | #include <contrib/dev/acpica/include/accommon.h> | ||||
#include <dev/acpica/acpivar.h> | #include <dev/acpica/acpivar.h> | ||||
#include <dev/acpica/acpi_pcivar.h> | #include <dev/acpica/acpi_pcivar.h> | ||||
Show All 24 Lines | |||||
CTASSERT(ACPI_STATE_D0 == PCI_POWERSTATE_D0); | CTASSERT(ACPI_STATE_D0 == PCI_POWERSTATE_D0); | ||||
CTASSERT(ACPI_STATE_D1 == PCI_POWERSTATE_D1); | CTASSERT(ACPI_STATE_D1 == PCI_POWERSTATE_D1); | ||||
CTASSERT(ACPI_STATE_D2 == PCI_POWERSTATE_D2); | CTASSERT(ACPI_STATE_D2 == PCI_POWERSTATE_D2); | ||||
CTASSERT(ACPI_STATE_D3 == PCI_POWERSTATE_D3); | CTASSERT(ACPI_STATE_D3 == PCI_POWERSTATE_D3); | ||||
static struct pci_devinfo *acpi_pci_alloc_devinfo(device_t dev); | static struct pci_devinfo *acpi_pci_alloc_devinfo(device_t dev); | ||||
static int acpi_pci_attach(device_t dev); | static int acpi_pci_attach(device_t dev); | ||||
static void acpi_pci_child_deleted(device_t dev, device_t child); | static void acpi_pci_child_deleted(device_t dev, device_t child); | ||||
static int acpi_pci_child_location_str_method(device_t cbdev, | static int acpi_pci_child_location_method(device_t cbdev, | ||||
device_t child, char *buf, size_t buflen); | device_t child, struct sbuf *sb); | ||||
static int acpi_pci_detach(device_t dev); | static int acpi_pci_detach(device_t dev); | ||||
static int acpi_pci_probe(device_t dev); | static int acpi_pci_probe(device_t dev); | ||||
static int acpi_pci_read_ivar(device_t dev, device_t child, int which, | static int acpi_pci_read_ivar(device_t dev, device_t child, int which, | ||||
uintptr_t *result); | uintptr_t *result); | ||||
static int acpi_pci_write_ivar(device_t dev, device_t child, int which, | static int acpi_pci_write_ivar(device_t dev, device_t child, int which, | ||||
uintptr_t value); | uintptr_t value); | ||||
static ACPI_STATUS acpi_pci_save_handle(ACPI_HANDLE handle, UINT32 level, | static ACPI_STATUS acpi_pci_save_handle(ACPI_HANDLE handle, UINT32 level, | ||||
void *context, void **status); | void *context, void **status); | ||||
static int acpi_pci_set_powerstate_method(device_t dev, device_t child, | static int acpi_pci_set_powerstate_method(device_t dev, device_t child, | ||||
int state); | int state); | ||||
static void acpi_pci_update_device(ACPI_HANDLE handle, device_t pci_child); | static void acpi_pci_update_device(ACPI_HANDLE handle, device_t pci_child); | ||||
static bus_dma_tag_t acpi_pci_get_dma_tag(device_t bus, device_t child); | static bus_dma_tag_t acpi_pci_get_dma_tag(device_t bus, device_t child); | ||||
static device_method_t acpi_pci_methods[] = { | static device_method_t acpi_pci_methods[] = { | ||||
/* Device interface */ | /* Device interface */ | ||||
DEVMETHOD(device_probe, acpi_pci_probe), | DEVMETHOD(device_probe, acpi_pci_probe), | ||||
DEVMETHOD(device_attach, acpi_pci_attach), | DEVMETHOD(device_attach, acpi_pci_attach), | ||||
DEVMETHOD(device_detach, acpi_pci_detach), | DEVMETHOD(device_detach, acpi_pci_detach), | ||||
/* Bus interface */ | /* Bus interface */ | ||||
DEVMETHOD(bus_read_ivar, acpi_pci_read_ivar), | DEVMETHOD(bus_read_ivar, acpi_pci_read_ivar), | ||||
DEVMETHOD(bus_write_ivar, acpi_pci_write_ivar), | DEVMETHOD(bus_write_ivar, acpi_pci_write_ivar), | ||||
DEVMETHOD(bus_child_deleted, acpi_pci_child_deleted), | DEVMETHOD(bus_child_deleted, acpi_pci_child_deleted), | ||||
DEVMETHOD(bus_child_location_str, acpi_pci_child_location_str_method), | DEVMETHOD(bus_child_location, acpi_pci_child_location_method), | ||||
DEVMETHOD(bus_get_cpus, acpi_get_cpus), | DEVMETHOD(bus_get_cpus, acpi_get_cpus), | ||||
DEVMETHOD(bus_get_dma_tag, acpi_pci_get_dma_tag), | DEVMETHOD(bus_get_dma_tag, acpi_pci_get_dma_tag), | ||||
DEVMETHOD(bus_get_domain, acpi_get_domain), | DEVMETHOD(bus_get_domain, acpi_get_domain), | ||||
/* PCI interface */ | /* PCI interface */ | ||||
DEVMETHOD(pci_alloc_devinfo, acpi_pci_alloc_devinfo), | DEVMETHOD(pci_alloc_devinfo, acpi_pci_alloc_devinfo), | ||||
DEVMETHOD(pci_child_added, acpi_pci_child_added), | DEVMETHOD(pci_child_added, acpi_pci_child_added), | ||||
DEVMETHOD(pci_set_powerstate, acpi_pci_set_powerstate_method), | DEVMETHOD(pci_set_powerstate, acpi_pci_set_powerstate_method), | ||||
▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | acpi_pci_child_deleted(device_t dev, device_t child) | ||||
struct acpi_pci_devinfo *dinfo = device_get_ivars(child); | struct acpi_pci_devinfo *dinfo = device_get_ivars(child); | ||||
if (acpi_get_device(dinfo->ap_handle) == child) | if (acpi_get_device(dinfo->ap_handle) == child) | ||||
AcpiDetachData(dinfo->ap_handle, acpi_fake_objhandler); | AcpiDetachData(dinfo->ap_handle, acpi_fake_objhandler); | ||||
pci_child_deleted(dev, child); | pci_child_deleted(dev, child); | ||||
} | } | ||||
static int | static int | ||||
acpi_pci_child_location_str_method(device_t cbdev, device_t child, char *buf, | acpi_pci_child_location_method(device_t cbdev, device_t child, struct sbuf *sb) | ||||
size_t buflen) | |||||
{ | { | ||||
struct acpi_pci_devinfo *dinfo = device_get_ivars(child); | struct acpi_pci_devinfo *dinfo = device_get_ivars(child); | ||||
int pxm; | int pxm; | ||||
char buf2[32]; | |||||
pci_child_location_str_method(cbdev, child, buf, buflen); | pci_child_location_method(cbdev, child, sb); | ||||
if (dinfo->ap_handle) { | if (dinfo->ap_handle) { | ||||
strlcat(buf, " handle=", buflen); | sbuf_printf(sb, " handle=%s", acpi_name(dinfo->ap_handle)); | ||||
strlcat(buf, acpi_name(dinfo->ap_handle), buflen); | |||||
if (ACPI_SUCCESS(acpi_GetInteger(dinfo->ap_handle, "_PXM", &pxm))) { | if (ACPI_SUCCESS(acpi_GetInteger(dinfo->ap_handle, "_PXM", &pxm))) { | ||||
snprintf(buf2, 32, " _PXM=%d", pxm); | sbuf_printf(sb, " _PXM=%d", pxm); | ||||
strlcat(buf, buf2, buflen); | |||||
} | } | ||||
} | } | ||||
return (0); | return (0); | ||||
} | } | ||||
/* | /* | ||||
* PCI power manangement | * PCI power manangement | ||||
*/ | */ | ||||
static int | static int | ||||
acpi_pci_set_powerstate_method(device_t dev, device_t child, int state) | acpi_pci_set_powerstate_method(device_t dev, device_t child, int state) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 277 Lines • Show Last 20 Lines |