]>
Commit | Line | Data |
---|---|---|
a09749dd JL |
1 | /* |
2 | * I/O routines for Titan | |
3 | */ | |
a09749dd JL |
4 | #include <linux/pci.h> |
5 | #include <asm/machvec.h> | |
6 | #include <asm/addrspace.h> | |
7639a454 | 7 | #include <mach/titan.h> |
a09749dd | 8 | #include <asm/io.h> |
a09749dd | 9 | |
373e68b5 | 10 | static inline unsigned int port2adr(unsigned int port) |
a09749dd JL |
11 | { |
12 | maybebadio((unsigned long)port); | |
373e68b5 | 13 | return port; |
a09749dd JL |
14 | } |
15 | ||
16 | u8 titan_inb(unsigned long port) | |
17 | { | |
18 | if (PXSEG(port)) | |
9d56dd3b PM |
19 | return __raw_readb(port); |
20 | return __raw_readw(port2adr(port)) & 0xff; | |
a09749dd JL |
21 | } |
22 | ||
23 | u8 titan_inb_p(unsigned long port) | |
24 | { | |
25 | u8 v; | |
26 | ||
27 | if (PXSEG(port)) | |
9d56dd3b | 28 | v = __raw_readb(port); |
a09749dd | 29 | else |
9d56dd3b | 30 | v = __raw_readw(port2adr(port)) & 0xff; |
959f85f8 | 31 | ctrl_delay(); |
a09749dd JL |
32 | return v; |
33 | } | |
34 | ||
35 | u16 titan_inw(unsigned long port) | |
36 | { | |
37 | if (PXSEG(port)) | |
9d56dd3b | 38 | return __raw_readw(port); |
a09749dd | 39 | else if (port >= 0x2000) |
9d56dd3b | 40 | return __raw_readw(port2adr(port)); |
a09749dd JL |
41 | else |
42 | maybebadio(port); | |
43 | return 0; | |
44 | } | |
45 | ||
46 | u32 titan_inl(unsigned long port) | |
47 | { | |
48 | if (PXSEG(port)) | |
9d56dd3b | 49 | return __raw_readl(port); |
a09749dd | 50 | else if (port >= 0x2000) |
9d56dd3b | 51 | return __raw_readw(port2adr(port)); |
a09749dd JL |
52 | else |
53 | maybebadio(port); | |
54 | return 0; | |
55 | } | |
56 | ||
57 | void titan_outb(u8 value, unsigned long port) | |
58 | { | |
59 | if (PXSEG(port)) | |
9d56dd3b | 60 | __raw_writeb(value, port); |
a09749dd | 61 | else |
9d56dd3b | 62 | __raw_writew(value, port2adr(port)); |
a09749dd JL |
63 | } |
64 | ||
65 | void titan_outb_p(u8 value, unsigned long port) | |
66 | { | |
67 | if (PXSEG(port)) | |
9d56dd3b | 68 | __raw_writeb(value, port); |
a09749dd | 69 | else |
9d56dd3b | 70 | __raw_writew(value, port2adr(port)); |
959f85f8 | 71 | ctrl_delay(); |
a09749dd JL |
72 | } |
73 | ||
74 | void titan_outw(u16 value, unsigned long port) | |
75 | { | |
76 | if (PXSEG(port)) | |
9d56dd3b | 77 | __raw_writew(value, port); |
a09749dd | 78 | else if (port >= 0x2000) |
9d56dd3b | 79 | __raw_writew(value, port2adr(port)); |
a09749dd JL |
80 | else |
81 | maybebadio(port); | |
82 | } | |
83 | ||
84 | void titan_outl(u32 value, unsigned long port) | |
85 | { | |
86 | if (PXSEG(port)) | |
9d56dd3b | 87 | __raw_writel(value, port); |
a09749dd JL |
88 | else |
89 | maybebadio(port); | |
90 | } | |
91 | ||
92 | void titan_insl(unsigned long port, void *dst, unsigned long count) | |
93 | { | |
94 | maybebadio(port); | |
95 | } | |
96 | ||
97 | void titan_outsl(unsigned long port, const void *src, unsigned long count) | |
98 | { | |
99 | maybebadio(port); | |
100 | } | |
101 | ||
a09749dd JL |
102 | void __iomem *titan_ioport_map(unsigned long port, unsigned int size) |
103 | { | |
ef339f24 | 104 | if (PXSEG(port)) |
a09749dd | 105 | return (void __iomem *)port; |
a09749dd JL |
106 | |
107 | return (void __iomem *)port2adr(port); | |
108 | } |