提交 27879835 编写于 作者: D Dominik Brodowski 提交者: Linus Torvalds

[PATCH] yenta: same resources in same structs

drivers/pci/setup-bus.c enumerates the CardBus windows (bus->resources[])
Signed-off-by: NDominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 c6fd7188
...@@ -539,13 +539,12 @@ static int yenta_sock_suspend(struct pcmcia_socket *sock) ...@@ -539,13 +539,12 @@ static int yenta_sock_suspend(struct pcmcia_socket *sock)
#define PCIBIOS_MIN_CARDBUS_IO PCIBIOS_MIN_IO #define PCIBIOS_MIN_CARDBUS_IO PCIBIOS_MIN_IO
#endif #endif
static void yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned type) static void yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned type, int addr_start, int addr_end)
{ {
struct pci_bus *bus; struct pci_bus *bus;
struct resource *root, *res; struct resource *root, *res;
u32 start, end; u32 start, end;
u32 align, size, min; u32 align, size, min;
unsigned offset;
unsigned mask; unsigned mask;
res = socket->dev->resource + PCI_BRIDGE_RESOURCES + nr; res = socket->dev->resource + PCI_BRIDGE_RESOURCES + nr;
...@@ -558,13 +557,12 @@ static void yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned typ ...@@ -558,13 +557,12 @@ static void yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned typ
if (type & IORESOURCE_IO) if (type & IORESOURCE_IO)
mask = ~3; mask = ~3;
offset = 0x1c + 8*nr;
bus = socket->dev->subordinate; bus = socket->dev->subordinate;
res->name = bus->name; res->name = bus->name;
res->flags = type; res->flags = type;
start = config_readl(socket, offset) & mask; start = config_readl(socket, addr_start) & mask;
end = config_readl(socket, offset+4) | ~mask; end = config_readl(socket, addr_end) | ~mask;
if (start && end > start && !override_bios) { if (start && end > start && !override_bios) {
res->start = start; res->start = start;
res->end = end; res->end = end;
...@@ -607,8 +605,8 @@ static void yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned typ ...@@ -607,8 +605,8 @@ static void yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned typ
do { do {
if (allocate_resource(root, res, size, start, end, align, NULL, NULL)==0) { if (allocate_resource(root, res, size, start, end, align, NULL, NULL)==0) {
config_writel(socket, offset, res->start); config_writel(socket, addr_start, res->start);
config_writel(socket, offset+4, res->end); config_writel(socket, addr_end, res->end);
return; return;
} }
size = size/2; size = size/2;
...@@ -624,10 +622,14 @@ static void yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned typ ...@@ -624,10 +622,14 @@ static void yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned typ
*/ */
static void yenta_allocate_resources(struct yenta_socket *socket) static void yenta_allocate_resources(struct yenta_socket *socket)
{ {
yenta_allocate_res(socket, 0, IORESOURCE_MEM|IORESOURCE_PREFETCH); yenta_allocate_res(socket, 0, IORESOURCE_IO,
yenta_allocate_res(socket, 1, IORESOURCE_MEM); PCI_CB_IO_BASE_0, PCI_CB_IO_LIMIT_0);
yenta_allocate_res(socket, 2, IORESOURCE_IO); yenta_allocate_res(socket, 1, IORESOURCE_IO,
yenta_allocate_res(socket, 3, IORESOURCE_IO); PCI_CB_IO_BASE_1, PCI_CB_IO_LIMIT_1);
yenta_allocate_res(socket, 2, IORESOURCE_MEM|IORESOURCE_PREFETCH,
PCI_CB_MEMORY_BASE_0, PCI_CB_MEMORY_LIMIT_0);
yenta_allocate_res(socket, 3, IORESOURCE_MEM,
PCI_CB_MEMORY_BASE_1, PCI_CB_MEMORY_LIMIT_1);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册