xref: /plan9-contrib/sys/src/9/kw/fns.h (revision 22402af72e824b13a03306b380e882c0b67c2e73)
1154abd99SDavid du Colombier #define checkmmu(a, b)
2154abd99SDavid du Colombier #define countpagerefs(a, b)
3154abd99SDavid du Colombier 
4154abd99SDavid du Colombier #include "../port/portfns.h"
5154abd99SDavid du Colombier 
6154abd99SDavid du Colombier extern int led(int, int);
7154abd99SDavid du Colombier extern void ledexit(int);
8154abd99SDavid du Colombier extern void delay(int);
9154abd99SDavid du Colombier extern void _uartputs(char*, int);
10154abd99SDavid du Colombier extern int _uartprint(char*, ...);
11154abd99SDavid du Colombier extern void uartkirkwoodconsole(void);
12154abd99SDavid du Colombier extern void serialputs(char *, int);
13154abd99SDavid du Colombier extern void serialputc(int c);
14154abd99SDavid du Colombier 
15154abd99SDavid du Colombier #pragma	varargck argpos	_uartprint 1
16154abd99SDavid du Colombier 
17154abd99SDavid du Colombier extern void archreboot(void);
18154abd99SDavid du Colombier extern void archconfinit(void);
19154abd99SDavid du Colombier extern void archreset(void);
20154abd99SDavid du Colombier extern void barriers(void);
21154abd99SDavid du Colombier extern void cachedinv(void);
22154abd99SDavid du Colombier extern void cachedinvse(void*, int);
23154abd99SDavid du Colombier extern void cachedwb(void);
24154abd99SDavid du Colombier extern void cachedwbinv(void);
25154abd99SDavid du Colombier extern void cachedwbinvse(void*, int);
26154abd99SDavid du Colombier extern void cachedwbse(void*, int);
27154abd99SDavid du Colombier extern void cacheiinv(void);
28154abd99SDavid du Colombier extern void cacheuwbinv(void);
29154abd99SDavid du Colombier extern uintptr cankaddr(uintptr pa);
3056713243SDavid du Colombier extern void clockshutdown(void);
31154abd99SDavid du Colombier int	cmpswap(long*, long, long);
32154abd99SDavid du Colombier 
3328620197SDavid du Colombier #define coherence barriers
34154abd99SDavid du Colombier 
35154abd99SDavid du Colombier extern u32int controlget(void);
36154abd99SDavid du Colombier extern u32int cpctget(void);
37154abd99SDavid du Colombier extern u32int cpidget(void);
38154abd99SDavid du Colombier extern char *cputype2name(char *, int);
3933cde4a6SDavid du Colombier extern ulong cprd(int cp, int op1, int crn, int crm, int op2);
4033cde4a6SDavid du Colombier extern ulong cprdsc(int op1, int crn, int crm, int op2);
41154abd99SDavid du Colombier extern void cpuidprint(void);
4233cde4a6SDavid du Colombier extern void cpwr(int cp, int op1, int crn, int crm, int op2, ulong val);
4333cde4a6SDavid du Colombier extern void cpwrsc(int op1, int crn, int crm, int op2, ulong val);
44154abd99SDavid du Colombier #define cycles(ip) *(ip) = lcycles()
45154abd99SDavid du Colombier extern u32int dacget(void);
46154abd99SDavid du Colombier extern void dacput(u32int);
47154abd99SDavid du Colombier extern u32int farget(void);
48154abd99SDavid du Colombier extern u32int fsrget(void);
49154abd99SDavid du Colombier extern void l1cachesoff(void);
50154abd99SDavid du Colombier extern void l1cacheson(void);
5133cde4a6SDavid du Colombier extern void l2cachecfgoff(void);
52154abd99SDavid du Colombier extern void l2cachecfgon(void);
53154abd99SDavid du Colombier extern void l2cacheon(void);
5480f6c381SDavid du Colombier extern void l2cacheuinv(void);
5580f6c381SDavid du Colombier extern void l2cacheuinvse(void*, int);
5680f6c381SDavid du Colombier extern void l2cacheuwb(void);
5780f6c381SDavid du Colombier extern void l2cacheuwbinv(void);
5880f6c381SDavid du Colombier extern void l2cacheuwbinvse(void*, int);
5980f6c381SDavid du Colombier extern void l2cacheuwbse(void*, int);
60154abd99SDavid du Colombier extern void lastresortprint(char *buf, long bp);
61b649930dSDavid du Colombier extern void mmuidmap(uintptr phys, int mbs);
62154abd99SDavid du Colombier extern void mmuinvalidate(void);		/* 'mmu' or 'tlb'? */
63154abd99SDavid du Colombier extern void mmuinvalidateaddr(u32int);		/* 'mmu' or 'tlb'? */
64154abd99SDavid du Colombier extern u32int pidget(void);
65154abd99SDavid du Colombier extern void pidput(u32int);
66154abd99SDavid du Colombier void	procrestore(Proc *);
67154abd99SDavid du Colombier void	procsave(Proc*);
68154abd99SDavid du Colombier void	procsetup(Proc*);
69154abd99SDavid du Colombier extern void _reset(void);
70154abd99SDavid du Colombier extern void setr13(int, u32int*);
71fcbb35d1SDavid du Colombier extern void syscallfmt(int syscallno, ulong pc, va_list list);
72fcbb35d1SDavid du Colombier extern void sysretfmt(int syscallno, va_list list, long ret, uvlong start, uvlong stop);
737fdb4909SDavid du Colombier extern int tas(void *);
74154abd99SDavid du Colombier extern u32int ttbget(void);
75154abd99SDavid du Colombier extern void ttbput(u32int);
76154abd99SDavid du Colombier 
77154abd99SDavid du Colombier extern void intrclear(int sort, int v);
78154abd99SDavid du Colombier extern void intrenable(int sort, int v, void (*f)(Ureg*, void*), void *a, char *name);
79154abd99SDavid du Colombier extern void intrdisable(int sort, int v, void (*f)(Ureg*, void*), void* a, char *name);
80154abd99SDavid du Colombier extern void vectors(void);
81154abd99SDavid du Colombier extern void vtable(void);
82154abd99SDavid du Colombier 
83154abd99SDavid du Colombier /*
84154abd99SDavid du Colombier  * Things called in main.
85154abd99SDavid du Colombier  */
86154abd99SDavid du Colombier extern void clockinit(void);
87154abd99SDavid du Colombier extern void i8250console(void);
88154abd99SDavid du Colombier extern void links(void);
89154abd99SDavid du Colombier extern void mmuinit(void);
90154abd99SDavid du Colombier extern void touser(uintptr);
91154abd99SDavid du Colombier extern void trapinit(void);
92154abd99SDavid du Colombier 
93154abd99SDavid du Colombier extern int fpiarm(Ureg*);
94154abd99SDavid du Colombier extern int fpudevprocio(Proc*, void*, long, uintptr, int);
95154abd99SDavid du Colombier extern void fpuinit(void);
96154abd99SDavid du Colombier extern void fpunoted(void);
97154abd99SDavid du Colombier extern void fpunotify(Ureg*);
98154abd99SDavid du Colombier extern void fpuprocrestore(Proc*);
99154abd99SDavid du Colombier extern void fpuprocsave(Proc*);
100154abd99SDavid du Colombier extern void fpusysprocsetup(Proc*);
101154abd99SDavid du Colombier extern void fpusysrfork(Ureg*);
102b1c4f505SDavid du Colombier extern void fpusysrforkchild(Proc*, Ureg *, Proc*);
103154abd99SDavid du Colombier extern int fpuemu(Ureg*);
104154abd99SDavid du Colombier 
105154abd99SDavid du Colombier /*
106154abd99SDavid du Colombier  * Miscellaneous machine dependent stuff.
107154abd99SDavid du Colombier  */
108154abd99SDavid du Colombier extern char* getenv(char*, char*, int);
109154abd99SDavid du Colombier char*	getconf(char*);
110154abd99SDavid du Colombier uintptr mmukmap(uintptr, uintptr, usize);
111154abd99SDavid du Colombier uintptr mmukunmap(uintptr, uintptr, usize);
112154abd99SDavid du Colombier extern void* mmuuncache(void*, usize);
1130cc6832dSDavid du Colombier #define sdfree(p) free(p)
1140cc6832dSDavid du Colombier #define sdmalloc(n)	mallocalign(n, CACHELINESZ, 0, 0)
115154abd99SDavid du Colombier extern void* ucalloc(usize);
1167bb09086SDavid du Colombier extern void* ucallocalign(usize size, int align, int span);
11760d8b353SDavid du Colombier extern Block* ucallocb(int);
118154abd99SDavid du Colombier extern void ucfree(void*);
11960d8b353SDavid du Colombier extern void ucfreeb(Block*);
12060d8b353SDavid du Colombier extern Block* uciallocb(int);
121154abd99SDavid du Colombier 
122154abd99SDavid du Colombier /*
123154abd99SDavid du Colombier  * Things called from port.
124154abd99SDavid du Colombier  */
125154abd99SDavid du Colombier extern void delay(int);				/* only scheddump() */
126154abd99SDavid du Colombier extern int islo(void);
127154abd99SDavid du Colombier extern void microdelay(int);			/* only edf.c */
128154abd99SDavid du Colombier extern void idlehands(void);
129154abd99SDavid du Colombier extern void setkernur(Ureg*, Proc*);		/* only devproc.c */
130154abd99SDavid du Colombier extern void spldone(void);
131154abd99SDavid du Colombier extern int splfhi(void);
132154abd99SDavid du Colombier extern int splflo(void);
133154abd99SDavid du Colombier extern void sysprocsetup(Proc*);
134*fac6300fSDavid du Colombier extern void validalign(uintptr, unsigned);
135154abd99SDavid du Colombier 
136154abd99SDavid du Colombier /*
137154abd99SDavid du Colombier  * PCI
138154abd99SDavid du Colombier  */
139154abd99SDavid du Colombier ulong	pcibarsize(Pcidev*, int);
140154abd99SDavid du Colombier void	pcibussize(Pcidev*, ulong*, ulong*);
141154abd99SDavid du Colombier int	pcicfgr8(Pcidev*, int);
142154abd99SDavid du Colombier int	pcicfgr16(Pcidev*, int);
143154abd99SDavid du Colombier int	pcicfgr32(Pcidev*, int);
144154abd99SDavid du Colombier void	pcicfgw8(Pcidev*, int, int);
145154abd99SDavid du Colombier void	pcicfgw16(Pcidev*, int, int);
146154abd99SDavid du Colombier void	pcicfgw32(Pcidev*, int, int);
147154abd99SDavid du Colombier void	pciclrbme(Pcidev*);
148154abd99SDavid du Colombier void	pciclrioe(Pcidev*);
149154abd99SDavid du Colombier void	pciclrmwi(Pcidev*);
150154abd99SDavid du Colombier int	pcigetpms(Pcidev*);
151154abd99SDavid du Colombier void	pcihinv(Pcidev*);
152154abd99SDavid du Colombier uchar	pciipin(Pcidev*, uchar);
153154abd99SDavid du Colombier Pcidev* pcimatch(Pcidev*, int, int);
154154abd99SDavid du Colombier Pcidev* pcimatchtbdf(int);
155154abd99SDavid du Colombier void	pcireset(void);
156154abd99SDavid du Colombier int	pciscan(int, Pcidev**);
157154abd99SDavid du Colombier void	pcisetbme(Pcidev*);
158154abd99SDavid du Colombier void	pcisetioe(Pcidev*);
159154abd99SDavid du Colombier void	pcisetmwi(Pcidev*);
160154abd99SDavid du Colombier int	pcisetpms(Pcidev*, int);
161154abd99SDavid du Colombier int	cas32(void*, u32int, u32int);
162154abd99SDavid du Colombier 
163154abd99SDavid du Colombier #define CASU(p, e, n)	cas32((p), (u32int)(e), (u32int)(n))
164154abd99SDavid du Colombier #define CASV(p, e, n)	cas32((p), (u32int)(e), (u32int)(n))
165154abd99SDavid du Colombier #define CASW(addr, exp, new)	cas32((addr), (exp), (new))
166154abd99SDavid du Colombier 
167154abd99SDavid du Colombier extern void forkret(void);
168154abd99SDavid du Colombier extern int userureg(Ureg*);
169154abd99SDavid du Colombier void*	vmap(uintptr, usize);
170154abd99SDavid du Colombier void	vunmap(void*, usize);
171154abd99SDavid du Colombier 
172154abd99SDavid du Colombier extern void kexit(Ureg*);
173154abd99SDavid du Colombier 
174154abd99SDavid du Colombier #define	getpgcolor(a)	0
175154abd99SDavid du Colombier #define	kmapinval()
176154abd99SDavid du Colombier 
177154abd99SDavid du Colombier #define PTR2UINT(p)	((uintptr)(p))
178154abd99SDavid du Colombier #define UINT2PTR(i)	((void*)(i))
179154abd99SDavid du Colombier 
180154abd99SDavid du Colombier #define	waserror()	(up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1]))
181154abd99SDavid du Colombier 
182154abd99SDavid du Colombier /*
183a7a38e3eSDavid du Colombier  * this low-level printing stuff is ugly,
184a7a38e3eSDavid du Colombier  * but there appears to be no other way to
185a7a38e3eSDavid du Colombier  * print until after #t is populated.
186a7a38e3eSDavid du Colombier  */
187a7a38e3eSDavid du Colombier #define wave(c) { \
188a7a38e3eSDavid du Colombier 	coherence(); \
189a7a38e3eSDavid du Colombier 	while ((*(ulong *)(PHYSCONS+4*5) & (1<<5)) == 0) /* (x->lsr&LSRthre)==0? */ \
190a7a38e3eSDavid du Colombier 		; \
191a7a38e3eSDavid du Colombier 	*(ulong *)PHYSCONS = (c); \
192a7a38e3eSDavid du Colombier 	coherence(); \
193a7a38e3eSDavid du Colombier }
194a7a38e3eSDavid du Colombier 
195a7a38e3eSDavid du Colombier /*
196154abd99SDavid du Colombier  * These are not good enough.
197154abd99SDavid du Colombier  */
198154abd99SDavid du Colombier #define KADDR(pa)	UINT2PTR(KZERO|((uintptr)(pa)))
199154abd99SDavid du Colombier #define PADDR(va)	PTR2UINT(((uintptr)(va)) & ~KSEGM)
200ab6ce076SDavid du Colombier 
201ab6ce076SDavid du Colombier #define MASK(v)	((1UL << (v)) - 1)	/* mask `v' bits wide */
202