summaryrefslogtreecommitdiff
path: root/minix/lib/libddekit/src/resource.c
blob: 29965c3bc6572289057389be01c617c24617a098 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include "common.h"
#include <ddekit/panic.h>
#include <ddekit/resources.h>
#include <ddekit/pgtab.h>

#include <minix/vm.h>

#ifdef DDEBUG_LEVEL_RESOURCE
#undef DDEBUG
#define DDEBUG DDEBUG_LEVEL_RESOURCE
#endif

#include "debug.h"
#include "util.h"

/****************************************************************************/
/*      ddekit_release_dma                                                  */
/****************************************************************************/
int ddekit_request_dma(int nr) { 
	WARN_UNIMPL;
	/* do we stil use isa dma ? imho no.*/ 
	return -1;
}

/****************************************************************************/
/*      ddekit_request_dma                                                  */
/****************************************************************************/
int ddekit_release_dma(int nr) { 
	WARN_UNIMPL;
	/* do we stil use isa dma ? imho no.*/ 
	return -1;
}

/* 
 * In minix we don't need to explicitly request IO-ports, ...
 */
/****************************************************************************/
/*      ddekit_release/request_io                                           */
/****************************************************************************/
int ddekit_request_io (ddekit_addr_t start, ddekit_addr_t count) {
	return 0;	
}
int ddekit_release_io (ddekit_addr_t start, ddekit_addr_t count) { 
	return 0;
}

/****************************************************************************/
/*      ddekit_request_mem                                                  */
/****************************************************************************/
int ddekit_request_mem
(ddekit_addr_t start, ddekit_addr_t size, ddekit_addr_t *vaddr) {
	
	*vaddr = (ddekit_addr_t) vm_map_phys(SELF, (void *)start, size);
	
	DDEBUG_MSG_VERBOSE("start: %x, size: %d, virt: %x", start, size, *vaddr);
	
	if( *vaddr == (ddekit_addr_t) NULL) {
		ddekit_panic("unable to map IO memory from %p of size %d",
		    start, size);
	}
	return (vaddr==NULL); 
}

/****************************************************************************/
/*      ddekit_release_mem                                                  */
/****************************************************************************/
int ddekit_release_mem(ddekit_addr_t start, ddekit_addr_t size) 
{
	return	vm_unmap_phys(SELF,(void *) start, size );
}

/****************************************************************************/
/*      ddekit_inb                                                          */
/****************************************************************************/
unsigned char ddekit_inb(ddekit_addr_t port) { 
	u32_t ret;
	if (sys_inb(port, &ret)) {
		ddekit_panic("sys_inb failed.");
	}
	DDEBUG_MSG_VERBOSE("read port %x: %x", port, ret);
	return (char) ret;
}

/****************************************************************************/
/*      ddekit_inw                                                          */
/****************************************************************************/
unsigned short ddekit_inw(ddekit_addr_t port) { 
	u32_t ret;
	if (sys_inw(port, &ret)) {
		ddekit_panic("sys_inw failed.");
	}
	DDEBUG_MSG_VERBOSE("read port %x: %x", port, ret);
	return (short) ret;
}

/****************************************************************************/
/*      ddekit_inl                                                          */
/****************************************************************************/
unsigned long ddekit_inl(ddekit_addr_t port){ 
	u32_t ret;
	if (sys_inl(port, &ret)) { 
		ddekit_panic("sys_outl failed.");
	}
	DDEBUG_MSG_VERBOSE("read port %x: %x", port, ret);
	return ret;
}

/****************************************************************************/
/*      ddekit_outb                                                         */
/****************************************************************************/
void ddekit_outb(ddekit_addr_t port, unsigned char val) { 
	if (sys_outb(port,val)) {
		ddekit_panic("sys_outb failed.");
	}
	DDEBUG_MSG_VERBOSE("write port %x: %x", port, val);
}

/****************************************************************************/
/*      ddekit_outw                                                         */
/****************************************************************************/
void ddekit_outw(ddekit_addr_t port, unsigned short val) {
	if (sys_outw(port,val)) {
		ddekit_panic("sys_outw failed.");
	}
	DDEBUG_MSG_VERBOSE("write port %x: %x", port, val);
}

/****************************************************************************/
/*      ddekit_outl                                                         */
/****************************************************************************/
void ddekit_outl(ddekit_addr_t port, unsigned long val) { 
	if (sys_outl(port,val)) {
		ddekit_panic("sys_outl failed.");
	}
	DDEBUG_MSG_VERBOSE("write port %x: %x", port, val);
}