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