mirror of
https://github.com/rcore-os/rCore.git
synced 2024-11-22 08:06:17 +04:00
Fix mipsel context switch
This commit is contained in:
parent
a16a9e238b
commit
4dd72365ca
2
kernel/Cargo.lock
generated
2
kernel/Cargo.lock
generated
@ -709,7 +709,7 @@ checksum = "3a385d94f3f62e60445a0adb9ff8d9621faa272234530d4c0f848ec98f88e316"
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "trapframe"
|
name = "trapframe"
|
||||||
version = "0.4.3"
|
version = "0.4.3"
|
||||||
source = "git+https://github.com/rcore-os/trapframe-rs?rev=e58d975#e58d9755f181de24431b5ff9437f396ac71e8429"
|
source = "git+https://github.com/rcore-os/trapframe-rs?rev=e9a2164#e9a21646169f23934facdcf2299490732dbc6a7f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"raw-cpuid",
|
"raw-cpuid",
|
||||||
"x86_64",
|
"x86_64",
|
||||||
|
@ -69,7 +69,7 @@ rcore-fs-devfs = { git = "https://github.com/rcore-os/rcore-fs", rev = "517af47"
|
|||||||
rlibc = "1.0"
|
rlibc = "1.0"
|
||||||
smoltcp = { git = "https://github.com/rcore-os/smoltcp", rev = "5bd87c7c", default-features = false, features = ["alloc", "log", "ethernet", "proto-ipv4", "proto-igmp", "socket-icmp", "socket-udp", "socket-tcp", "socket-raw"] }
|
smoltcp = { git = "https://github.com/rcore-os/smoltcp", rev = "5bd87c7c", default-features = false, features = ["alloc", "log", "ethernet", "proto-ipv4", "proto-igmp", "socket-icmp", "socket-udp", "socket-tcp", "socket-raw"] }
|
||||||
spin = "0.5"
|
spin = "0.5"
|
||||||
trapframe = { git = "https://github.com/rcore-os/trapframe-rs", rev = "e58d975" }
|
trapframe = { git = "https://github.com/rcore-os/trapframe-rs", rev = "e9a2164" }
|
||||||
virtio-drivers = { git = "https://github.com/rcore-os/virtio-drivers", rev = "dfa70e14" }
|
virtio-drivers = { git = "https://github.com/rcore-os/virtio-drivers", rev = "dfa70e14" }
|
||||||
volatile = "0.2"
|
volatile = "0.2"
|
||||||
woke = "0.0.2"
|
woke = "0.0.2"
|
||||||
|
@ -17,5 +17,11 @@ fn main() {
|
|||||||
} else if target.contains("riscv64") {
|
} else if target.contains("riscv64") {
|
||||||
println!("cargo:rustc-cfg=riscv");
|
println!("cargo:rustc-cfg=riscv");
|
||||||
println!("cargo:rustc-cfg=riscv64");
|
println!("cargo:rustc-cfg=riscv64");
|
||||||
|
} else if target.contains("mipsel") {
|
||||||
|
println!("cargo:rustc-cfg=mipsel");
|
||||||
|
} else if target.contains("aarch64") {
|
||||||
|
println!("cargo:rustc-cfg=aarch64");
|
||||||
|
} else if target.contains("x86_64") {
|
||||||
|
println!("cargo:rustc-cfg=x86_64");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ pub fn init_serial_early() {
|
|||||||
let mut status = cp0::status::read();
|
let mut status = cp0::status::read();
|
||||||
status.enable_hard_int2();
|
status.enable_hard_int2();
|
||||||
cp0::status::write(status);
|
cp0::status::write(status);
|
||||||
println!("Hello QEMU Malta!");
|
info!("Hello QEMU Malta!");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initialize other board drivers
|
/// Initialize other board drivers
|
||||||
|
@ -11,12 +11,9 @@ pub mod consts;
|
|||||||
|
|
||||||
/// Initialize interrupt
|
/// Initialize interrupt
|
||||||
pub fn init() {
|
pub fn init() {
|
||||||
extern "C" {
|
unsafe {
|
||||||
fn trap_entry();
|
trapframe::init();
|
||||||
}
|
}
|
||||||
// Set the exception vector address
|
|
||||||
cp0::ebase::write_u32(trap_entry as u32);
|
|
||||||
println!("Set ebase = {:x}", trap_entry as u32);
|
|
||||||
|
|
||||||
let mut status = cp0::status::read();
|
let mut status = cp0::status::read();
|
||||||
// Enable IPI
|
// Enable IPI
|
||||||
|
@ -28,7 +28,6 @@ pub extern "C" fn rust_main() -> ! {
|
|||||||
if cpu_id != BOOT_CPU_ID {
|
if cpu_id != BOOT_CPU_ID {
|
||||||
// TODO: run others_main on other CPU
|
// TODO: run others_main on other CPU
|
||||||
// while unsafe { !cpu::has_started(hartid) } { }
|
// while unsafe { !cpu::has_started(hartid) } { }
|
||||||
// println!("Hello RISCV! in hart {}, dtb @ {:#x}", hartid, dtb);
|
|
||||||
// others_main();
|
// others_main();
|
||||||
loop {}
|
loop {}
|
||||||
}
|
}
|
||||||
@ -45,7 +44,7 @@ pub extern "C" fn rust_main() -> ! {
|
|||||||
timer::init();
|
timer::init();
|
||||||
driver::init();
|
driver::init();
|
||||||
|
|
||||||
println!("Hello MIPS 32 from CPU {}, dtb @ {:#x}", cpu_id, dtb_start);
|
info!("Hello MIPS 32 from CPU {}, dtb @ {:#x}", cpu_id, dtb_start);
|
||||||
|
|
||||||
//crate::drivers::init(dtb_start);
|
//crate::drivers::init(dtb_start);
|
||||||
crate::process::init();
|
crate::process::init();
|
||||||
|
@ -42,7 +42,7 @@ pub extern "C" fn rust_main(hartid: usize, device_tree_paddr: usize) -> ! {
|
|||||||
memory::clear_bss();
|
memory::clear_bss();
|
||||||
}
|
}
|
||||||
|
|
||||||
println!(
|
info!(
|
||||||
"Hello RISCV! in hart {}, device tree @ {:#x}",
|
"Hello RISCV! in hart {}, device tree @ {:#x}",
|
||||||
hartid, device_tree_vaddr
|
hartid, device_tree_vaddr
|
||||||
);
|
);
|
||||||
|
@ -307,6 +307,11 @@ impl Thread {
|
|||||||
// F | A | D | EL0
|
// F | A | D | EL0
|
||||||
context.spsr = 0b1101_00_0000;
|
context.spsr = 0b1101_00_0000;
|
||||||
}
|
}
|
||||||
|
#[cfg(target_arch = "mips")]
|
||||||
|
{
|
||||||
|
// UM
|
||||||
|
context.status = 1 << 4;
|
||||||
|
}
|
||||||
|
|
||||||
let thread = Thread {
|
let thread = Thread {
|
||||||
tid: 0, // allocated below
|
tid: 0, // allocated below
|
||||||
|
Loading…
Reference in New Issue
Block a user