Rev 3675 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3675 | Rev 4377 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | /* |
1 | /* |
2 | * Copyright (c) 2005 Jakub Jermar, Jakub Vana |
2 | * Copyright (c) 2005 Jakub Vana |
3 | * All rights reserved. |
3 | * All rights reserved. |
4 | * |
4 | * |
5 | * Redistribution and use in source and binary forms, with or without |
5 | * Redistribution and use in source and binary forms, with or without |
6 | * modification, are permitted provided that the following conditions |
6 | * modification, are permitted provided that the following conditions |
7 | * are met: |
7 | * are met: |
Line 24... | Line 24... | ||
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | */ |
27 | */ |
28 | 28 | ||
29 | /** @addtogroup ia64 |
29 | /** @addtogroup libcia64 |
30 | * @{ |
30 | * @{ |
31 | */ |
31 | */ |
32 | /** @file |
32 | /** @file |
33 | */ |
33 | */ |
34 | 34 | ||
35 | #ifndef LIBC_ia64_DDI_H_ |
35 | #ifndef LIBC_ia64_DDI_H_ |
36 | #define LIBC_ia64_DDI_H_ |
36 | #define LIBC_ia64_DDI_H_ |
37 | 37 | ||
- | 38 | #include <sys/types.h> |
|
38 | #include <libarch/types.h> |
39 | #include <libarch/types.h> |
39 | 40 | ||
40 | typedef uint64_t ioport_t; |
41 | #define IO_SPACE_BOUNDARY (64 * 1024) |
41 | 42 | ||
42 | uint64_t get_ia64_iospace_address(void); |
43 | uint64_t get_ia64_iospace_address(void); |
43 | 44 | ||
44 | extern uint64_t ia64_iospace_address; |
45 | extern uint64_t ia64_iospace_address; |
45 | 46 | ||
- | 47 | #define IA64_IOSPACE_ADDRESS \ |
|
- | 48 | (ia64_iospace_address ? \ |
|
- | 49 | ia64_iospace_address : \ |
|
46 | #define IA64_IOSPACE_ADDRESS (ia64_iospace_address?ia64_iospace_address:(ia64_iospace_address=get_ia64_iospace_address())) |
50 | (ia64_iospace_address = get_ia64_iospace_address())) |
47 | 51 | ||
48 | static inline void outb(ioport_t port,uint8_t v) |
52 | static inline void pio_write_8(ioport8_t *port, uint8_t v) |
49 | { |
53 | { |
- | 54 | uintptr_t prt = (uintptr_t) port; |
|
- | 55 | ||
- | 56 | *((ioport8_t *)(IA64_IOSPACE_ADDRESS + |
|
50 | *((uint8_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))) = v; |
57 | ((prt & 0xfff) | ((prt >> 2) << 12)))) = v; |
51 | 58 | ||
52 | asm volatile ("mf\n" ::: "memory"); |
59 | asm volatile ("mf\n" ::: "memory"); |
53 | } |
60 | } |
54 | 61 | ||
55 | static inline void outw(ioport_t port,uint16_t v) |
62 | static inline void pio_write_16(ioport16_t *port, uint16_t v) |
56 | { |
63 | { |
- | 64 | uintptr_t prt = (uintptr_t) port; |
|
- | 65 | ||
- | 66 | *((ioport16_t *)(IA64_IOSPACE_ADDRESS + |
|
57 | *((uint16_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))) = v; |
67 | ((prt & 0xfff) | ((prt >> 2) << 12)))) = v; |
58 | 68 | ||
59 | asm volatile ("mf\n" ::: "memory"); |
69 | asm volatile ("mf\n" ::: "memory"); |
60 | } |
70 | } |
61 | 71 | ||
62 | static inline void outl(ioport_t port,uint32_t v) |
72 | static inline void pio_write_32(ioport32_t *port, uint32_t v) |
63 | { |
73 | { |
- | 74 | uintptr_t prt = (uintptr_t) port; |
|
- | 75 | ||
- | 76 | *((ioport32_t *)(IA64_IOSPACE_ADDRESS + |
|
64 | *((uint32_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))) = v; |
77 | ((prt & 0xfff) | ((prt >> 2) << 12)))) = v; |
65 | 78 | ||
66 | asm volatile ("mf\n" ::: "memory"); |
79 | asm volatile ("mf\n" ::: "memory"); |
67 | } |
80 | } |
68 | 81 | ||
69 | - | ||
70 | - | ||
71 | static inline uint8_t inb(ioport_t port) |
82 | static inline uint8_t pio_read_8(ioport8_t *port) |
72 | { |
83 | { |
- | 84 | uintptr_t prt = (uintptr_t) port; |
|
- | 85 | ||
73 | asm volatile ("mf\n" ::: "memory"); |
86 | asm volatile ("mf\n" ::: "memory"); |
74 | 87 | ||
- | 88 | return *((ioport8_t *)(IA64_IOSPACE_ADDRESS + |
|
75 | return *((uint8_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))); |
89 | ((prt & 0xfff) | ((prt >> 2) << 12)))); |
76 | } |
90 | } |
77 | 91 | ||
78 | static inline uint16_t inw(ioport_t port) |
92 | static inline uint16_t pio_read_16(ioport16_t *port) |
79 | { |
93 | { |
- | 94 | uintptr_t prt = (uintptr_t) port; |
|
- | 95 | ||
80 | asm volatile ("mf\n" ::: "memory"); |
96 | asm volatile ("mf\n" ::: "memory"); |
81 | 97 | ||
- | 98 | return *((ioport16_t *)(IA64_IOSPACE_ADDRESS + |
|
82 | return *((uint16_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xffE) | ( (port >> 2) << 12 )))); |
99 | ((prt & 0xfff) | ((prt >> 2) << 12)))); |
83 | } |
100 | } |
84 | 101 | ||
85 | static inline uint32_t inl(ioport_t port) |
102 | static inline uint32_t pio_read_32(ioport32_t *port) |
86 | { |
103 | { |
- | 104 | uintptr_t prt = (uintptr_t) port; |
|
- | 105 | ||
87 | asm volatile ("mf\n" ::: "memory"); |
106 | asm volatile ("mf\n" ::: "memory"); |
88 | 107 | ||
- | 108 | return *((ioport32_t *)(IA64_IOSPACE_ADDRESS + |
|
89 | return *((uint32_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))); |
109 | ((prt & 0xfff) | ((prt >> 2) << 12)))); |
90 | } |
110 | } |
91 | 111 | ||
92 | - | ||
93 | - | ||
94 | - | ||
95 | #endif |
112 | #endif |
96 | 113 | ||
97 | /** @} |
114 | /** @} |
98 | */ |
115 | */ |