Changes in kernel/arch/ia64/include/asm.h [314f3a3c:86a34d3e] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/include/asm.h
r314f3a3c r86a34d3e 38 38 #include <config.h> 39 39 #include <typedefs.h> 40 #include <typedefs.h> 40 41 #include <arch/register.h> 41 #include <arch/legacyio.h>42 42 #include <trace.h> 43 43 44 #define IA64_IOSPACE_ADDRESS 0xE001000000000000ULL 45 44 46 #define IO_SPACE_BOUNDARY ((void *) (64 * 1024)) 45 47 46 /** Map the I/O port address to a legacy I/O address. */47 NO_TRACE static inline uintptr_t p2a(volatile void *p)48 {49 uintptr_t prt = (uintptr_t) p;50 51 return legacyio_virt_base + (((prt >> 2) << 12) | (prt & 0xfff));52 }53 54 48 NO_TRACE static inline void pio_write_8(ioport8_t *port, uint8_t v) 55 49 { 56 if (port < (ioport8_t *) IO_SPACE_BOUNDARY) 57 *((ioport8_t *) p2a(port)) = v; 58 else 50 if (port < (ioport8_t *) IO_SPACE_BOUNDARY) { 51 uintptr_t prt = (uintptr_t) port; 52 53 *((ioport8_t *) (IA64_IOSPACE_ADDRESS + 54 ((prt & 0xfff) | ((prt >> 2) << 12)))) = v; 55 } else { 59 56 *port = v; 60 61 asm volatile (62 "mf\n"63 "mf .a\n"57 } 58 59 asm volatile ( 60 "mf\n" 64 61 ::: "memory" 65 62 ); … … 68 65 NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t v) 69 66 { 70 if (port < (ioport16_t *) IO_SPACE_BOUNDARY) 71 *((ioport16_t *) p2a(port)) = v; 72 else 67 if (port < (ioport16_t *) IO_SPACE_BOUNDARY) { 68 uintptr_t prt = (uintptr_t) port; 69 70 *((ioport16_t *) (IA64_IOSPACE_ADDRESS + 71 ((prt & 0xfff) | ((prt >> 2) << 12)))) = v; 72 } else { 73 73 *port = v; 74 75 asm volatile (76 "mf\n"77 "mf .a\n"74 } 75 76 asm volatile ( 77 "mf\n" 78 78 ::: "memory" 79 79 ); … … 82 82 NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t v) 83 83 { 84 if (port < (ioport32_t *) IO_SPACE_BOUNDARY) 85 *((ioport32_t *) p2a(port)) = v; 86 else 84 if (port < (ioport32_t *) IO_SPACE_BOUNDARY) { 85 uintptr_t prt = (uintptr_t) port; 86 87 *((ioport32_t *) (IA64_IOSPACE_ADDRESS + 88 ((prt & 0xfff) | ((prt >> 2) << 12)))) = v; 89 } else { 87 90 *port = v; 88 89 asm volatile (90 "mf\n"91 "mf .a\n"91 } 92 93 asm volatile ( 94 "mf\n" 92 95 ::: "memory" 93 96 ); … … 103 106 ); 104 107 105 if (port < (ioport8_t *) IO_SPACE_BOUNDARY) 106 v = *((ioport8_t *) p2a(port)); 107 else 108 if (port < (ioport8_t *) IO_SPACE_BOUNDARY) { 109 uintptr_t prt = (uintptr_t) port; 110 111 v = *((ioport8_t *) (IA64_IOSPACE_ADDRESS + 112 ((prt & 0xfff) | ((prt >> 2) << 12)))); 113 } else { 108 114 v = *port; 109 110 asm volatile ( 111 "mf.a\n" 112 ::: "memory" 113 ); 115 } 114 116 115 117 return v; … … 125 127 ); 126 128 127 if (port < (ioport16_t *) IO_SPACE_BOUNDARY) 128 v = *((ioport16_t *) p2a(port)); 129 else 129 if (port < (ioport16_t *) IO_SPACE_BOUNDARY) { 130 uintptr_t prt = (uintptr_t) port; 131 132 v = *((ioport16_t *) (IA64_IOSPACE_ADDRESS + 133 ((prt & 0xfff) | ((prt >> 2) << 12)))); 134 } else { 130 135 v = *port; 131 132 asm volatile ( 133 "mf.a\n" 134 ::: "memory" 135 ); 136 } 136 137 137 138 return v; … … 147 148 ); 148 149 149 if (port < (ioport32_t *) IO_SPACE_BOUNDARY) 150 v = *((ioport32_t *) p2a(port)); 151 else 150 if (port < (ioport32_t *) IO_SPACE_BOUNDARY) { 151 uintptr_t prt = (uintptr_t) port; 152 153 v = *((ioport32_t *) (IA64_IOSPACE_ADDRESS + 154 ((prt & 0xfff) | ((prt >> 2) << 12)))); 155 } else { 152 156 v = *port; 153 154 asm volatile ( 155 "mf.a\n" 156 ::: "memory" 157 ); 157 } 158 158 159 159 return v;
Note:
See TracChangeset
for help on using the changeset viewer.