Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d215a9c8 authored by Bjorn Helgaas's avatar Bjorn Helgaas Committed by Jesse Barnes
Browse files

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: default avatarYinghai Lu <yinghai@kernel.org>
Signed-off-by: default avatarBjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
parent df5eb1d6
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -118,10 +118,17 @@ extern int __init pcibios_init(void);

/* 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 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;

#define PCI_MMCFG_BUS_OFFSET(bus)      ((bus) << 20)
+5 −5
Original line number Diff line number Diff line
@@ -34,10 +34,10 @@ static __init void free_all_mmcfg(void)
	pci_mmcfg_config = NULL;
}

static __init struct acpi_mcfg_allocation *pci_mmconfig_add(int segment,
	int start, int end, u64 addr)
static __init struct pci_mmcfg_region *pci_mmconfig_add(int segment, int start,
							int end, u64 addr)
{
	struct acpi_mcfg_allocation *new;
	struct pci_mmcfg_region *new;
	int new_num = pci_mmcfg_config_num + 1;
	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];
	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;
		res->name = names;
		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;

/* 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;

static int __init acpi_mcfg_check_entry(struct acpi_table_mcfg *mcfg,
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ static int mmcfg_last_accessed_cpu;
 */
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;

	for (cfg_num = 0; cfg_num < pci_mmcfg_config_num; cfg_num++) {
+3 −3
Original line number Diff line number Diff line
@@ -14,14 +14,14 @@

/* Static virtual mapping of the MMCONFIG aperture */
struct mmcfg_virt {
	struct acpi_mcfg_allocation *cfg;
	struct pci_mmcfg_region *cfg;
	char __iomem *virt;
};
static struct mmcfg_virt *pci_mmcfg_virt;

static char __iomem *get_virt(unsigned int seg, unsigned bus)
{
	struct acpi_mcfg_allocation *cfg;
	struct pci_mmcfg_region *cfg;
	int 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,
};

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;
	u64 start, size;