Dr Andrew Scott G7VAV

My photo
 
April 2024
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5
6 7 8 9 10 11 12


io.h
001: /* Copyright (C) 1996, 2000, 2002, 2009 Free Software Foundation, Inc.
002:    This file is part of the GNU C Library.
003: 
004:    The GNU C Library is free software; you can redistribute it and/or
005:    modify it under the terms of the GNU Lesser General Public
006:    License as published by the Free Software Foundation; either
007:    version 2.1 of the License, or (at your option) any later version.
008: 
009:    The GNU C Library is distributed in the hope that it will be useful,
010:    but WITHOUT ANY WARRANTY; without even the implied warranty of
011:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
012:    Lesser General Public License for more details.
013: 
014:    You should have received a copy of the GNU Lesser General Public
015:    License along with the GNU C Library; if not, write to the Free
016:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
017:    02111-1307 USA.  */
018: 
019: #ifndef _SYS_IO_H
020: #define _SYS_IO_H       1
021: 
022: #include <features.h>
023: 
024: __BEGIN_DECLS
025: 
026: /* If TURN_ON is TRUE, request for permission to do direct i/o on the
027:    port numbers in the range [FROM,FROM+NUM-1].  Otherwise, turn I/O
028:    permission off for that range.  This call requires root privileges.
029: 
030:    Portability note: not all Linux platforms support this call.  Most
031:    platforms based on the PC I/O architecture probably will, however.
032:    E.g., Linux/Alpha for Alpha PCs supports this.  */
033: extern int ioperm (unsigned long int __from, unsigned long int __num,
034:                    int __turn_on) __THROW;
035: 
036: /* Set the I/O privilege level to LEVEL.  If LEVEL>3, permission to
037:    access any I/O port is granted.  This call requires root
038:    privileges. */
039: extern int iopl (int __level) __THROW;
040: 
041: #if defined __GNUC__ && __GNUC__ >= 2
042: 
043: static __inline unsigned char
044: inb (unsigned short int __port)
045: {
046:   unsigned char _v;
047: 
048:   __asm__ __volatile__ ("inb %w1,%0":"=a" (_v):"Nd" (__port));
049:   return _v;
050: }
051: 
052: static __inline unsigned char
053: inb_p (unsigned short int __port)
054: {
055:   unsigned char _v;
056: 
057:   __asm__ __volatile__ ("inb %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (__port));
058:   return _v;
059: }
060: 
061: static __inline unsigned short int
062: inw (unsigned short int __port)
063: {
064:   unsigned short _v;
065: 
066:   __asm__ __volatile__ ("inw %w1,%0":"=a" (_v):"Nd" (__port));
067:   return _v;
068: }
069: 
070: static __inline unsigned short int
071: inw_p (unsigned short int __port)
072: {
073:   unsigned short int _v;
074: 
075:   __asm__ __volatile__ ("inw %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (__port));
076:   return _v;
077: }
078: 
079: static __inline unsigned int
080: inl (unsigned short int __port)
081: {
082:   unsigned int _v;
083: 
084:   __asm__ __volatile__ ("inl %w1,%0":"=a" (_v):"Nd" (__port));
085:   return _v;
086: }
087: 
088: static __inline unsigned int
089: inl_p (unsigned short int __port)
090: {
091:   unsigned int _v;
092:   __asm__ __volatile__ ("inl %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (__port));
093:   return _v;
094: }
095: 
096: static __inline void
097: outb (unsigned char __value, unsigned short int __port)
098: {
099:   __asm__ __volatile__ ("outb %b0,%w1": :"a" (__value), "Nd" (__port));
100: }
101: 
102: static __inline void
103: outb_p (unsigned char __value, unsigned short int __port)
104: {
105:   __asm__ __volatile__ ("outb %b0,%w1\noutb %%al,$0x80": :"a" (__value),
106:                         "Nd" (__port));
107: }
108: 
109: static __inline void
110: outw (unsigned short int __value, unsigned short int __port)
111: {
112:   __asm__ __volatile__ ("outw %w0,%w1": :"a" (__value), "Nd" (__port));
113: 
114: }
115: 
116: static __inline void
117: outw_p (unsigned short int __value, unsigned short int __port)
118: {
119:   __asm__ __volatile__ ("outw %w0,%w1\noutb %%al,$0x80": :"a" (__value),
120:                         "Nd" (__port));
121: }
122: 
123: static __inline void
124: outl (unsigned int __value, unsigned short int __port)
125: {
126:   __asm__ __volatile__ ("outl %0,%w1": :"a" (__value), "Nd" (__port));
127: }
128: 
129: static __inline void
130: outl_p (unsigned int __value, unsigned short int __port)
131: {
132:   __asm__ __volatile__ ("outl %0,%w1\noutb %%al,$0x80": :"a" (__value),
133:                         "Nd" (__port));
134: }
135: 
136: static __inline void
137: insb (unsigned short int __port, void *addr, unsigned long int __count)
138: {
139:   __asm__ __volatile__ ("cld ; rep ; insb":"=D" (addr), "=c" (__count)
140:                         :"d" (__port), "0" (addr), "1" (__count));
141: }
142: 
143: static __inline void
144: insw (unsigned short int __port, void *addr, unsigned long int __count)
145: {
146:   __asm__ __volatile__ ("cld ; rep ; insw":"=D" (addr), "=c" (__count)
147:                         :"d" (__port), "0" (addr), "1" (__count));
148: }
149: 
150: static __inline void
151: insl (unsigned short int __port, void *addr, unsigned long int __count)
152: {
153:   __asm__ __volatile__ ("cld ; rep ; insl":"=D" (addr), "=c" (__count)
154:                         :"d" (__port), "0" (addr), "1" (__count));
155: }
156: 
157: static __inline void
158: outsb (unsigned short int __port, const void *addr, unsigned long int __count)
159: {
160:   __asm__ __volatile__ ("cld ; rep ; outsb":"=S" (addr), "=c" (__count)
161:                         :"d" (__port), "0" (addr), "1" (__count));
162: }
163: 
164: static __inline void
165: outsw (unsigned short int __port, const void *addr, unsigned long int __count)
166: {
167:   __asm__ __volatile__ ("cld ; rep ; outsw":"=S" (addr), "=c" (__count)
168:                         :"d" (__port), "0" (addr), "1" (__count));
169: }
170: 
171: static __inline void
172: outsl (unsigned short int __port, const void *addr, unsigned long int __count)
173: {
174:   __asm__ __volatile__ ("cld ; rep ; outsl":"=S" (addr), "=c" (__count)
175:                         :"d" (__port), "0" (addr), "1" (__count));
176: }
177: 
178: #endif  /* GNU C */
179: 
180: __END_DECLS
181: #endif /* _SYS_IO_H */
182: 


for client 18.223.171.12
© Andrew Scott 2006 - 2024,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/