Orbital (#16)
* Port previous ethernet scheme * Add ipd * Fix initfs rebuilds, use QEMU user networking addresses in ipd * Add tcp/udp, netutils, dns, and network config * Add fsync to network driver * Add dns, router, subnet by default * Fix e1000 driver. Make ethernet and IP non-blocking to avoid deadlocks * Add orbital server, WIP * Add futex * Add orbutils and orbital * Update libstd, orbutils, and orbital Move ANSI key encoding to vesad * Add orbital assets * Update orbital * Update to add login manager * Add blocking primitives, block for most things except waitpid, update orbital * Wait in waitpid and IRQ, improvements for other waits * Fevent in root scheme * WIP: Switch to using fevent * Reorganize * Event based e1000d driver * Superuser-only access to some network schemes, display, and disk * Superuser root and irq schemes * Fix orbital
This commit is contained in:
parent
372d44f88c
commit
224c43f761
92 changed files with 3415 additions and 473 deletions
|
@ -4,5 +4,5 @@ version = "0.1.0"
|
|||
|
||||
[dependencies]
|
||||
bitflags = "*"
|
||||
hole_list_allocator = { path = "../../alloc/hole_list_allocator"}
|
||||
hole_list_allocator = { path = "../../crates/hole_list_allocator"}
|
||||
spin = "*"
|
||||
|
|
|
@ -4,10 +4,10 @@ version = "0.1.0"
|
|||
|
||||
[dependencies]
|
||||
bitflags = "*"
|
||||
hole_list_allocator = { path = "../../alloc/hole_list_allocator" }
|
||||
io = { path = "../../drivers/io" }
|
||||
hole_list_allocator = { path = "../../crates/hole_list_allocator/" }
|
||||
io = { path = "../../crates/io/" }
|
||||
spin = "*"
|
||||
|
||||
[dependencies.x86]
|
||||
version = "*"
|
||||
version = "0.7"
|
||||
default-features = false
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
use spin::Mutex;
|
||||
use x86::io;
|
||||
|
||||
use device::serial::{COM1, COM2};
|
||||
use time;
|
||||
|
||||
pub static ACKS: Mutex<[usize; 16]> = Mutex::new([0; 16]);
|
||||
pub static COUNTS: Mutex<[usize; 16]> = Mutex::new([0; 16]);
|
||||
extern {
|
||||
fn irq_trigger(irq: u8);
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
unsafe fn master_ack() {
|
||||
|
@ -27,11 +27,11 @@ pub unsafe fn acknowledge(irq: usize) {
|
|||
}
|
||||
|
||||
interrupt!(pit, {
|
||||
COUNTS.lock()[0] += 1;
|
||||
irq_trigger(0);
|
||||
|
||||
{
|
||||
const PIT_RATE: u64 = 46500044;
|
||||
|
||||
|
||||
let mut offset = time::OFFSET.lock();
|
||||
let sum = offset.1 + PIT_RATE;
|
||||
offset.1 = sum % 1000000000;
|
||||
|
@ -42,76 +42,74 @@ interrupt!(pit, {
|
|||
});
|
||||
|
||||
interrupt!(keyboard, {
|
||||
COUNTS.lock()[1] += 1;
|
||||
irq_trigger(1);
|
||||
});
|
||||
|
||||
interrupt!(cascade, {
|
||||
COUNTS.lock()[2] += 1;
|
||||
irq_trigger(2);
|
||||
master_ack();
|
||||
});
|
||||
|
||||
interrupt!(com2, {
|
||||
COUNTS.lock()[3] += 1;
|
||||
irq_trigger(3);
|
||||
COM2.lock().on_receive();
|
||||
master_ack();
|
||||
});
|
||||
|
||||
interrupt!(com1, {
|
||||
COUNTS.lock()[4] += 1;
|
||||
irq_trigger(4);
|
||||
COM1.lock().on_receive();
|
||||
master_ack();
|
||||
});
|
||||
|
||||
interrupt!(lpt2, {
|
||||
COUNTS.lock()[5] += 1;
|
||||
irq_trigger(5);
|
||||
master_ack();
|
||||
});
|
||||
|
||||
interrupt!(floppy, {
|
||||
COUNTS.lock()[6] += 1;
|
||||
irq_trigger(6);
|
||||
master_ack();
|
||||
});
|
||||
|
||||
interrupt!(lpt1, {
|
||||
COUNTS.lock()[7] += 1;
|
||||
irq_trigger(7);
|
||||
master_ack();
|
||||
});
|
||||
|
||||
interrupt!(rtc, {
|
||||
COUNTS.lock()[8] += 1;
|
||||
irq_trigger(8);
|
||||
slave_ack();
|
||||
});
|
||||
|
||||
interrupt!(pci1, {
|
||||
COUNTS.lock()[9] += 1;
|
||||
irq_trigger(9);
|
||||
slave_ack();
|
||||
});
|
||||
|
||||
interrupt!(pci2, {
|
||||
COUNTS.lock()[10] += 1;
|
||||
slave_ack();
|
||||
irq_trigger(10);
|
||||
});
|
||||
|
||||
interrupt!(pci3, {
|
||||
COUNTS.lock()[11] += 1;
|
||||
slave_ack();
|
||||
irq_trigger(11);
|
||||
});
|
||||
|
||||
interrupt!(mouse, {
|
||||
COUNTS.lock()[12] += 1;
|
||||
irq_trigger(12);
|
||||
});
|
||||
|
||||
interrupt!(fpu, {
|
||||
COUNTS.lock()[13] += 1;
|
||||
irq_trigger(13);
|
||||
slave_ack();
|
||||
});
|
||||
|
||||
interrupt!(ata1, {
|
||||
COUNTS.lock()[14] += 1;
|
||||
irq_trigger(14);
|
||||
slave_ack();
|
||||
});
|
||||
|
||||
interrupt!(ata2, {
|
||||
COUNTS.lock()[15] += 1;
|
||||
irq_trigger(15);
|
||||
slave_ack();
|
||||
});
|
||||
|
|
|
@ -148,7 +148,7 @@ pub unsafe extern fn kstart_ap(cpu_id: usize, _page_table: usize, stack_start: u
|
|||
let kernel_table = KERNEL_TABLE.load(Ordering::SeqCst);
|
||||
|
||||
// Initialize paging
|
||||
let (active_table, tcb_offset) = paging::init_ap(cpu_id, stack_start, stack_end, kernel_table);
|
||||
let (_active_table, tcb_offset) = paging::init_ap(cpu_id, stack_start, stack_end, kernel_table);
|
||||
|
||||
// Set up GDT for AP
|
||||
gdt::init(tcb_offset, stack_end);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue