aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci
diff options
context:
space:
mode:
authorSuresh Siddha <suresh.b.siddha@intel.com>2008-07-10 14:16:38 -0400
committerIngo Molnar <mingo@elte.hu>2008-07-12 02:44:49 -0400
commitaaa9d1dd63bf89b62f4ea9f46de376ab1a3fbc6c (patch)
tree918c5fc937ea45f26660742a0a9a0d6c22df68f1 /drivers/pci
parent1886e8a90a580f3ad343f2065c84c1b9e1dac9ef (diff)
x64, x2apic/intr-remap: use CONFIG_DMAR for DMA-remapping specific code
DMA remapping specific code covered with CONFIG_DMAR in the generic code which will also be used later for enabling Interrupt-remapping. Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Cc: akpm@linux-foundation.org Cc: arjan@linux.intel.com Cc: andi@firstfloor.org Cc: ebiederm@xmission.com Cc: jbarnes@virtuousgeek.org Cc: steiner@sgi.com Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'drivers/pci')
-rw-r--r--drivers/pci/dmar.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/drivers/pci/dmar.c b/drivers/pci/dmar.c
index 158bc5bfcf75..5c99f9973987 100644
--- a/drivers/pci/dmar.c
+++ b/drivers/pci/dmar.c
@@ -39,7 +39,6 @@
39 * these units are not supported by the architecture. 39 * these units are not supported by the architecture.
40 */ 40 */
41LIST_HEAD(dmar_drhd_units); 41LIST_HEAD(dmar_drhd_units);
42LIST_HEAD(dmar_rmrr_units);
43 42
44static struct acpi_table_header * __initdata dmar_tbl; 43static struct acpi_table_header * __initdata dmar_tbl;
45 44
@@ -55,11 +54,6 @@ static void __init dmar_register_drhd_unit(struct dmar_drhd_unit *drhd)
55 list_add(&drhd->list, &dmar_drhd_units); 54 list_add(&drhd->list, &dmar_drhd_units);
56} 55}
57 56
58static void __init dmar_register_rmrr_unit(struct dmar_rmrr_unit *rmrr)
59{
60 list_add(&rmrr->list, &dmar_rmrr_units);
61}
62
63static int __init dmar_parse_one_dev_scope(struct acpi_dmar_device_scope *scope, 57static int __init dmar_parse_one_dev_scope(struct acpi_dmar_device_scope *scope,
64 struct pci_dev **dev, u16 segment) 58 struct pci_dev **dev, u16 segment)
65{ 59{
@@ -224,6 +218,15 @@ dmar_parse_dev(struct dmar_drhd_unit *dmaru)
224 return ret; 218 return ret;
225} 219}
226 220
221#ifdef CONFIG_DMAR
222LIST_HEAD(dmar_rmrr_units);
223
224static void __init dmar_register_rmrr_unit(struct dmar_rmrr_unit *rmrr)
225{
226 list_add(&rmrr->list, &dmar_rmrr_units);
227}
228
229
227static int __init 230static int __init
228dmar_parse_one_rmrr(struct acpi_dmar_header *header) 231dmar_parse_one_rmrr(struct acpi_dmar_header *header)
229{ 232{
@@ -260,6 +263,7 @@ rmrr_parse_dev(struct dmar_rmrr_unit *rmrru)
260 } 263 }
261 return ret; 264 return ret;
262} 265}
266#endif
263 267
264static void __init 268static void __init
265dmar_table_print_dmar_entry(struct acpi_dmar_header *header) 269dmar_table_print_dmar_entry(struct acpi_dmar_header *header)
@@ -284,6 +288,7 @@ dmar_table_print_dmar_entry(struct acpi_dmar_header *header)
284 } 288 }
285} 289}
286 290
291
287/** 292/**
288 * parse_dmar_table - parses the DMA reporting table 293 * parse_dmar_table - parses the DMA reporting table
289 */ 294 */
@@ -316,7 +321,9 @@ parse_dmar_table(void)
316 ret = dmar_parse_one_drhd(entry_header); 321 ret = dmar_parse_one_drhd(entry_header);
317 break; 322 break;
318 case ACPI_DMAR_TYPE_RESERVED_MEMORY: 323 case ACPI_DMAR_TYPE_RESERVED_MEMORY:
324#ifdef CONFIG_DMAR
319 ret = dmar_parse_one_rmrr(entry_header); 325 ret = dmar_parse_one_rmrr(entry_header);
326#endif
320 break; 327 break;
321 default: 328 default:
322 printk(KERN_WARNING PREFIX 329 printk(KERN_WARNING PREFIX
@@ -366,7 +373,6 @@ dmar_find_matched_drhd_unit(struct pci_dev *dev)
366int __init dmar_dev_scope_init(void) 373int __init dmar_dev_scope_init(void)
367{ 374{
368 struct dmar_drhd_unit *drhd; 375 struct dmar_drhd_unit *drhd;
369 struct dmar_rmrr_unit *rmrr;
370 int ret = -ENODEV; 376 int ret = -ENODEV;
371 377
372 for_each_drhd_unit(drhd) { 378 for_each_drhd_unit(drhd) {
@@ -375,11 +381,16 @@ int __init dmar_dev_scope_init(void)
375 return ret; 381 return ret;
376 } 382 }
377 383
378 for_each_rmrr_units(rmrr) { 384#ifdef CONFIG_DMAR
379 ret = rmrr_parse_dev(rmrr); 385 {
380 if (ret) 386 struct dmar_rmrr_unit *rmrr;
381 return ret; 387 for_each_rmrr_units(rmrr) {
388 ret = rmrr_parse_dev(rmrr);
389 if (ret)
390 return ret;
391 }
382 } 392 }
393#endif
383 394
384 return ret; 395 return ret;
385} 396}
@@ -407,10 +418,12 @@ int __init dmar_table_init(void)
407 return -ENODEV; 418 return -ENODEV;
408 } 419 }
409 420
421#ifdef CONFIG_DMAR
410 if (list_empty(&dmar_rmrr_units)) { 422 if (list_empty(&dmar_rmrr_units)) {
411 printk(KERN_INFO PREFIX "No RMRR found\n"); 423 printk(KERN_INFO PREFIX "No RMRR found\n");
412 return -ENODEV; 424 return -ENODEV;
413 } 425 }
426#endif
414 427
415 return 0; 428 return 0;
416} 429}