Changeset a2a5529 in mainline for kernel/arch/ia64/include/asm.h
- Timestamp:
- 2008-11-11T07:50:04Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 59e4864
- Parents:
- b24786a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/include/asm.h
rb24786a ra2a5529 40 40 #include <arch/register.h> 41 41 42 typedef uint64_t ioport_t; 42 43 43 44 #define IA64_IOSPACE_ADDRESS 0xE001000000000000ULL 44 45 45 static inline void outb( uint64_t port,uint8_t v)46 static inline void outb(ioport_t port,uint8_t v) 46 47 { 47 48 *((uint8_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))) = v; … … 50 51 } 51 52 52 static inline void outw( uint64_t port,uint16_t v)53 static inline void outw(ioport_t port,uint16_t v) 53 54 { 54 55 *((uint16_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))) = v; … … 57 58 } 58 59 59 static inline void outl( uint64_t port,uint32_t v)60 static inline void outl(ioport_t port,uint32_t v) 60 61 { 61 62 *((uint32_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))) = v; … … 66 67 67 68 68 static inline uint8_t inb( uint64_t port)69 static inline uint8_t inb(ioport_t port) 69 70 { 70 71 asm volatile ("mf\n" ::: "memory"); … … 73 74 } 74 75 75 static inline uint16_t inw( uint64_t port)76 static inline uint16_t inw(ioport_t port) 76 77 { 77 78 asm volatile ("mf\n" ::: "memory"); … … 80 81 } 81 82 82 static inline uint32_t inl( uint64_t port)83 static inline uint32_t inl(ioport_t port) 83 84 { 84 85 asm volatile ("mf\n" ::: "memory"); … … 99 100 uint64_t v; 100 101 101 asm volatile ("and %0 = %1, r12" : "=r" (v) : "r" (~(STACK_SIZE-1))); 102 103 return v; 102 //I'm not sure why but this code bad inlines in scheduler, 103 //so THE shifts about 16B and causes kernel panic 104 //asm volatile ("and %0 = %1, r12" : "=r" (v) : "r" (~(STACK_SIZE-1))); 105 //return v; 106 107 //this code have the same meaning but inlines well 108 asm volatile ("mov %0 = r12" : "=r" (v) ); 109 return v & (~(STACK_SIZE-1)); 104 110 } 105 111 … … 152 158 return v; 153 159 } 160 161 static inline uint64_t cr64_read(void) 162 { 163 uint64_t v; 164 165 asm volatile ("mov %0 = cr64\n" : "=r" (v)); 166 167 return v; 168 } 169 154 170 155 171 /** Write ITC (Interval Timer Counter) register.
Note:
See TracChangeset
for help on using the changeset viewer.