sparc: Write to prom console using indirect buffer.
[pandora-kernel.git] / arch / sh / boards / mach-snapgear / io.c
1 /*
2  * Copyright (C) 2002  David McCullough <davidm@snapgear.com>
3  * Copyright (C) 2001  Ian da Silva, Jeremy Siegel
4  * Based largely on io_se.c.
5  *
6  * I/O routine for Hitachi 7751 SolutionEngine.
7  *
8  * Initial version only to support LAN access; some
9  * placeholder code from io_se.c left in with the
10  * expectation of later SuperIO and PCMCIA access.
11  */
12 #include <linux/kernel.h>
13 #include <linux/types.h>
14 #include <linux/pci.h>
15 #include <asm/io.h>
16 #include <asm/addrspace.h>
17
18 #ifdef CONFIG_SH_SECUREEDGE5410
19 unsigned short secureedge5410_ioport;
20 #endif
21
22 static inline volatile __u16 *port2adr(unsigned int port)
23 {
24         maybebadio((unsigned long)port);
25         return (volatile __u16*)port;
26 }
27
28 /*
29  * General outline: remap really low stuff [eventually] to SuperIO,
30  * stuff in PCI IO space (at or above window at pci.h:PCIBIOS_MIN_IO)
31  * is mapped through the PCI IO window.  Stuff with high bits (PXSEG)
32  * should be way beyond the window, and is used  w/o translation for
33  * compatibility.
34  */
35 unsigned char snapgear_inb(unsigned long port)
36 {
37         if (PXSEG(port))
38                 return *(volatile unsigned char *)port;
39         else
40                 return (*port2adr(port)) & 0xff;
41 }
42
43 unsigned char snapgear_inb_p(unsigned long port)
44 {
45         unsigned char v;
46
47         if (PXSEG(port))
48                 v = *(volatile unsigned char *)port;
49         else
50                 v = (*port2adr(port))&0xff;
51         ctrl_delay();
52         return v;
53 }
54
55 unsigned short snapgear_inw(unsigned long port)
56 {
57         if (PXSEG(port))
58                 return *(volatile unsigned short *)port;
59         else if (port >= 0x2000)
60                 return *port2adr(port);
61         else
62                 maybebadio(port);
63         return 0;
64 }
65
66 unsigned int snapgear_inl(unsigned long port)
67 {
68         if (PXSEG(port))
69                 return *(volatile unsigned long *)port;
70         else if (port >= 0x2000)
71                 return *port2adr(port);
72         else
73                 maybebadio(port);
74         return 0;
75 }
76
77 void snapgear_outb(unsigned char value, unsigned long port)
78 {
79
80         if (PXSEG(port))
81                 *(volatile unsigned char *)port = value;
82         else
83                 *(port2adr(port)) = value;
84 }
85
86 void snapgear_outb_p(unsigned char value, unsigned long port)
87 {
88         if (PXSEG(port))
89                 *(volatile unsigned char *)port = value;
90         else
91                 *(port2adr(port)) = value;
92         ctrl_delay();
93 }
94
95 void snapgear_outw(unsigned short value, unsigned long port)
96 {
97         if (PXSEG(port))
98                 *(volatile unsigned short *)port = value;
99         else if (port >= 0x2000)
100                 *port2adr(port) = value;
101         else
102                 maybebadio(port);
103 }
104
105 void snapgear_outl(unsigned int value, unsigned long port)
106 {
107         if (PXSEG(port))
108                 *(volatile unsigned long *)port = value;
109         else
110                 maybebadio(port);
111 }
112
113 void snapgear_insl(unsigned long port, void *addr, unsigned long count)
114 {
115         maybebadio(port);
116 }
117
118 void snapgear_outsl(unsigned long port, const void *addr, unsigned long count)
119 {
120         maybebadio(port);
121 }