fns.h 5.7 KB

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