cons_putc(buf[i]);
}
-// Print to the input. only understands %d, %x, %p, %s.
+// Print to the console. only understands %d, %x, %p, %s.
void
cprintf(char *fmt, ...)
{
case C('P'): // Process listing.
procdump();
break;
-
case C('U'): // Kill line.
while(input.e > input.w &&
input.buf[(input.e-1) % INPUT_BUF] != '\n'){
cons_putc(BACKSPACE);
}
break;
-
case C('H'): // Backspace
if(input.e > input.w){
input.e--;
cons_putc(BACKSPACE);
}
break;
-
default:
if(c != 0 && input.e < input.r+INPUT_BUF){
input.buf[input.e++] = c;
#define I_BUSY 0x1
#define I_VALID 0x2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Blank page.
ide_wait_ready(0);
// Check if disk 1 is present
- outb(0x1f6, 0xE0 | (1<<4));
+ outb(0x1f6, 0xe0 | (1<<4));
for(i=0; i<1000; i++){
if(inb(0x1f7) != 0){
disk_1_present = 1;
}
// Switch back to disk 0.
- outb(0x1f6, 0xE0 | (0<<4));
+ outb(0x1f6, 0xe0 | (0<<4));
}
// Start the request for b. Caller must hold ide_lock.
outb(0x1f3, b->sector & 0xff);
outb(0x1f4, (b->sector >> 8) & 0xff);
outb(0x1f5, (b->sector >> 16) & 0xff);
- outb(0x1f6, 0xE0 | ((b->dev&1)<<4) | ((b->sector>>24)&0x0f));
+ outb(0x1f6, 0xe0 | ((b->dev&1)<<4) | ((b->sector>>24)&0x0f));
if(b->flags & B_DIRTY){
outb(0x1f7, IDE_CMD_WRITE);
outsl(0x1f0, b->data, 512/4);
}
// Additional processors start here.
-void
+static void
mpmain(void)
{
cprintf("cpu%d: starting\n", cpu());
}
' $files >defs
-perl -n -e 'print if s/^([0-9]+ [a-zA-Z0-9_]+)\(.*$/\1/;' $files |
+(for i in $files
+do
+ case "$i" in
+ *.S)
+ cat $i | sed 's;#.*;;; s;//.*;;;'
+ ;;
+ *)
+ cat $i | sed 's;//.*;;; s;"([^"\\]|\\.)*";;;'
+ esac
+done
+) >alltext
+
+perl -n -e 'print if s/^([0-9]+ [a-zA-Z0-9_]+)\(.*$/\1/;' alltext |
egrep -v ' (usage|main|if|for)$' >>defs
(
>s.defs
do
defs=`egrep '^[0-9]+ '$i'( |$)' defs | awk '{print $1}'`
echo $i $defs >>s.defs
- uses=`egrep -h '([^a-zA-Z_0-9])'$i'($|[^a-zA-Z_0-9])' $files | awk '{print $1}'`
- echo $i $defs
- echo $uses |fmt -24 | sed 's/^/ /'
+ uses=`egrep -h '([^a-zA-Z_0-9])'$i'($|[^a-zA-Z_0-9])' alltext | awk '{print $1}'`
+ if [ "x$defs" != "x$uses" ]; then
+ echo $i $defs
+ echo $uses |fmt -24 | sed 's/^/ /'
+ fi
done
) >refs
-
The source listing is preceded by a cross-reference that lists every defined
constant, struct, global variable, and function in xv6. Each entry gives,
on the same line as the name, the line number (or, in a few cases, numbers)
Thus there is a convenient relationship between line numbers and sheet numbers.
-
// during interrupt handler. Decrement before returning.
cpus[cpu()].nlock++;
- // PAGEBREAK: 10
switch(tf->trapno){
case IRQ_OFFSET + IRQ_TIMER:
if(cpu() == 0){
}
lapic_eoi();
break;
-
case IRQ_OFFSET + IRQ_IDE:
ide_intr();
lapic_eoi();
break;
-
case IRQ_OFFSET + IRQ_KBD:
kbd_intr();
lapic_eoi();
break;
-
case IRQ_OFFSET + IRQ_SPURIOUS:
cprintf("spurious interrupt from cpu %d eip %x\n", cpu(), tf->eip);
lapic_eoi();
.text
-.globl trap
-.globl trapret1
-.globl alltraps
.set SEG_KDATA_SEL, 0x10 # selector for SEG_KDATA
# vectors.S sends all traps here.
+.globl alltraps
alltraps:
# Build trap frame.
pushl %ds