diff options
author | Jay Estabrook <jay.estabrook@hp.com> | 2007-06-01 03:47:03 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-06-01 11:18:29 -0400 |
commit | 025a22151c41890e5d30a1d4fb84c547b84d7671 (patch) | |
tree | 9effd8ca9ceed994a03d252d4a1d28fa07ae93a1 /include | |
parent | 8778beb981b7e5df3472b05475e4c7905dad1f3d (diff) |
ALPHA: support graphics on non-zero PCI domains
This code replaces earlier and incomplete handling of graphics on non-zero PCI
domains (aka hoses or peer PCI buses).
An option (CONFIG_VGA_HOSE) is set TRUE if configuring a GENERIC kernel, or a
kernel for MARVEL, TITAN, or TSUNAMI machines, as these are the machines whose
SRM consoles are capable of configuring and handling graphics options on
non-zero hoses. All other machines have the option set FALSE.
A routine, "find_console_vga_hose()", is used to find the graphics device
which the machine's firmware believes is the console device, and it sets a
global (pci_vga_hose) for later use in managing access to the device. This is
called in "init_arch" on TITAN and TSUNAMI machines; MARVEL machines use a
custom version of this routine because of extra complexity.
A routine, "locate_and_init_vga()", is used to find the graphics device and
set a global (pci_vga_hose) for later use in managing access to the device, in
the case where "find_console_vga_hose" has failed.
Various adjustments are made to the ioremap and ioportmap routines for
detecting and translating "legacy" VGA register and memory references to the
real PCI domain.
[akpm@linux-foundation.org: don't statically init bss]
[akpm@linux-foundation.org: build fix]
Signed-off-by: Jay Estabrook <jay.estabrook@hp.com>
Signed-off-by: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Richard Henderson <rth@twiddle.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-alpha/core_titan.h | 7 | ||||
-rw-r--r-- | include/asm-alpha/core_tsunami.h | 15 | ||||
-rw-r--r-- | include/asm-alpha/vga.h | 31 |
3 files changed, 35 insertions, 18 deletions
diff --git a/include/asm-alpha/core_titan.h b/include/asm-alpha/core_titan.h index a64ccbff7d98..a17f6f33b68e 100644 --- a/include/asm-alpha/core_titan.h +++ b/include/asm-alpha/core_titan.h | |||
@@ -380,12 +380,7 @@ struct el_PRIVATEER_envdata_mcheck { | |||
380 | /* | 380 | /* |
381 | * Memory functions. all accesses are done through linear space. | 381 | * Memory functions. all accesses are done through linear space. |
382 | */ | 382 | */ |
383 | 383 | extern void __iomem *titan_ioportmap(unsigned long addr); | |
384 | __EXTERN_INLINE void __iomem *titan_ioportmap(unsigned long addr) | ||
385 | { | ||
386 | return (void __iomem *)(addr + TITAN_IO_BIAS); | ||
387 | } | ||
388 | |||
389 | extern void __iomem *titan_ioremap(unsigned long addr, unsigned long size); | 384 | extern void __iomem *titan_ioremap(unsigned long addr, unsigned long size); |
390 | extern void titan_iounmap(volatile void __iomem *addr); | 385 | extern void titan_iounmap(volatile void __iomem *addr); |
391 | 386 | ||
diff --git a/include/asm-alpha/core_tsunami.h b/include/asm-alpha/core_tsunami.h index 44e635d2c571..58d4fe48742c 100644 --- a/include/asm-alpha/core_tsunami.h +++ b/include/asm-alpha/core_tsunami.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define __ALPHA_TSUNAMI__H__ | 2 | #define __ALPHA_TSUNAMI__H__ |
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | #include <linux/pci.h> | ||
5 | #include <asm/compiler.h> | 6 | #include <asm/compiler.h> |
6 | 7 | ||
7 | /* | 8 | /* |
@@ -302,18 +303,8 @@ struct el_TSUNAMI_sysdata_mcheck { | |||
302 | /* | 303 | /* |
303 | * Memory functions. all accesses are done through linear space. | 304 | * Memory functions. all accesses are done through linear space. |
304 | */ | 305 | */ |
305 | 306 | extern void __iomem *tsunami_ioportmap(unsigned long addr); | |
306 | __EXTERN_INLINE void __iomem *tsunami_ioportmap(unsigned long addr) | 307 | extern void __iomem *tsunami_ioremap(unsigned long addr, unsigned long size); |
307 | { | ||
308 | return (void __iomem *)(addr + TSUNAMI_IO_BIAS); | ||
309 | } | ||
310 | |||
311 | __EXTERN_INLINE void __iomem *tsunami_ioremap(unsigned long addr, | ||
312 | unsigned long size) | ||
313 | { | ||
314 | return (void __iomem *)(addr + TSUNAMI_MEM_BIAS); | ||
315 | } | ||
316 | |||
317 | __EXTERN_INLINE int tsunami_is_ioaddr(unsigned long addr) | 308 | __EXTERN_INLINE int tsunami_is_ioaddr(unsigned long addr) |
318 | { | 309 | { |
319 | return addr >= TSUNAMI_BASE; | 310 | return addr >= TSUNAMI_BASE; |
diff --git a/include/asm-alpha/vga.h b/include/asm-alpha/vga.h index ed06f59b544d..e8df1e7aae6b 100644 --- a/include/asm-alpha/vga.h +++ b/include/asm-alpha/vga.h | |||
@@ -46,6 +46,37 @@ extern void scr_memcpyw(u16 *d, const u16 *s, unsigned int count); | |||
46 | #define vga_readb(a) readb((u8 __iomem *)(a)) | 46 | #define vga_readb(a) readb((u8 __iomem *)(a)) |
47 | #define vga_writeb(v,a) writeb(v, (u8 __iomem *)(a)) | 47 | #define vga_writeb(v,a) writeb(v, (u8 __iomem *)(a)) |
48 | 48 | ||
49 | #ifdef CONFIG_VGA_HOSE | ||
50 | #include <linux/ioport.h> | ||
51 | #include <linux/pci.h> | ||
52 | |||
53 | extern struct pci_controller *pci_vga_hose; | ||
54 | |||
55 | # define __is_port_vga(a) \ | ||
56 | (((a) >= 0x3b0) && ((a) < 0x3e0) && \ | ||
57 | ((a) != 0x3b3) && ((a) != 0x3d3)) | ||
58 | |||
59 | # define __is_mem_vga(a) \ | ||
60 | (((a) >= 0xa0000) && ((a) <= 0xc0000)) | ||
61 | |||
62 | # define FIXUP_IOADDR_VGA(a) do { \ | ||
63 | if (pci_vga_hose && __is_port_vga(a)) \ | ||
64 | (a) += pci_vga_hose->io_space->start; \ | ||
65 | } while(0) | ||
66 | |||
67 | # define FIXUP_MEMADDR_VGA(a) do { \ | ||
68 | if (pci_vga_hose && __is_mem_vga(a)) \ | ||
69 | (a) += pci_vga_hose->mem_space->start; \ | ||
70 | } while(0) | ||
71 | |||
72 | #else /* CONFIG_VGA_HOSE */ | ||
73 | # define pci_vga_hose 0 | ||
74 | # define __is_port_vga(a) 0 | ||
75 | # define __is_mem_vga(a) 0 | ||
76 | # define FIXUP_IOADDR_VGA(a) | ||
77 | # define FIXUP_MEMADDR_VGA(a) | ||
78 | #endif /* CONFIG_VGA_HOSE */ | ||
79 | |||
49 | #define VGA_MAP_MEM(x,s) ((unsigned long) ioremap(x, s)) | 80 | #define VGA_MAP_MEM(x,s) ((unsigned long) ioremap(x, s)) |
50 | 81 | ||
51 | #endif | 82 | #endif |