mirror of
git://git.musl-libc.org/musl
synced 2024-12-22 14:43:04 +00:00
0004ea613a
apparently some other archs have sys/io.h and should not break just because they don't have the x86 port io functions. provide a blank bits/io.h everywhere for now.
78 lines
2.0 KiB
C
78 lines
2.0 KiB
C
static __inline void outb(unsigned char __val, unsigned short __port)
|
|
{
|
|
__asm__ volatile ("outb %0,%1" : : "a" (__val), "dN" (__port));
|
|
}
|
|
|
|
static __inline void outw(unsigned short __val, unsigned short __port)
|
|
{
|
|
__asm__ volatile ("outw %0,%1" : : "a" (__val), "dN" (__port));
|
|
}
|
|
|
|
static __inline void outl(unsigned int __val, unsigned short __port)
|
|
{
|
|
__asm__ volatile ("outl %0,%1" : : "a" (__val), "dN" (__port));
|
|
}
|
|
|
|
static __inline unsigned char inb(unsigned short __port)
|
|
{
|
|
unsigned char __val;
|
|
__asm__ volatile ("inb %1,%0" : "=a" (__val) : "dN" (__port));
|
|
return __val;
|
|
}
|
|
|
|
static __inline unsigned short inw(unsigned short __port)
|
|
{
|
|
unsigned short __val;
|
|
__asm__ volatile ("inw %1,%0" : "=a" (__val) : "dN" (__port));
|
|
return __val;
|
|
}
|
|
|
|
static __inline unsigned int inl(unsigned short __port)
|
|
{
|
|
unsigned int __val;
|
|
__asm__ volatile ("inl %1,%0" : "=a" (__val) : "dN" (__port));
|
|
return __val;
|
|
}
|
|
|
|
static __inline void outsb(unsigned short __port, const void *__buf, unsigned long __n)
|
|
{
|
|
__asm__ volatile ("cld; rep; outsb"
|
|
: "+S" (__buf), "+c" (__n)
|
|
: "d" (__port));
|
|
}
|
|
|
|
static __inline void outsw(unsigned short __port, const void *__buf, unsigned long __n)
|
|
{
|
|
__asm__ volatile ("cld; rep; outsw"
|
|
: "+S" (__buf), "+c" (__n)
|
|
: "d" (__port));
|
|
}
|
|
|
|
static __inline void outsl(unsigned short __port, const void *__buf, unsigned long __n)
|
|
{
|
|
__asm__ volatile ("cld; rep; outsl"
|
|
: "+S" (__buf), "+c"(__n)
|
|
: "d" (__port));
|
|
}
|
|
|
|
static __inline void insb(unsigned short __port, void *__buf, unsigned long __n)
|
|
{
|
|
__asm__ volatile ("cld; rep; insb"
|
|
: "+D" (__buf), "+c" (__n)
|
|
: "d" (__port));
|
|
}
|
|
|
|
static __inline void insw(unsigned short __port, void *__buf, unsigned long __n)
|
|
{
|
|
__asm__ volatile ("cld; rep; insw"
|
|
: "+D" (__buf), "+c" (__n)
|
|
: "d" (__port));
|
|
}
|
|
|
|
static __inline void insl(unsigned short __port, void *__buf, unsigned long __n)
|
|
{
|
|
__asm__ volatile ("cld; rep; insl"
|
|
: "+D" (__buf), "+c" (__n)
|
|
: "d" (__port));
|
|
}
|