aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/acpi
diff options
context:
space:
mode:
authorLen Brown <len.brown@intel.com>2009-06-11 23:53:55 -0400
committerLen Brown <len.brown@intel.com>2009-06-12 20:50:38 -0400
commitc4bf2f372db09ef8d16a25a60d523bfa1c50f7b5 (patch)
tree0323bf3d79875ae2bd0a59657595e9f532a640e1 /arch/x86/kernel/acpi
parent24c5c4c2f506bf87ef2343669fb892c944c3fdde (diff)
ACPI, PCI, x86: move MCFG parsing routine from ACPI to PCI file
Move arch/x86/kernel/acpi/boot.c: acpi_parse_mcfg() to arch/x86/pci/mmconfig-shared.c: pci_parse_mcfg() where it is used, and make it static. Move associated globals and helper routine with it. No functional change. This code move is in preparation for SFI support, which will allow the PCI code to find the MCFG table on systems which do not support ACPI. Signed-off-by: Len Brown <len.brown@intel.com> Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'arch/x86/kernel/acpi')
-rw-r--r--arch/x86/kernel/acpi/boot.c66
1 files changed, 0 insertions, 66 deletions
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index 817d6a5e115d..f54e0e557cd2 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -117,72 +117,6 @@ void __init __acpi_unmap_table(char *map, unsigned long size)
117 early_iounmap(map, size); 117 early_iounmap(map, size);
118} 118}
119 119
120#ifdef CONFIG_PCI_MMCONFIG
121
122static int acpi_mcfg_64bit_base_addr __initdata = FALSE;
123
124/* The physical address of the MMCONFIG aperture. Set from ACPI tables. */
125struct acpi_mcfg_allocation *pci_mmcfg_config;
126int pci_mmcfg_config_num;
127
128static int __init acpi_mcfg_oem_check(struct acpi_table_mcfg *mcfg)
129{
130 if (!strcmp(mcfg->header.oem_id, "SGI"))
131 acpi_mcfg_64bit_base_addr = TRUE;
132
133 return 0;
134}
135
136int __init acpi_parse_mcfg(struct acpi_table_header *header)
137{
138 struct acpi_table_mcfg *mcfg;
139 unsigned long i;
140 int config_size;
141
142 if (!header)
143 return -EINVAL;
144
145 mcfg = (struct acpi_table_mcfg *)header;
146
147 /* how many config structures do we have */
148 pci_mmcfg_config_num = 0;
149 i = header->length - sizeof(struct acpi_table_mcfg);
150 while (i >= sizeof(struct acpi_mcfg_allocation)) {
151 ++pci_mmcfg_config_num;
152 i -= sizeof(struct acpi_mcfg_allocation);
153 };
154 if (pci_mmcfg_config_num == 0) {
155 printk(KERN_ERR PREFIX "MMCONFIG has no entries\n");
156 return -ENODEV;
157 }
158
159 config_size = pci_mmcfg_config_num * sizeof(*pci_mmcfg_config);
160 pci_mmcfg_config = kmalloc(config_size, GFP_KERNEL);
161 if (!pci_mmcfg_config) {
162 printk(KERN_WARNING PREFIX
163 "No memory for MCFG config tables\n");
164 return -ENOMEM;
165 }
166
167 memcpy(pci_mmcfg_config, &mcfg[1], config_size);
168
169 acpi_mcfg_oem_check(mcfg);
170
171 for (i = 0; i < pci_mmcfg_config_num; ++i) {
172 if ((pci_mmcfg_config[i].address > 0xFFFFFFFF) &&
173 !acpi_mcfg_64bit_base_addr) {
174 printk(KERN_ERR PREFIX
175 "MMCONFIG not in low 4GB of memory\n");
176 kfree(pci_mmcfg_config);
177 pci_mmcfg_config_num = 0;
178 return -ENODEV;
179 }
180 }
181
182 return 0;
183}
184#endif /* CONFIG_PCI_MMCONFIG */
185
186#ifdef CONFIG_X86_LOCAL_APIC 120#ifdef CONFIG_X86_LOCAL_APIC
187static int __init acpi_parse_madt(struct acpi_table_header *table) 121static int __init acpi_parse_madt(struct acpi_table_header *table)
188{ 122{