Subversion Repositories HelenOS

Rev

Rev 4344 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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