Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/acpica/acpi_pci.c
Show First 20 Lines • Show All 75 Lines • ▼ Show 20 Lines | |||||
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_method(device_t cbdev, | static int acpi_pci_child_location_method(device_t cbdev, | ||||
device_t child, struct sbuf *sb); | device_t child, struct sbuf *sb); | ||||
static int acpi_pci_get_device_path(device_t cbdev, | |||||
device_t child, const char *locator, 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, acpi_pci_child_location_method), | DEVMETHOD(bus_child_location, acpi_pci_child_location_method), | ||||
DEVMETHOD(bus_get_device_path, acpi_pci_get_device_path), | |||||
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), | ||||
DEVMETHOD_END | DEVMETHOD_END | ||||
}; | }; | ||||
static devclass_t pci_devclass; | static devclass_t pci_devclass; | ||||
DEFINE_CLASS_1(pci, acpi_pci_driver, acpi_pci_methods, sizeof(struct pci_softc), | DEFINE_CLASS_1(pci, acpi_pci_driver, acpi_pci_methods, sizeof(struct pci_softc), | ||||
pci_driver); | pci_driver); | ||||
DRIVER_MODULE(acpi_pci, pcib, acpi_pci_driver, pci_devclass, 0, 0); | DRIVER_MODULE(acpi_pci, pcib, acpi_pci_driver, pci_devclass, 0, 0); | ||||
MODULE_DEPEND(acpi_pci, acpi, 1, 1, 1); | MODULE_DEPEND(acpi_pci, acpi, 1, 1, 1); | ||||
MODULE_DEPEND(acpi_pci, pci, 1, 1, 1); | MODULE_DEPEND(acpi_pci, pci, 1, 1, 1); | ||||
MODULE_VERSION(acpi_pci, 1); | MODULE_VERSION(acpi_pci, 1); | ||||
LOCATOR_DEVICE(acpi, acpi_pci_driver, acpi_locator_acpi); | |||||
static struct pci_devinfo * | static struct pci_devinfo * | ||||
acpi_pci_alloc_devinfo(device_t dev) | acpi_pci_alloc_devinfo(device_t dev) | ||||
{ | { | ||||
struct acpi_pci_devinfo *dinfo; | struct acpi_pci_devinfo *dinfo; | ||||
dinfo = malloc(sizeof(*dinfo), M_DEVBUF, M_WAITOK | M_ZERO); | dinfo = malloc(sizeof(*dinfo), M_DEVBUF, M_WAITOK | M_ZERO); | ||||
return (&dinfo->ap_dinfo); | return (&dinfo->ap_dinfo); | ||||
▲ Show 20 Lines • Show All 53 Lines • ▼ Show 20 Lines | acpi_pci_child_location_method(device_t cbdev, device_t child, struct sbuf *sb) | ||||
if (dinfo->ap_handle) { | if (dinfo->ap_handle) { | ||||
sbuf_printf(sb, " handle=%s", acpi_name(dinfo->ap_handle)); | sbuf_printf(sb, " handle=%s", acpi_name(dinfo->ap_handle)); | ||||
if (ACPI_SUCCESS(acpi_GetInteger(dinfo->ap_handle, "_PXM", &pxm))) { | if (ACPI_SUCCESS(acpi_GetInteger(dinfo->ap_handle, "_PXM", &pxm))) { | ||||
sbuf_printf(sb, " _PXM=%d", pxm); | sbuf_printf(sb, " _PXM=%d", pxm); | ||||
} | } | ||||
} | } | ||||
return (0); | return (0); | ||||
} | |||||
static int | |||||
acpi_pci_get_device_path(device_t bus, device_t child, const char *locator, struct sbuf *sb) | |||||
{ | |||||
if (strcmp(locator, BUS_LOCATOR_ACPI) == 0) | |||||
return (acpi_get_acpi_device_path(bus, child, locator, sb)); | |||||
/* Otherwise follow base class' actions */ | |||||
return (pci_get_device_path_method(bus, child, locator, sb)); | |||||
} | } | ||||
/* | /* | ||||
* 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 |