printf(1, "fsfull test finished\n");
}
+void
+uio()
+{
+ #define RTC_ADDR 0x70
+ #define RTC_DATA 0x71
+
+ ushort port = 0;
+ uchar val = 0;
+ int pid;
+
+ printf(1, "uio test\n");
+ pid = fork();
+ if(pid == 0){
+ port = RTC_ADDR;
+ val = 0x09; /* year */
+ /* http://wiki.osdev.org/Inline_Assembly/Examples */
+ asm volatile("outb %0,%1"::"a"(val), "d" (port));
+ port = RTC_DATA;
+ asm volatile("inb %1,%0" : "=a" (val) : "d" (port));
+ printf(1, "uio: uio succeeded; test FAILED\n");
+ exit();
+ } else if(pid < 0){
+ printf (1, "fork failed\n");
+ exit();
+ }
+ wait();
+ printf(1, "uio test done\n");
+}
+
unsigned long randstate = 1;
unsigned int
rand()
iref();
forktest();
bigdir(); // slow
+
+ uio();
+
exectest();
exit();
cpu->gdt[SEG_TSS].s = 0;
cpu->ts.ss0 = SEG_KDATA << 3;
cpu->ts.esp0 = (uint)proc->kstack + KSTACKSIZE;
+ cpu->ts.iomb = (ushort) 0xFFFF; // forbid I/O instructions from user space
ltr(SEG_TSS << 3);
if(p->pgdir == 0)
panic("switchuvm: no pgdir");