Diff markup
001 001
002 002
003 003
004 004
005 005
006 006
007 007
008 008
009 009
010 010
011 011
012 012
013 013
014 014
015 015
016 016
017 017
018 #ifndef _SOS_IOPORTS_H_ 018 #ifndef _SOS_IOPORTS_H_
019 #define _SOS_IOPORTS_H_ 019 #define _SOS_IOPORTS_H_
020 020
021 021
022 022
023 023
024 024
025 025
026 026
027 027
028 #define outb(value, port) 028 #define outb(value, port) \
029 __asm__ volatile ( 029 __asm__ volatile ( \
030 "outb %b0,%w1" 030 "outb %b0,%w1" \
031 ::"a" (value),"Nd" (port) 031 ::"a" (value),"Nd" (port) \
032 ) 032 ) \
033 033
034 034
035 #define inb(port) 035 #define inb(port) \
036 ({ 036 ({ \
037 unsigned char _v; 037 unsigned char _v; \
038 __asm__ volatile ( 038 __asm__ volatile ( \
039 "inb %w1,%0" 039 "inb %w1,%0" \
040 :"=a" (_v) 040 :"=a" (_v) \
041 :"Nd" (port) 041 :"Nd" (port) \
042 ); 042 ); \
043 _v; 043 _v; \
044 }) 044 })
045 045
046 046
047 #define outw(value, port) 047 #define outw(value, port) \
048 __asm__ volatile ( 048 __asm__ volatile ( \
049 "outw %w0,%w1" 049 "outw %w0,%w1" \
050 ::"a" (value),"Nd" (port) 050 ::"a" (value),"Nd" (port) \
051 ) 051 ) \
052 052
053 053
054 #define inw(port) 054 #define inw(port) \
055 ({ 055 ({ \
056 unsigned int _v; 056 unsigned int _v; \
057 __asm__ volatile ( 057 __asm__ volatile ( \
058 "inw %w1,%w0" 058 "inw %w1,%w0" \
059 :"=a" (_v) 059 :"=a" (_v) \
060 :"Nd" (port) 060 :"Nd" (port) \
061 ); 061 ); \
062 _v; 062 _v; \
063 }) 063 })
064 064
065 065
066 #define outl(value, port) 066 #define outl(value, port) \
067 __asm__ volatile ( 067 __asm__ volatile ( \
068 "outl %0,%w1" 068 "outl %0,%w1" \
069 ::"a" (value),"Nd" (port) 069 ::"a" (value),"Nd" (port) \
070 ) 070 ) \
071 071
072 072
073 #define inl(port) 073 #define inl(port) \
074 ({ 074 ({ \
075 unsigned int _v; 075 unsigned int _v; \
076 __asm__ volatile ( 076 __asm__ volatile ( \
077 "inl %w1,%0" 077 "inl %w1,%0" \
078 :"=a" (_v) 078 :"=a" (_v) \
079 :"Nd" (port) 079 :"Nd" (port) \
080 ); 080 ); \
081 _v; 081 _v; \
082 }) 082 })
083 083
084 #endif 084 #endif