1*37e23b1cSJia-Ju Bai #ifndef _IO_H
2*37e23b1cSJia-Ju Bai #define _IO_H
3*37e23b1cSJia-Ju Bai
4*37e23b1cSJia-Ju Bai #include <sys/types.h>
5*37e23b1cSJia-Ju Bai #include <minix/syslib.h>
6*37e23b1cSJia-Ju Bai #include "cmi8738.h"
7*37e23b1cSJia-Ju Bai
8*37e23b1cSJia-Ju Bai /* I/O function */
my_inb(u32_t port)9*37e23b1cSJia-Ju Bai static u8_t my_inb(u32_t port) {
10*37e23b1cSJia-Ju Bai u32_t value;
11*37e23b1cSJia-Ju Bai int r;
12*37e23b1cSJia-Ju Bai #ifdef DMA_BASE_IOMAP
13*37e23b1cSJia-Ju Bai value = *(volatile u8_t *)(port);
14*37e23b1cSJia-Ju Bai #else
15*37e23b1cSJia-Ju Bai if ((r = sys_inb(port, &value)) != OK)
16*37e23b1cSJia-Ju Bai printf("SDR: sys_inb failed: %d\n", r);
17*37e23b1cSJia-Ju Bai #endif
18*37e23b1cSJia-Ju Bai return (u8_t)value;
19*37e23b1cSJia-Ju Bai }
20*37e23b1cSJia-Ju Bai #define sdr_in8(port, offset) (my_inb((port) + (offset)))
21*37e23b1cSJia-Ju Bai
my_inw(u32_t port)22*37e23b1cSJia-Ju Bai static u16_t my_inw(u32_t port) {
23*37e23b1cSJia-Ju Bai u32_t value;
24*37e23b1cSJia-Ju Bai int r;
25*37e23b1cSJia-Ju Bai #ifdef DMA_BASE_IOMAP
26*37e23b1cSJia-Ju Bai value = *(volatile u16_t *)(port);
27*37e23b1cSJia-Ju Bai #else
28*37e23b1cSJia-Ju Bai if ((r = sys_inw(port, &value)) != OK)
29*37e23b1cSJia-Ju Bai printf("SDR: sys_inw failed: %d\n", r);
30*37e23b1cSJia-Ju Bai #endif
31*37e23b1cSJia-Ju Bai return (u16_t)value;
32*37e23b1cSJia-Ju Bai }
33*37e23b1cSJia-Ju Bai #define sdr_in16(port, offset) (my_inw((port) + (offset)))
34*37e23b1cSJia-Ju Bai
my_inl(u32_t port)35*37e23b1cSJia-Ju Bai static u32_t my_inl(u32_t port) {
36*37e23b1cSJia-Ju Bai u32_t value;
37*37e23b1cSJia-Ju Bai int r;
38*37e23b1cSJia-Ju Bai #ifdef DMA_BASE_IOMAP
39*37e23b1cSJia-Ju Bai value = *(volatile u32_t *)(port);
40*37e23b1cSJia-Ju Bai #else
41*37e23b1cSJia-Ju Bai if ((r = sys_inl(port, &value)) != OK)
42*37e23b1cSJia-Ju Bai printf("SDR: sys_inl failed: %d\n", r);
43*37e23b1cSJia-Ju Bai #endif
44*37e23b1cSJia-Ju Bai return value;
45*37e23b1cSJia-Ju Bai }
46*37e23b1cSJia-Ju Bai #define sdr_in32(port, offset) (my_inl((port) + (offset)))
47*37e23b1cSJia-Ju Bai
my_outb(u32_t port,u32_t value)48*37e23b1cSJia-Ju Bai static void my_outb(u32_t port, u32_t value) {
49*37e23b1cSJia-Ju Bai int r;
50*37e23b1cSJia-Ju Bai #ifdef DMA_BASE_IOMAP
51*37e23b1cSJia-Ju Bai *(volatile u8_t *)(port) = value;
52*37e23b1cSJia-Ju Bai #else
53*37e23b1cSJia-Ju Bai if ((r = sys_outb(port, (u8_t)value)) != OK)
54*37e23b1cSJia-Ju Bai printf("SDR: sys_outb failed: %d\n", r);
55*37e23b1cSJia-Ju Bai #endif
56*37e23b1cSJia-Ju Bai }
57*37e23b1cSJia-Ju Bai #define sdr_out8(port, offset, value) \
58*37e23b1cSJia-Ju Bai (my_outb(((port) + (offset)), (value)))
59*37e23b1cSJia-Ju Bai
my_outw(u32_t port,u32_t value)60*37e23b1cSJia-Ju Bai static void my_outw(u32_t port, u32_t value) {
61*37e23b1cSJia-Ju Bai int r;
62*37e23b1cSJia-Ju Bai #ifdef DMA_BASE_IOMAP
63*37e23b1cSJia-Ju Bai *(volatile u16_t *)(port) = value;
64*37e23b1cSJia-Ju Bai #else
65*37e23b1cSJia-Ju Bai if ((r = sys_outw(port, (u16_t)value)) != OK)
66*37e23b1cSJia-Ju Bai printf("SDR: sys_outw failed: %d\n", r);
67*37e23b1cSJia-Ju Bai #endif
68*37e23b1cSJia-Ju Bai }
69*37e23b1cSJia-Ju Bai #define sdr_out16(port, offset, value) \
70*37e23b1cSJia-Ju Bai (my_outw(((port) + (offset)), (value)))
71*37e23b1cSJia-Ju Bai
my_outl(u32_t port,u32_t value)72*37e23b1cSJia-Ju Bai static void my_outl(u32_t port, u32_t value) {
73*37e23b1cSJia-Ju Bai int r;
74*37e23b1cSJia-Ju Bai #ifdef DMA_BASE_IOMAP
75*37e23b1cSJia-Ju Bai *(volatile u32_t *)(port) = value;
76*37e23b1cSJia-Ju Bai #else
77*37e23b1cSJia-Ju Bai if ((r = sys_outl(port, value)) != OK)
78*37e23b1cSJia-Ju Bai printf("SDR: sys_outl failed: %d\n", r);
79*37e23b1cSJia-Ju Bai #endif
80*37e23b1cSJia-Ju Bai }
81*37e23b1cSJia-Ju Bai #define sdr_out32(port, offset, value) \
82*37e23b1cSJia-Ju Bai (my_outl(((port) + (offset)), (value)))
83*37e23b1cSJia-Ju Bai
84*37e23b1cSJia-Ju Bai #endif
85