Formatting
This commit is contained in:
parent
629ba0f6ce
commit
cc2d5cfea9
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
"rust-analyzer.cargo.target": "x86_64-unknown-none",
|
"rust-analyzer.cargo.target": "x86_64-unknown-none",
|
||||||
"rust-analyzer.check.allTargets": false,
|
"rust-analyzer.check.allTargets": false,
|
||||||
|
"nixEnvPicker.terminalActivateCommand": "nix-shell",
|
||||||
|
"nixEnvSelector.nixFile": "${workspaceFolder}/shell.nix",
|
||||||
|
"nixEnvSelector.useFlakes": false,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,10 +11,12 @@ pub fn nop() {
|
|||||||
|
|
||||||
pub fn long_mode() -> bool {
|
pub fn long_mode() -> bool {
|
||||||
let mut output: u32;
|
let mut output: u32;
|
||||||
unsafe { asm!(
|
unsafe {
|
||||||
"mov eax, 0x80000001",
|
asm!(
|
||||||
"cpuid",
|
"mov eax, 0x80000001",
|
||||||
out("edx") output,
|
"cpuid",
|
||||||
) }
|
out("edx") output,
|
||||||
|
)
|
||||||
|
}
|
||||||
output.bit(29)
|
output.bit(29)
|
||||||
}
|
}
|
||||||
@ -8,8 +8,8 @@ use intbits::Bits;
|
|||||||
use x86_64::structures::gdt;
|
use x86_64::structures::gdt;
|
||||||
use x86_64::structures::gdt::*;
|
use x86_64::structures::gdt::*;
|
||||||
|
|
||||||
use crate::log_info;
|
|
||||||
use crate::log::*;
|
use crate::log::*;
|
||||||
|
use crate::log_info;
|
||||||
use crate::memory::alloc::format;
|
use crate::memory::alloc::format;
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
@ -74,7 +74,6 @@ pub fn dump_gdt() {
|
|||||||
entry.access()
|
entry.access()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@ -97,20 +96,32 @@ impl TryFrom<&gdt::Entry> for SegmentType {
|
|||||||
let flags = x86_64::structures::gdt::DescriptorFlags::from_bits_retain(value.raw());
|
let flags = x86_64::structures::gdt::DescriptorFlags::from_bits_retain(value.raw());
|
||||||
if value.access().bit(4) {
|
if value.access().bit(4) {
|
||||||
if value.access().bit(3) {
|
if value.access().bit(3) {
|
||||||
Ok(SegmentType::Code)
|
Ok(SegmentType::Code)
|
||||||
} else {
|
|
||||||
Ok(SegmentType::Data)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
match value.access().bits(0..=3) {
|
Ok(SegmentType::Data)
|
||||||
0b0000 => Ok(SegmentType::Null),
|
|
||||||
0b0001 => Ok(SegmentType::Tss16Avail),
|
|
||||||
0b0010 => Ok(SegmentType::Ldt),
|
|
||||||
0b0011 => Ok(SegmentType::Tss16Busy),
|
|
||||||
0b1001 => {if flags.contains(gdt::DescriptorFlags::LONG_MODE) { Ok(SegmentType::Tss64Avail) } else { Ok(SegmentType::Tss32Avail) }},
|
|
||||||
0b1011 => {if flags.contains(gdt::DescriptorFlags::LONG_MODE) { Ok(SegmentType::Tss64Busy) } else { Ok(SegmentType::Tss32Busy) }},
|
|
||||||
_ => Err(()),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
match value.access().bits(0..=3) {
|
||||||
|
0b0000 => Ok(SegmentType::Null),
|
||||||
|
0b0001 => Ok(SegmentType::Tss16Avail),
|
||||||
|
0b0010 => Ok(SegmentType::Ldt),
|
||||||
|
0b0011 => Ok(SegmentType::Tss16Busy),
|
||||||
|
0b1001 => {
|
||||||
|
if flags.contains(gdt::DescriptorFlags::LONG_MODE) {
|
||||||
|
Ok(SegmentType::Tss64Avail)
|
||||||
|
} else {
|
||||||
|
Ok(SegmentType::Tss32Avail)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
0b1011 => {
|
||||||
|
if flags.contains(gdt::DescriptorFlags::LONG_MODE) {
|
||||||
|
Ok(SegmentType::Tss64Busy)
|
||||||
|
} else {
|
||||||
|
Ok(SegmentType::Tss32Busy)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => Err(()),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -29,9 +29,14 @@ use limine::firmware_type::FirmwareType;
|
|||||||
use spin::mutex::Mutex;
|
use spin::mutex::Mutex;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
arch::{asm, x86_64::{
|
arch::{
|
||||||
cpuid::{CPUID, virt_supported}, gdt::dump_gdt,
|
asm,
|
||||||
}}, memory::HHDM_RESPONSE,
|
x86_64::{
|
||||||
|
cpuid::{CPUID, virt_supported},
|
||||||
|
gdt::dump_gdt,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
memory::HHDM_RESPONSE,
|
||||||
};
|
};
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user