* 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:
Jeremy Soller 2016-10-13 17:21:42 -06:00 committed by GitHub
parent 372d44f88c
commit 224c43f761
92 changed files with 3415 additions and 473 deletions

View file

@ -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 = "*"

View file

@ -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

View file

@ -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();
});

View file

@ -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);