123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #![no_std]
- pub mod vm {
- use core::arch::asm;
- #[inline(always)]
- pub fn invlpg(vaddr: usize) {
- unsafe {
- asm!(
- "invlpg ({})",
- in(reg) vaddr,
- options(att_syntax)
- );
- }
- }
- #[inline(always)]
- pub fn invlpg_all() {
- unsafe {
- asm!(
- "mov %cr3, %rax",
- "mov %rax, %cr3",
- out("rax") _,
- options(att_syntax)
- );
- }
- }
- #[inline(always)]
- pub fn get_cr3() -> usize {
- let cr3: usize;
- unsafe {
- asm!(
- "mov %cr3, {0}",
- out(reg) cr3,
- options(att_syntax)
- );
- }
- cr3
- }
- #[inline(always)]
- pub fn set_cr3(pfn: usize) {
- unsafe {
- asm!(
- "mov {0}, %cr3",
- in(reg) pfn,
- options(att_syntax)
- );
- }
- }
- #[inline(always)]
- pub fn get_cr2() -> usize {
- let cr2: usize;
- unsafe {
- asm!(
- "mov %cr2, {}",
- out(reg) cr2,
- options(att_syntax)
- );
- }
- cr2
- }
- }
- pub mod interrupt;
- pub mod io;
- pub mod task;
|