Changes in kernel/arch/ia64/include/asm.h [22f0561:86a34d3e] in mainline
- File:
-
- 1 edited
-
kernel/arch/ia64/include/asm.h (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/include/asm.h
r22f0561 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; 57 } 60 58 61 59 asm volatile ( … … 67 65 NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t v) 68 66 { 69 if (port < (ioport16_t *) IO_SPACE_BOUNDARY) 70 *((ioport16_t *) p2a(port)) = v; 71 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 { 72 73 *port = v; 74 } 73 75 74 76 asm volatile ( … … 80 82 NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t v) 81 83 { 82 if (port < (ioport32_t *) IO_SPACE_BOUNDARY) 83 *((ioport32_t *) p2a(port)) = v; 84 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 { 85 90 *port = v; 91 } 86 92 87 93 asm volatile ( … … 100 106 ); 101 107 102 if (port < (ioport8_t *) IO_SPACE_BOUNDARY) 103 v = *((ioport8_t *) p2a(port)); 104 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 { 105 114 v = *port; 115 } 106 116 107 117 return v; … … 117 127 ); 118 128 119 if (port < (ioport16_t *) IO_SPACE_BOUNDARY) 120 v = *((ioport16_t *) p2a(port)); 121 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 { 122 135 v = *port; 136 } 123 137 124 138 return v; … … 134 148 ); 135 149 136 if (port < (ioport32_t *) IO_SPACE_BOUNDARY) 137 v = *((ioport32_t *) p2a(port)); 138 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 { 139 156 v = *port; 157 } 140 158 141 159 return v;
Note:
See TracChangeset
for help on using the changeset viewer.
