fns.h 4.8 KB

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