xref: /plan9/sys/src/9/kw/fns.h (revision ff579efb6d9c16f03df7f0fbdbd7810dcb61813e)
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 int	cmpswap(long*, long, long);
32 
33 /*
34  * cachedwb seems like overkill, but just calling barriers isn't enough.
35  */
36 #define coherence cachedwb
37 // #define coherence barriers
38 
39 extern u32int controlget(void);
40 extern u32int cpctget(void);
41 extern u32int cpidget(void);
42 extern char *cputype2name(char *, int);
43 extern void cpuidprint(void);
44 #define cycles(ip) *(ip) = lcycles()
45 extern u32int dacget(void);
46 extern void dacput(u32int);
47 extern void dcflushall(void);
48 extern u32int farget(void);
49 extern u32int fsrget(void);
50 extern void icflushall(void);
51 extern void l1cachesoff(void);
52 extern void l1cacheson(void);
53 extern void l2cachecfgon(void);
54 extern void l2cacheon(void);
55 extern void lastresortprint(char *buf, long bp);
56 extern void mmuinvalidate(void);		/* 'mmu' or 'tlb'? */
57 extern void mmuinvalidateaddr(u32int);		/* 'mmu' or 'tlb'? */
58 extern u32int pidget(void);
59 extern void pidput(u32int);
60 void	procrestore(Proc *);
61 void	procsave(Proc*);
62 void	procsetup(Proc*);
63 extern void _reset(void);
64 extern void setr13(int, u32int*);
65 #define tas _tas
66 extern int _tas(void *);
67 extern u32int ttbget(void);
68 extern void ttbput(u32int);
69 
70 Dev*		devtabget(int, int);
71 void		devtabinit(void);
72 void		devtabreset(void);
73 long		devtabread(Chan*, void*, long, vlong);
74 void		devtabshutdown(void);
75 
76 extern void intrclear(int sort, int v);
77 extern void intrenable(int sort, int v, void (*f)(Ureg*, void*), void *a, char *name);
78 extern void intrdisable(int sort, int v, void (*f)(Ureg*, void*), void* a, char *name);
79 extern void vectors(void);
80 extern void vtable(void);
81 
82 /*
83  * Things called in main.
84  */
85 extern void clockinit(void);
86 extern void i8250console(void);
87 extern void links(void);
88 extern void mmuinit(void);
89 extern void touser(uintptr);
90 extern void trapinit(void);
91 
92 extern int fpiarm(Ureg*);
93 extern int fpudevprocio(Proc*, void*, long, uintptr, int);
94 extern void fpuinit(void);
95 extern void fpunoted(void);
96 extern void fpunotify(Ureg*);
97 extern void fpuprocrestore(Proc*);
98 extern void fpuprocsave(Proc*);
99 extern void fpusysprocsetup(Proc*);
100 extern void fpusysrfork(Ureg*);
101 extern void fpusysrforkchild(Proc*, Proc*);
102 extern int fpuemu(Ureg*);
103 
104 /*
105  * Miscellaneous machine dependent stuff.
106  */
107 extern char* getenv(char*, char*, int);
108 char*	getconf(char*);
109 uintptr mmukmap(uintptr, uintptr, usize);
110 uintptr mmukunmap(uintptr, uintptr, usize);
111 extern void* mmuuncache(void*, usize);
112 extern void* ucalloc(usize);
113 extern void ucfree(void*);
114 
115 /*
116  * Things called from port.
117  */
118 extern void delay(int);				/* only scheddump() */
119 extern int islo(void);
120 extern void microdelay(int);			/* only edf.c */
121 extern void evenaddr(uintptr);
122 extern void idlehands(void);
123 extern void setkernur(Ureg*, Proc*);		/* only devproc.c */
124 extern void spldone(void);
125 extern int splfhi(void);
126 extern int splflo(void);
127 extern void sysprocsetup(Proc*);
128 
129 /*
130  * PCI
131  */
132 ulong	pcibarsize(Pcidev*, int);
133 void	pcibussize(Pcidev*, ulong*, ulong*);
134 int	pcicfgr8(Pcidev*, int);
135 int	pcicfgr16(Pcidev*, int);
136 int	pcicfgr32(Pcidev*, int);
137 void	pcicfgw8(Pcidev*, int, int);
138 void	pcicfgw16(Pcidev*, int, int);
139 void	pcicfgw32(Pcidev*, int, int);
140 void	pciclrbme(Pcidev*);
141 void	pciclrioe(Pcidev*);
142 void	pciclrmwi(Pcidev*);
143 int	pcigetpms(Pcidev*);
144 void	pcihinv(Pcidev*);
145 uchar	pciipin(Pcidev*, uchar);
146 Pcidev* pcimatch(Pcidev*, int, int);
147 Pcidev* pcimatchtbdf(int);
148 void	pcireset(void);
149 int	pciscan(int, Pcidev**);
150 void	pcisetbme(Pcidev*);
151 void	pcisetioe(Pcidev*);
152 void	pcisetmwi(Pcidev*);
153 int	pcisetpms(Pcidev*, int);
154 int	cas32(void*, u32int, u32int);
155 int	tas32(void*);
156 
157 #define CASU(p, e, n)	cas32((p), (u32int)(e), (u32int)(n))
158 #define CASV(p, e, n)	cas32((p), (u32int)(e), (u32int)(n))
159 #define CASW(addr, exp, new)	cas32((addr), (exp), (new))
160 #define TAS(addr)	tas32(addr)
161 
162 extern void forkret(void);
163 extern int userureg(Ureg*);
164 void*	vmap(uintptr, usize);
165 void	vunmap(void*, usize);
166 
167 extern void kexit(Ureg*);
168 
169 #define	getpgcolor(a)	0
170 #define	kmapinval()
171 
172 #define PTR2UINT(p)	((uintptr)(p))
173 #define UINT2PTR(i)	((void*)(i))
174 
175 #define	waserror()	(up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1]))
176 
177 /*
178  * These are not good enough.
179  */
180 #define KADDR(pa)	UINT2PTR(KZERO|((uintptr)(pa)))
181 #define PADDR(va)	PTR2UINT(((uintptr)(va)) & ~KSEGM)
182