diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2022-05-08 16:50:29 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2022-05-08 16:50:29 +0000 |
commit | fff070f2cbb01b7c0879e9dcb13ee4e3ed2497f0 (patch) | |
tree | 44899a9ae6e8143740a4b02e7d50a3b6db768008 /sys/src/9/imx8/fns.h | |
parent | 9126ee3eea90d639f4e877c01400248581d10f65 (diff) |
imx8: add work in progress i.MX8MQ kernel for the mntreform2 laptop
This is a work in progress port to the mntreform2 laptop.
Working so far:
- mmu (same as raspberry pi 3b+)
- arm generic timer
- gicv3
- uart1
- enet
With access to the uart, one can netboot this kernel in u-boot
using the following commands:
> dhcp
> bootm
Diffstat (limited to 'sys/src/9/imx8/fns.h')
-rw-r--r-- | sys/src/9/imx8/fns.h | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/sys/src/9/imx8/fns.h b/sys/src/9/imx8/fns.h new file mode 100644 index 000000000..35ea996bb --- /dev/null +++ b/sys/src/9/imx8/fns.h @@ -0,0 +1,139 @@ +#include "../port/portfns.h" + +/* l.s */ +extern void sev(void); +extern int tas(void *); +extern int cmpswap(long*, long, long); +extern void coherence(void); +extern void idlehands(void); +extern uvlong vcycles(void); +#define cycles(ip) *(ip) = vcycles() +extern int splfhi(void); +extern void splflo(void); +extern void touser(uintptr sp); +extern void forkret(void); +extern void noteret(void); +extern void returnto(void*); +extern void fpsaveregs(void*); +extern void fploadregs(void*); + +extern void setttbr(uintptr pa); +extern uintptr getfar(void); + +extern void flushasidva(uintptr asidva); +extern void tlbivae1is(uintptr asidva); + +extern void flushasidvall(uintptr asidva); +extern void tlbivale1is(uintptr asidva); + +extern void flushasid(uintptr asid); +extern void tlbiaside1is(uintptr asid); + +extern void flushtlb(void); +extern void tlbivmalle1(void); + +extern void flushlocaltlb(void); +extern void tlbivmalle1(void); + +/* cache */ +extern ulong cachesize(int level); + +extern void cacheiinvse(void*, int); +extern void cacheuwbinv(void); +extern void cacheiinv(void); + +extern void cachedwbse(void*, int); +extern void cacheduwbse(void*, int); +extern void cachedinvse(void*, int); +extern void cachedwbinvse(void*, int); + +extern void cachedwb(void); +extern void cachedinv(void); +extern void cachedwbinv(void); + +extern void l2cacheuwb(void); +extern void l2cacheuinv(void); +extern void l2cacheuwbinv(void); + +/* mmu */ +#define getpgcolor(a) 0 +extern uintptr paddr(void*); +#define PADDR(a) paddr((void*)(a)) +extern uintptr cankaddr(uintptr); +extern void* kaddr(uintptr); +#define KADDR(a) kaddr(a) +extern void kmapinval(void); +#define VA(k) ((uintptr)(k)) +extern KMap *kmap(Page*); +extern void kunmap(KMap*); +extern uintptr mmukmap(uintptr, uintptr, usize); +extern void* vmap(uvlong, vlong); +extern void vunmap(void*, vlong); + +extern void mmu0init(uintptr*); +extern void mmu0clear(uintptr*); +extern void mmuidmap(uintptr*); +extern void mmu1init(void); +extern void meminit(void); + +extern void putasid(Proc*); + +extern void* ucalloc(usize); + +/* clock */ +extern void clockinit(void); +extern void synccycles(void); +extern void armtimerset(int); +extern void clockshutdown(void); + +/* fpu */ +extern void fpuinit(void); +extern void fpoff(void); +extern void fpinit(void); +extern void fpclear(void); +extern void fpsave(FPsave*); +extern void fprestore(FPsave*); +extern void mathtrap(Ureg*); + +/* trap */ +extern void trapinit(void); +extern int userureg(Ureg*); +extern void evenaddr(uintptr); +extern void setkernur(Ureg*, Proc*); +extern void procfork(Proc*); +extern void procsetup(Proc*); +extern void procsave(Proc*); +extern void procrestore(Proc *); +extern void trap(Ureg*); +extern void syscall(Ureg*); +extern void noted(Ureg*, ulong); +extern void faultarm64(Ureg*); +extern void dumpstack(void); +extern void dumpregs(Ureg*); + +/* irq */ +extern void intrinit(void); +extern void intrcpushutdown(void); +extern void intrsoff(void); +extern void intrenable(int, void (*)(Ureg*, void*), void*, int, char*); +extern void intrdisable(int, void (*)(Ureg*, void*), void*, int, char*); +extern int irq(Ureg*); +extern void fiq(Ureg*); + +/* sysreg */ +extern uvlong sysrd(ulong); +extern void syswr(ulong, uvlong); + +/* uartimx */ +extern void uartconsinit(void); + +/* dma */ +extern void dmaflush(int, void*, ulong); + +/* main */ +extern char *getconf(char *name); +extern void setconfenv(void); +extern void writeconf(void); + +extern int isaconfig(char*, int, ISAConf*); +extern void links(void);
\ No newline at end of file |