-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
x86/pci: seperate x86_pci_rootbus_res_quirks from amd_bus.c
Those functions are used by intel_bus.c so seperate them to another file. and make amd_bus a bit smaller. Signed-off-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
- Loading branch information
Yinghai Lu
authored and
Jesse Barnes
committed
Nov 24, 2009
1 parent
7b7a785
commit 67f241f
Showing
4 changed files
with
103 additions
and
100 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
#include <linux/init.h> | ||
#include <linux/pci.h> | ||
|
||
#include "bus_numa.h" | ||
|
||
int pci_root_num; | ||
struct pci_root_info pci_root_info[PCI_ROOT_NR]; | ||
int found_all_numa_early; | ||
|
||
void x86_pci_root_bus_res_quirks(struct pci_bus *b) | ||
{ | ||
int i; | ||
int j; | ||
struct pci_root_info *info; | ||
|
||
/* don't go for it if _CRS is used already */ | ||
if (b->resource[0] != &ioport_resource || | ||
b->resource[1] != &iomem_resource) | ||
return; | ||
|
||
if (!pci_root_num) | ||
return; | ||
|
||
/* for amd, if only one root bus, don't need to do anything */ | ||
if (pci_root_num < 2 && found_all_numa_early) | ||
return; | ||
|
||
for (i = 0; i < pci_root_num; i++) { | ||
if (pci_root_info[i].bus_min == b->number) | ||
break; | ||
} | ||
|
||
if (i == pci_root_num) | ||
return; | ||
|
||
printk(KERN_DEBUG "PCI: peer root bus %02x res updated from pci conf\n", | ||
b->number); | ||
|
||
info = &pci_root_info[i]; | ||
for (j = 0; j < info->res_num; j++) { | ||
struct resource *res; | ||
struct resource *root; | ||
|
||
res = &info->res[j]; | ||
b->resource[j] = res; | ||
if (res->flags & IORESOURCE_IO) | ||
root = &ioport_resource; | ||
else | ||
root = &iomem_resource; | ||
insert_resource(root, res); | ||
} | ||
} | ||
|
||
void __init update_res(struct pci_root_info *info, size_t start, | ||
size_t end, unsigned long flags, int merge) | ||
{ | ||
int i; | ||
struct resource *res; | ||
|
||
if (start > end) | ||
return; | ||
|
||
if (!merge) | ||
goto addit; | ||
|
||
/* try to merge it with old one */ | ||
for (i = 0; i < info->res_num; i++) { | ||
size_t final_start, final_end; | ||
size_t common_start, common_end; | ||
|
||
res = &info->res[i]; | ||
if (res->flags != flags) | ||
continue; | ||
|
||
common_start = max((size_t)res->start, start); | ||
common_end = min((size_t)res->end, end); | ||
if (common_start > common_end + 1) | ||
continue; | ||
|
||
final_start = min((size_t)res->start, start); | ||
final_end = max((size_t)res->end, end); | ||
|
||
res->start = final_start; | ||
res->end = final_end; | ||
return; | ||
} | ||
|
||
addit: | ||
|
||
/* need to add that */ | ||
if (info->res_num >= RES_NUM) | ||
return; | ||
|
||
res = &info->res[info->res_num]; | ||
res->name = info->name; | ||
res->flags = flags; | ||
res->start = start; | ||
res->end = end; | ||
res->child = NULL; | ||
info->res_num++; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters