diff --git a/src/sys/kernel/Makefile b/src/sys/kernel/Makefile index 79ed157..c5c4da4 100644 --- a/src/sys/kernel/Makefile +++ b/src/sys/kernel/Makefile @@ -6,7 +6,7 @@ include ../Makefile.inc # Objects -OBJS = endtask.o ap-boot.o smp.o spinlock.o bioscall.o ld.o time.o fork.o syscall.o elf.o file.o systemtask.o exec.o sched.o kpanic.o vitals.o ubthread.o +OBJS = endtask.o ap-boot.o smp.o spinlock.o bioscall.o ld.o time.o fork.o syscall.o elf.o file.o systemtask.o exec.o sched.o kpanic.o vitals.o ubthread.o timer.o all: $(OBJS) diff --git a/src/sys/kernel/timer.S b/src/sys/kernel/timer.S new file mode 100644 index 0000000..fa7a06e --- /dev/null +++ b/src/sys/kernel/timer.S @@ -0,0 +1,71 @@ +/***************************************************************************************** + Copyright (c) 2002-2004 The UbixOS Project + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are + permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this list of + conditions, the following disclaimer and the list of authors. Redistributions in binary + form must reproduce the above copyright notice, this list of conditions, the following + disclaimer and the list of authors in the documentation and/or other materials provided + with the distribution. Neither the name of the UbixOS Project nor the names of its + contributors may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + $Id$ + +*****************************************************************************************/ + +.globl timerInt +.text +.code32 +timerInt: + pushl %edx /* Push Register That We Are Going To Touch */ + pushl %ecx + pushl %ebx + pushl %eax + movl systemVitals,%ecx /* Put Location Of System Vitals Into ECX */ + incl 4(%ecx) /* Increment sysTicks our 1000ms counter */ + mov $0x20,%dx /* The Following Sends Our EOI To The MPIC */ + mov $0x20,%ax + outb %al,%dx + mov $0xA0,%dx /* The Following Sends Our EOI To The SPID */ + outb %al,%dx + movl 4(%ecx),%eax /* Increment our sysUptime by 1S if 1000MS */ + movl $1000,%ebx /* Have Passed */ + xor %edx,%edx + div %ebx + test %edx,%edx + jnz next + incl 8(%ecx) +next: + movl 4(%ecx),%eax /* Test If quantum Has Passed If So Then */ + movl 12(%ecx),%ebx /* We Can CALL sched */ + xor %edx,%edx + div %ebx + test %edx,%edx + jnz done + call sched +done: + popl %eax /* Restore Register And IRET */ + popl %ebx + popl %ecx + popl %edx + iret + +/*** + $Log$ + END + ***/ + diff --git a/src/sys/sys/idt.c b/src/sys/sys/idt.c index 51f9b4a..93c3fd0 100644 --- a/src/sys/sys/idt.c +++ b/src/sys/sys/idt.c @@ -386,44 +386,6 @@ while (1); } -/* Timer Interupt */ -__asm__( - ".globl timerInt \n" - "timerInt: \n" - " pushl %edx \n" /* Push Register That We Are Going To Touch */ - " pushl %ecx \n" - " pushl %ebx \n" - " pushl %eax \n" - " movl systemVitals,%ecx \n" /* Put Location Of System Vitals Into ECX */ - " incl 4(%ecx) \n" /* Increment sysTicks our 1000ms counter */ - " mov $0x20,%dx \n" /* The Following Sends Our EOI To The MPIC */ - " mov $0x20,%ax \n" - " outb %al,%dx \n" - " mov $0xA0,%dx \n" /* The Following Sends Our EOI To The SPID */ - " outb %al,%dx \n" - " movl 4(%ecx),%eax \n" /* Increment our sysUptime by 1S if 1000MS */ - " movl $1000,%ebx \n" /* Have Passed */ - " xor %edx,%edx \n" - " div %ebx \n" - " test %edx,%edx \n" - " jnz next \n" - " incl 8(%ecx) \n" - "next: \n" - " movl 4(%ecx),%eax \n" /* Test If quantum Has Passed If So Then */ - " movl 12(%ecx),%ebx \n" /* We Can CALL sched */ - " xor %edx,%edx \n" - " div %ebx \n" - " test %edx,%edx \n" - " jnz done \n" - " call sched \n" - "done: \n" - " popl %eax \n" /* Restore Register And IRET */ - " popl %ebx \n" - " popl %ecx \n" - " popl %edx \n" - " iret \n" -); - void _int7(); __asm__ ( ".globl _int7 \n" @@ -466,6 +428,9 @@ /*** $Log$ + Revision 1.13 2004/06/16 12:27:50 reddawg + Added Comments To Timer Interrupt + Revision 1.12 2004/06/16 12:04:19 reddawg systemVitals->quantum = (1000/msPerQuantum) The timer int now will call scheduler at the rate of the defined quantum