mirror of https://gitee.com/openkylin/linux.git
x86/PCI: MMCONFIG: use a private structure rather than the ACPI MCFG one
This adds a struct pci_mmcfg_region with a little more information than the struct acpi_mcfg_allocation used previously. The acpi_mcfg structure is defined by the spec, so we can't change it. To begin with, struct pci_mmcfg_region is basically the same as the ACPI MCFG version, but future patches will add more information. Reviewed-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
parent
df5eb1d67e
commit
d215a9c8b4
|
@ -118,10 +118,17 @@ extern int __init pcibios_init(void);
|
||||||
|
|
||||||
/* pci-mmconfig.c */
|
/* pci-mmconfig.c */
|
||||||
|
|
||||||
|
struct pci_mmcfg_region {
|
||||||
|
u64 address;
|
||||||
|
u16 pci_segment;
|
||||||
|
u8 start_bus_number;
|
||||||
|
u8 end_bus_number;
|
||||||
|
};
|
||||||
|
|
||||||
extern int __init pci_mmcfg_arch_init(void);
|
extern int __init pci_mmcfg_arch_init(void);
|
||||||
extern void __init pci_mmcfg_arch_free(void);
|
extern void __init pci_mmcfg_arch_free(void);
|
||||||
|
|
||||||
extern struct acpi_mcfg_allocation *pci_mmcfg_config;
|
extern struct pci_mmcfg_region *pci_mmcfg_config;
|
||||||
extern int pci_mmcfg_config_num;
|
extern int pci_mmcfg_config_num;
|
||||||
|
|
||||||
#define PCI_MMCFG_BUS_OFFSET(bus) ((bus) << 20)
|
#define PCI_MMCFG_BUS_OFFSET(bus) ((bus) << 20)
|
||||||
|
|
|
@ -34,10 +34,10 @@ static __init void free_all_mmcfg(void)
|
||||||
pci_mmcfg_config = NULL;
|
pci_mmcfg_config = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __init struct acpi_mcfg_allocation *pci_mmconfig_add(int segment,
|
static __init struct pci_mmcfg_region *pci_mmconfig_add(int segment, int start,
|
||||||
int start, int end, u64 addr)
|
int end, u64 addr)
|
||||||
{
|
{
|
||||||
struct acpi_mcfg_allocation *new;
|
struct pci_mmcfg_region *new;
|
||||||
int new_num = pci_mmcfg_config_num + 1;
|
int new_num = pci_mmcfg_config_num + 1;
|
||||||
int i = pci_mmcfg_config_num;
|
int i = pci_mmcfg_config_num;
|
||||||
|
|
||||||
|
@ -349,7 +349,7 @@ static void __init pci_mmcfg_insert_resources(void)
|
||||||
|
|
||||||
names = (void *)&res[pci_mmcfg_config_num];
|
names = (void *)&res[pci_mmcfg_config_num];
|
||||||
for (i = 0; i < pci_mmcfg_config_num; i++, res++) {
|
for (i = 0; i < pci_mmcfg_config_num; i++, res++) {
|
||||||
struct acpi_mcfg_allocation *cfg = &pci_mmcfg_config[i];
|
struct pci_mmcfg_region *cfg = &pci_mmcfg_config[i];
|
||||||
num_buses = cfg->end_bus_number - cfg->start_bus_number + 1;
|
num_buses = cfg->end_bus_number - cfg->start_bus_number + 1;
|
||||||
res->name = names;
|
res->name = names;
|
||||||
snprintf(names, PCI_MMCFG_RESOURCE_NAME_LEN,
|
snprintf(names, PCI_MMCFG_RESOURCE_NAME_LEN,
|
||||||
|
@ -523,7 +523,7 @@ static void __init pci_mmcfg_reject_broken(int early)
|
||||||
static int __initdata known_bridge;
|
static int __initdata known_bridge;
|
||||||
|
|
||||||
/* The physical address of the MMCONFIG aperture. Set from ACPI tables. */
|
/* The physical address of the MMCONFIG aperture. Set from ACPI tables. */
|
||||||
struct acpi_mcfg_allocation *pci_mmcfg_config;
|
struct pci_mmcfg_region *pci_mmcfg_config;
|
||||||
int pci_mmcfg_config_num;
|
int pci_mmcfg_config_num;
|
||||||
|
|
||||||
static int __init acpi_mcfg_check_entry(struct acpi_table_mcfg *mcfg,
|
static int __init acpi_mcfg_check_entry(struct acpi_table_mcfg *mcfg,
|
||||||
|
|
|
@ -27,7 +27,7 @@ static int mmcfg_last_accessed_cpu;
|
||||||
*/
|
*/
|
||||||
static u32 get_base_addr(unsigned int seg, int bus, unsigned devfn)
|
static u32 get_base_addr(unsigned int seg, int bus, unsigned devfn)
|
||||||
{
|
{
|
||||||
struct acpi_mcfg_allocation *cfg;
|
struct pci_mmcfg_region *cfg;
|
||||||
int cfg_num;
|
int cfg_num;
|
||||||
|
|
||||||
for (cfg_num = 0; cfg_num < pci_mmcfg_config_num; cfg_num++) {
|
for (cfg_num = 0; cfg_num < pci_mmcfg_config_num; cfg_num++) {
|
||||||
|
|
|
@ -14,14 +14,14 @@
|
||||||
|
|
||||||
/* Static virtual mapping of the MMCONFIG aperture */
|
/* Static virtual mapping of the MMCONFIG aperture */
|
||||||
struct mmcfg_virt {
|
struct mmcfg_virt {
|
||||||
struct acpi_mcfg_allocation *cfg;
|
struct pci_mmcfg_region *cfg;
|
||||||
char __iomem *virt;
|
char __iomem *virt;
|
||||||
};
|
};
|
||||||
static struct mmcfg_virt *pci_mmcfg_virt;
|
static struct mmcfg_virt *pci_mmcfg_virt;
|
||||||
|
|
||||||
static char __iomem *get_virt(unsigned int seg, unsigned bus)
|
static char __iomem *get_virt(unsigned int seg, unsigned bus)
|
||||||
{
|
{
|
||||||
struct acpi_mcfg_allocation *cfg;
|
struct pci_mmcfg_region *cfg;
|
||||||
int cfg_num;
|
int cfg_num;
|
||||||
|
|
||||||
for (cfg_num = 0; cfg_num < pci_mmcfg_config_num; cfg_num++) {
|
for (cfg_num = 0; cfg_num < pci_mmcfg_config_num; cfg_num++) {
|
||||||
|
@ -109,7 +109,7 @@ static struct pci_raw_ops pci_mmcfg = {
|
||||||
.write = pci_mmcfg_write,
|
.write = pci_mmcfg_write,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __iomem * __init mcfg_ioremap(struct acpi_mcfg_allocation *cfg)
|
static void __iomem * __init mcfg_ioremap(struct pci_mmcfg_region *cfg)
|
||||||
{
|
{
|
||||||
void __iomem *addr;
|
void __iomem *addr;
|
||||||
u64 start, size;
|
u64 start, size;
|
||||||
|
|
Loading…
Reference in New Issue