Main Page   File List  

port_io.h

Go to the documentation of this file.
00001 /* $Id: port_io.h 13646 2004-02-12 16:21:30Z fm3 $ */
00002 /*****************************************************************************/
00010 /*****************************************************************************/
00011 
00012 /* (c) 2003 Technische Universitaet Dresden
00013  * This file is part of DROPS, which is distributed under the terms of the
00014  * GNU General Public License 2. Please see the COPYING file for details. */
00015 
00016 #ifndef _L4UTIL_PORT_IO_H
00017 #define _L4UTIL_PORT_IO_H
00018 
00019 /* L4 includes */
00020 #include <l4/sys/l4int.h>
00021 #include <l4/sys/compiler.h>
00022 
00023 /*****************************************************************************
00024  *** Prototypes
00025  *****************************************************************************/
00026 
00029 EXTERN_C_BEGIN
00030 
00038 L4_INLINE l4_uint8_t
00039 l4util_in8(l4_uint16_t port);
00040 
00048 L4_INLINE l4_uint16_t
00049 l4util_in16(l4_uint16_t port);
00050 
00058 L4_INLINE l4_uint32_t
00059 l4util_in32(l4_uint16_t port);
00060 
00070 L4_INLINE void
00071 l4util_ins8(l4_uint16_t port, l4_umword_t addr, l4_umword_t count);
00072 
00082 L4_INLINE void
00083 l4util_ins16(l4_uint16_t port, l4_umword_t addr, l4_umword_t count);
00084 
00094 L4_INLINE void
00095 l4util_ins32(l4_uint16_t port, l4_umword_t addr, l4_umword_t count);
00096 
00104 L4_INLINE void
00105 l4util_out8(l4_uint8_t value, l4_uint16_t port);
00106 
00114 L4_INLINE void
00115 l4util_out16(l4_uint16_t value, l4_uint16_t port);
00116 
00124 L4_INLINE void
00125 l4util_out32(l4_uint32_t value, l4_uint16_t port);
00126 
00131 L4_INLINE void
00132 l4util_iodelay(void);
00133 
00134 EXTERN_C_END
00135 
00136 
00137 /*****************************************************************************
00138  *** Implementation
00139  *****************************************************************************/
00140 
00141 L4_INLINE l4_uint8_t
00142 l4util_in8(l4_uint16_t port)
00143 {
00144   l4_uint8_t value;
00145   asm volatile ("inb %w1, %b0" : "=a" (value) : "Nd" (port));
00146   return value;
00147 }
00148 
00149 L4_INLINE l4_uint16_t
00150 l4util_in16(l4_uint16_t port)
00151 {
00152   l4_uint16_t value;
00153   asm volatile ("inw %w1, %w0" : "=a" (value) : "Nd" (port));
00154   return value;
00155 }
00156 
00157 L4_INLINE l4_uint32_t
00158 l4util_in32(l4_uint16_t port)
00159 {
00160   l4_uint32_t value;
00161   asm volatile ("inl %w1, %0" : "=a" (value) : "Nd" (port));
00162   return value;
00163 }
00164 
00165 L4_INLINE void
00166 l4util_ins8(l4_uint16_t port, l4_umword_t addr, l4_umword_t count)
00167 {
00168   l4_umword_t dummy1, dummy2;
00169   asm volatile ("rep insb" : "=D"(dummy1), "=c"(dummy2)
00170                            : "d" (port), "D" (addr), "c"(count)
00171                            : "memory");
00172 }
00173 
00174 L4_INLINE void
00175 l4util_ins16(l4_uint16_t port, l4_umword_t addr, l4_umword_t count)
00176 {
00177   l4_umword_t dummy1, dummy2;
00178   asm volatile ("rep insw" : "=D"(dummy1), "=c"(dummy2)
00179                            : "d" (port), "D" (addr), "c"(count)
00180                            : "memory");
00181 }
00182 
00183 L4_INLINE void
00184 l4util_ins32(l4_uint16_t port, l4_umword_t addr, l4_umword_t count)
00185 {
00186   l4_umword_t dummy1, dummy2;
00187   asm volatile ("rep insl" : "=D"(dummy1), "=c"(dummy2)
00188                            : "d" (port), "D" (addr), "c"(count)
00189                            : "memory");
00190 }
00191 
00192 L4_INLINE void
00193 l4util_out8(l4_uint8_t value, l4_uint16_t port)
00194 {
00195   asm volatile ("outb %b0, %w1" : : "a" (value), "Nd" (port));
00196 }
00197 
00198 L4_INLINE void
00199 l4util_out16(l4_uint16_t value, l4_uint16_t port)
00200 {
00201   asm volatile ("outw %w0, %w1" : : "a" (value), "Nd" (port));
00202 }
00203 
00204 L4_INLINE void
00205 l4util_out32(l4_uint32_t value, l4_uint16_t port)
00206 {
00207   asm volatile ("outl %0, %w1" : : "a" (value), "Nd" (port));
00208 }
00209 
00210 L4_INLINE void
00211 l4util_iodelay(void)
00212 {
00213   asm volatile ("outb %al,$0x80");
00214 }
00215 
00216 #endif
00217 

L4 Utilities, part of DROPS  © 2000-2003