Subversion Repositories HelenOS

Rev

Rev 3386 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3386 Rev 4153
Line 31... Line 31...
31
 */
31
 */
32
 
32
 
33
#ifndef LIBC_ia32_DDI_H_
33
#ifndef LIBC_ia32_DDI_H_
34
#define LIBC_ia32_DDI_H_
34
#define LIBC_ia32_DDI_H_
35
 
35
 
36
static inline void outb(int16_t port, uint8_t b)
36
#include <sys/types.h>
37
{
-
 
38
    asm volatile ("outb %0, %1\n" :: "a" (b), "d" (port));
37
#include <libarch/types.h>
39
}
-
 
40
 
38
 
-
 
39
#define IO_SPACE_BOUNDARY   ((void *) (64 * 1024))
-
 
40
 
41
static inline void outw(int16_t port, int16_t w)
41
static inline uint8_t pio_read_8(ioport8_t *port)
42
{
42
{
-
 
43
    uint8_t val;
-
 
44
   
-
 
45
    asm volatile (
-
 
46
        "inb %w[port], %b[val]\n"
-
 
47
        : [val] "=a" (val)
43
    asm volatile ("outw %0, %1\n" :: "a" (w), "d" (port));
48
        : [port] "d" (port)
-
 
49
    );
-
 
50
   
-
 
51
    return val;
44
}
52
}
45
 
53
 
46
static inline void outl(int16_t port, uint32_t l)
54
static inline uint16_t pio_read_16(ioport16_t *port)
47
{
55
{
-
 
56
    uint16_t val;
-
 
57
   
-
 
58
    asm volatile (
-
 
59
        "inw %w[port], %w[val]\n"
-
 
60
        : [val] "=a" (val)
48
    asm volatile ("outl %0, %1\n" :: "a" (l), "d" (port));
61
        : [port] "d" (port)
-
 
62
    );
-
 
63
   
-
 
64
    return val;
49
}
65
}
50
 
66
 
51
static inline uint8_t inb(int16_t port)
67
static inline uint32_t pio_read_32(ioport32_t *port)
52
{
68
{
53
    uint8_t val;
69
    uint32_t val;
54
 
70
   
-
 
71
    asm volatile (
-
 
72
        "inl %w[port], %[val]\n"
55
    asm volatile ("inb %1, %0 \n" : "=a" (val) : "d"(port));
73
        : [val] "=a" (val)
-
 
74
        : [port] "d" (port)
-
 
75
    );
-
 
76
   
56
    return val;
77
    return val;
57
}
78
}
58
 
79
 
59
static inline int16_t inw(int16_t port)
80
static inline void pio_write_8(ioport8_t *port, uint8_t val)
60
{
81
{
61
    int16_t val;
82
    asm volatile (
62
 
-
 
-
 
83
        "outb %b[val], %w[port]\n"
63
    asm volatile ("inw %1, %0 \n" : "=a" (val) : "d"(port));
84
        :: [val] "a" (val), [port] "d" (port)
64
    return val;
85
    );
65
}
86
}
66
 
87
 
67
static inline uint32_t inl(int16_t port)
88
static inline void pio_write_16(ioport16_t *port, uint16_t val)
68
{
89
{
69
    uint32_t val;
90
    asm volatile (
-
 
91
        "outw %w[val], %w[port]\n"
-
 
92
        :: [val] "a" (val), [port] "d" (port)
-
 
93
    );
-
 
94
}
70
 
95
 
71
    asm volatile ("inl %1, %0 \n" : "=a" (val) : "d"(port));
96
static inline void pio_write_32(ioport32_t *port, uint32_t val)
-
 
97
{
72
    return val;
98
    asm volatile (
-
 
99
        "outl %[val], %w[port]\n"
-
 
100
        :: [val] "a" (val), [port] "d" (port)
-
 
101
    );
73
}
102
}
74
 
103
 
75
#endif
104
#endif