Rev 3657 | Rev 4028 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3657 | Rev 4024 | ||
|---|---|---|---|
| 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 | *((uint8_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 | *((uint16_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 | *((uint32_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 *((uint8_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 | ||
| 82 | return *((uint16_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xffE) | ( (port >> 2) << 12 )))); |
98 | return *((uint16_t *)(IA64_IOSPACE_ADDRESS + |
| - | 99 | ((prt & 0xffE) | ((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 | ||
| 89 | return *((uint32_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))); |
108 | return *((uint32_t *)(IA64_IOSPACE_ADDRESS + |
| - | 109 | ((prt & 0xfff) | ((prt >> 2) << 12)))); |
|
| 90 | } |
110 | } |
| 91 | 111 | ||
| 92 | - | ||
| 93 | - | ||
| 94 | - | ||
| 95 | #endif |
112 | #endif |
| 96 | 113 | ||
| 97 | /** @} |
114 | /** @} |
| 98 | */ |
115 | */ |