6f25f8641b
The N1 SDP has a few bugs that we need to work around: - PCIe root port config space lives in a non-standard location. - Access to PCIe config space of devices that do not exist results in an sync SError. Firmware creates a "known devices" table at a fixed physical address that we use to filter PCI conf access to only known devices. This change splits the Arm ACPI PCI quirks into separate files for each host controller, and allows per-segment quirks to be applied. These changes exposed some bugs in the MI ACPI layer related to multi-segment support. The MI ACPI PCI code was using a shared PCI chipset tag to access devices, and these accesses can happen before our PCI host bridge drivers are attached! The global chipset tag is now gone, and an MD callback can provide a custom tag on a per-segment basis.
47 lines
2.0 KiB
C
47 lines
2.0 KiB
C
/* $NetBSD: acpi_pci.h,v 1.11 2020/01/17 17:06:32 jmcneill Exp $ */
|
|
|
|
/*
|
|
* Copyright (c) 2009 The NetBSD Foundation, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This code is derived from software contributed to The NetBSD Foundation
|
|
* by Christoph Egger.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. The name of the author may not be used to endorse or promote products
|
|
* derived from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*/
|
|
|
|
#ifndef _SYS_DEV_ACPI_ACPI_PCI_H
|
|
#define _SYS_DEV_ACPI_ACPI_PCI_H
|
|
|
|
ACPI_STATUS acpi_pcidev_scan(struct acpi_devnode *);
|
|
ACPI_STATUS acpi_pcidev_ppb_downbus(pci_chipset_tag_t,
|
|
uint16_t, uint16_t, uint16_t,
|
|
uint16_t, uint16_t *);
|
|
struct acpi_devnode *acpi_pcidev_find(uint16_t, uint16_t,
|
|
uint16_t, uint16_t);
|
|
pci_chipset_tag_t acpi_pcidev_get_tag(uint16_t, uint16_t,
|
|
uint16_t, uint16_t);
|
|
device_t acpi_pcidev_find_dev(struct acpi_devnode *);
|
|
struct acpi_devnode *acpi_pciroot_find(uint16_t, uint16_t);
|
|
ACPI_INTEGER acpi_pci_ignore_boot_config(ACPI_HANDLE);
|
|
|
|
#endif /* !_SYS_DEV_ACPI_ACPI_PCI_H */
|