X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/32b9a6d76790c73d3d2d36d9081a2581cc65d184..28c176b668c841a3b7fb093faccf0efa39257603:/lunaix-os/arch/x86/hart.c diff --git a/lunaix-os/arch/x86/hart.c b/lunaix-os/arch/x86/hart.c new file mode 100644 index 0000000..124ea6e --- /dev/null +++ b/lunaix-os/arch/x86/hart.c @@ -0,0 +1,22 @@ +#include +#include +#include + +#include + +bool +install_hart_transition(ptr_t vm_mnt, struct hart_transition* ht) +{ + pte_t pte; + if (!vmm_lookupat(vm_mnt, ht->inject, &pte)) { + return false; + } + + mount_page(PG_MOUNT_4, pte_paddr(pte)); + + ptr_t mount_inject = PG_MOUNT_4 + va_offset(ht->inject); + memcpy((void*)mount_inject, &ht->transfer, sizeof(ht->transfer)); + + unmount_page(PG_MOUNT_4); + return true; +} \ No newline at end of file