Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#define checkmmu(a, b)
2
#define countpagerefs(a, b)
3
 
4
#include "../port/portfns.h"
5
 
6
extern int led(int, int);
7
extern void ledexit(int);
8
extern void delay(int);
9
extern void _uartputs(char*, int);
10
extern int _uartprint(char*, ...);
11
extern void uartkirkwoodconsole(void);
12
extern void serialputs(char *, int);
13
extern void serialputc(int c);
14
 
15
#pragma	varargck argpos	_uartprint 1
16
 
17
extern void archreboot(void);
18
extern void archconfinit(void);
19
extern void archreset(void);
20
extern void barriers(void);
21
extern void cachedinv(void);
22
extern void cachedinvse(void*, int);
23
extern void cachedwb(void);
24
extern void cachedwbinv(void);
25
extern void cachedwbinvse(void*, int);
26
extern void cachedwbse(void*, int);
27
extern void cacheiinv(void);
28
extern void cacheuwbinv(void);
29
extern uintptr cankaddr(uintptr pa);
30
extern void clockshutdown(void);
31
extern int clz(ulong);
32
int	cmpswap(long*, long, long);
33
 
34
#define coherence barriers
35
 
36
extern u32int controlget(void);
37
extern u32int cpctget(void);
38
extern u32int cpidget(void);
39
extern char *cputype2name(char *, int);
40
extern ulong cprd(int cp, int op1, int crn, int crm, int op2);
41
extern ulong cprdsc(int op1, int crn, int crm, int op2);
42
extern void cpuidprint(void);
43
extern void cpwr(int cp, int op1, int crn, int crm, int op2, ulong val);
44
extern void cpwrsc(int op1, int crn, int crm, int op2, ulong val);
45
#define cycles(ip) *(ip) = lcycles()
46
extern u32int dacget(void);
47
extern void dacput(u32int);
48
extern u32int farget(void);
49
extern u32int fsrget(void);
50
extern int ispow2(uvlong);
51
extern void l1cachesoff(void);
52
extern void l1cacheson(void);
53
extern void l2cachecfgoff(void);
54
extern void l2cachecfgon(void);
55
extern void l2cacheon(void);
56
extern void l2cacheuinv(void);
57
extern void l2cacheuinvse(void*, int);
58
extern void l2cacheuwb(void);
59
extern void l2cacheuwbinv(void);
60
extern void l2cacheuwbinvse(void*, int);
61
extern void l2cacheuwbse(void*, int);
62
extern void lastresortprint(char *buf, long bp);
63
extern int log2(ulong);
64
extern void mmuidmap(uintptr phys, int mbs);
65
extern void mmuinvalidate(void);		/* 'mmu' or 'tlb'? */
66
extern void mmuinvalidateaddr(u32int);		/* 'mmu' or 'tlb'? */
67
extern u32int pidget(void);
68
extern void pidput(u32int);
69
void	procrestore(Proc *);
70
void	procsave(Proc*);
71
void	procsetup(Proc*);
72
extern void _reset(void);
73
extern void setr13(int, u32int*);
74
extern void syscallfmt(int syscallno, ulong pc, va_list list);
75
extern void sysretfmt(int syscallno, va_list list, long ret, uvlong start, uvlong stop);
76
extern int tas(void *);
77
extern u32int ttbget(void);
78
extern void ttbput(u32int);
79
 
80
extern void intrclear(int sort, int v);
81
extern void intrenable(int sort, int v, void (*f)(Ureg*, void*), void *a, char *name);
82
extern void intrdisable(int sort, int v, void (*f)(Ureg*, void*), void* a, char *name);
83
extern void vectors(void);
84
extern void vtable(void);
85
 
86
/*
87
 * Things called in main.
88
 */
89
extern void clockinit(void);
90
extern void i8250console(void);
91
extern void links(void);
92
extern void mmuinit(void);
93
extern void touser(uintptr);
94
extern void trapinit(void);
95
 
96
extern int fpiarm(Ureg*);
97
extern int fpudevprocio(Proc*, void*, long, uintptr, int);
98
extern void fpuinit(void);
99
extern void fpunoted(void);
100
extern void fpunotify(Ureg*);
101
extern void fpuprocrestore(Proc*);
102
extern void fpuprocsave(Proc*);
103
extern void fpusysprocsetup(Proc*);
104
extern void fpusysrfork(Ureg*);
105
extern void fpusysrforkchild(Proc*, Ureg *, Proc*);
106
extern int fpuemu(Ureg*);
107
 
108
/*
109
 * Miscellaneous machine dependent stuff.
110
 */
111
extern char* getenv(char*, char*, int);
112
char*	getconf(char*);
113
uintptr mmukmap(uintptr, uintptr, usize);
114
uintptr mmukunmap(uintptr, uintptr, usize);
115
extern void* mmuuncache(void*, usize);
116
#define sdfree(p) free(p)
117
#define sdmalloc(n)	mallocalign(n, CACHELINESZ, 0, 0)
118
extern void* ucalloc(usize);
119
extern void* ucallocalign(usize size, int align, int span);
120
extern Block* ucallocb(int);
121
extern void ucfree(void*);
122
extern void ucfreeb(Block*);
123
extern Block* uciallocb(int);
124
 
125
/*
126
 * Things called from port.
127
 */
128
extern void delay(int);				/* only scheddump() */
129
extern int islo(void);
130
extern void microdelay(int);			/* only edf.c */
131
extern void idlehands(void);
132
extern void setkernur(Ureg*, Proc*);		/* only devproc.c */
133
extern void spldone(void);
134
extern int splfhi(void);
135
extern int splflo(void);
136
extern void sysprocsetup(Proc*);
137
extern void validalign(uintptr, unsigned);
138
 
139
/*
140
 * PCI
141
 */
142
ulong	pcibarsize(Pcidev*, int);
143
void	pcibussize(Pcidev*, ulong*, ulong*);
144
int	pcicfgr8(Pcidev*, int);
145
int	pcicfgr16(Pcidev*, int);
146
int	pcicfgr32(Pcidev*, int);
147
void	pcicfgw8(Pcidev*, int, int);
148
void	pcicfgw16(Pcidev*, int, int);
149
void	pcicfgw32(Pcidev*, int, int);
150
void	pciclrbme(Pcidev*);
151
void	pciclrioe(Pcidev*);
152
void	pciclrmwi(Pcidev*);
153
int	pcigetpms(Pcidev*);
154
void	pcihinv(Pcidev*);
155
uchar	pciipin(Pcidev*, uchar);
156
Pcidev* pcimatch(Pcidev*, int, int);
157
Pcidev* pcimatchtbdf(int);
158
void	pcireset(void);
159
int	pciscan(int, Pcidev**);
160
void	pcisetbme(Pcidev*);
161
void	pcisetioe(Pcidev*);
162
void	pcisetmwi(Pcidev*);
163
int	pcisetpms(Pcidev*, int);
164
int	cas32(void*, u32int, u32int);
165
 
166
#define CASU(p, e, n)	cas32((p), (u32int)(e), (u32int)(n))
167
#define CASV(p, e, n)	cas32((p), (u32int)(e), (u32int)(n))
168
#define CASW(addr, exp, new)	cas32((addr), (exp), (new))
169
 
170
extern void forkret(void);
171
extern int userureg(Ureg*);
172
void*	vmap(uintptr, usize);
173
void	vunmap(void*, usize);
174
 
175
extern void kexit(Ureg*);
176
 
177
#define	getpgcolor(a)	0
178
#define	kmapinval()
179
 
180
#define PTR2UINT(p)	((uintptr)(p))
181
#define UINT2PTR(i)	((void*)(i))
182
 
183
#define	waserror()	(up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1]))
184
 
185
/*
186
 * this low-level printing stuff is ugly,
187
 * but there appears to be no other way to
188
 * print until after #t is populated.
189
 */
190
#define wave(c) { \
191
	coherence(); \
192
	while ((*(ulong *)(PHYSCONS+4*5) & (1<<5)) == 0) /* (x->lsr&LSRthre)==0? */ \
193
		; \
194
	*(ulong *)PHYSCONS = (c); \
195
	coherence(); \
196
}
197
 
198
/*
199
 * These are not good enough.
200
 */
201
#define KADDR(pa)	UINT2PTR(KZERO|((uintptr)(pa)))
202
#define PADDR(va)	PTR2UINT(((uintptr)(va)) & ~KSEGM)
203
 
204
#define MASK(v)	((1UL << (v)) - 1)	/* mask `v' bits wide */