interrupt.c File Reference

#include "includes.h"

Go to the source code of this file.

Functions

void InterruptInit (void)
void InterruptCpuIntHandlerSet (U8 IntNumber, INT_HANDLER IntHandler)
void InterruptIrqHandlerSet (U8 IrqNumber, INT_HANDLER IrqHandler)
void InterruptSoftwareIntHandlerSet (U8 IntNumber, INT_HANDLER IntHandler)
void InterruptIdtEntrySet (U8 IntNumber, U8 IdtType, INT_HANDLER Handler, U8 IdtDpl)
void InterruptIdtTableFill (void)
void InterruptIrq0Handler (void)
void InterruptIrq1Handler (void)
void InterruptIrq2Handler (void)
void InterruptIrq3Handler (void)
void InterruptIrq4Handler (void)
void InterruptIrq5Handler (void)
void InterruptIrq6Handler (void)
void InterruptIrq7Handler (void)
void InterruptIrq8Handler (void)
void InterruptIrq9Handler (void)
void InterruptIrq10Handler (void)
void InterruptIrq11Handler (void)
void InterruptIrq12Handler (void)
void InterruptIrq13Handler (void)
void InterruptIrq14Handler (void)
void InterruptIrq15Handler (void)
void InterruptCpuInt0Handler (void)
void InterruptCpuInt1Handler (void)
void InterruptCpuInt2Handler (void)
void InterruptCpuInt3Handler (void)
void InterruptCpuInt4Handler (void)
void InterruptCpuInt5Handler (void)
void InterruptCpuInt6Handler (void)
void InterruptCpuInt7Handler (void)
void InterruptCpuInt8Handler (void)
void InterruptCpuInt9Handler (void)
void InterruptCpuInt10Handler (void)
void InterruptCpuInt11Handler (void)
void InterruptCpuInt12Handler (void)
void InterruptCpuInt13Handler (void)
void InterruptCpuInt14Handler (void)
void InterruptCpuInt15Handler (void)
void InterruptCpuInt16Handler (void)
void InterruptCpuInt17Handler (void)
void InterruptCpuInt18Handler (void)
void InterruptCpuInt19Handler (void)
void InterruptSoftwareInt48Handler (void)


Function Documentation

void InterruptCpuInt0Handler ( void   ) 

Definition at line 171 of file interrupt.c.

00171                                   {
00172     SystemCgaInit();
00173     SystemCgaStringPrint("Cpu fault 0");
00174     SystemCgaStringPrint("\nFAULT TYPE: DIVIDE BY 0");
00175     SystemCgaStringPrint("\nSYSTEM HALT");
00176     SystemHalt();
00177 }

void InterruptCpuInt10Handler ( void   ) 

Definition at line 244 of file interrupt.c.

00244                                    {
00245     SystemCgaInit();
00246     SystemCgaStringPrint("Cpu fault 10");
00247     SystemCgaStringPrint("\nFAULT TYPE: INVALID TSS");
00248     SystemCgaStringPrint("\nSYSTEM HALT");
00249     SystemHalt();
00250 }

void InterruptCpuInt11Handler ( void   ) 

Definition at line 251 of file interrupt.c.

00251                                    {
00252     SystemCgaInit();
00253     SystemCgaStringPrint("Cpu fault 11");
00254     SystemCgaStringPrint("\nFAULT TYPE: SEGMENT NOT PRESENT");
00255     SystemCgaStringPrint("\nSYSTEM HALT");
00256     SystemHalt();
00257 }

void InterruptCpuInt12Handler ( void   ) 

Definition at line 258 of file interrupt.c.

00258                                    {
00259     SystemCgaInit();
00260     SystemCgaStringPrint("Cpu fault 12");
00261     SystemCgaStringPrint("\nFAULT TYPE: STACK SEGMENT OVERFLOW");
00262     SystemCgaStringPrint("\nSYSTEM HALT");
00263     SystemHalt();
00264 }

void InterruptCpuInt13Handler ( void   ) 

Definition at line 265 of file interrupt.c.

00265                                    {
00266     SystemCgaInit();
00267     SystemCgaStringPrint("Cpu fault 13");
00268     SystemCgaStringPrint("\nFAULT TYPE: GENERAL PROTECTION");
00269     SystemCgaStringPrint("\nSYSTEM HALT");
00270     SystemHalt();
00271 }

void InterruptCpuInt14Handler ( void   ) 

Definition at line 272 of file interrupt.c.

00272                                    {
00273     SystemCgaInit();
00274     SystemCgaStringPrint("Cpu fault 14");
00275     SystemCgaStringPrint("\nFAULT TYPE: PAGE FAULT");
00276     SystemCgaStringPrint("\nSYSTEM HALT");
00277     SystemHalt();
00278 }

void InterruptCpuInt15Handler ( void   ) 

Definition at line 279 of file interrupt.c.

00279                                    {
00280     SystemCgaInit();
00281     SystemCgaStringPrint("Cpu fault 15");
00282     SystemCgaStringPrint("\nFAULT TYPE: UNDEFINE.");
00283     SystemCgaStringPrint("\nTHIS FAULT TYPE SHOULD NOT HAPPEN ,BECAUSE IT IS UNDEFINED.");
00284     SystemCgaStringPrint("\nSYSTEM HALT");
00285     SystemHalt();
00286 }

void InterruptCpuInt16Handler ( void   ) 

Definition at line 287 of file interrupt.c.

00287                                    {
00288     SystemCgaInit();
00289     SystemCgaStringPrint("Cpu fault 16");
00290     SystemCgaStringPrint("\nFAULT TYPE: FPU ERROR");
00291     SystemCgaStringPrint("\nSYSTEM HALT");
00292     SystemHalt();
00293 }

void InterruptCpuInt17Handler ( void   ) 

Definition at line 294 of file interrupt.c.

00294                                    {
00295     SystemCgaInit();
00296     SystemCgaStringPrint("Cpu fault 17");
00297     SystemCgaStringPrint("\nFAULT TYPE: ALIGNMENT ERROR");
00298     SystemCgaStringPrint("\nSYSTEM HALT");
00299     SystemHalt();
00300 }

void InterruptCpuInt18Handler ( void   ) 

Definition at line 301 of file interrupt.c.

00301                                    {
00302     SystemCgaInit();
00303     SystemCgaStringPrint("Cpu fault 18");
00304     SystemCgaStringPrint("\nFAULT TYPE: MACHINE ERROR");
00305     SystemCgaStringPrint("\nSYSTEM HALT");
00306     SystemHalt();
00307 }

void InterruptCpuInt19Handler ( void   ) 

Definition at line 308 of file interrupt.c.

00308                                    {
00309     SystemCgaInit();
00310     SystemCgaStringPrint("Cpu fault 19");
00311     SystemCgaStringPrint("\nFAULT TYPE: SIMD ERROR");
00312     SystemCgaStringPrint("\nSYSTEM HALT");
00313     SystemHalt();
00314 }

void InterruptCpuInt1Handler ( void   ) 

Definition at line 178 of file interrupt.c.

00178                                   {
00179     SystemCgaInit();
00180     SystemCgaStringPrint("Cpu fault 1");
00181     SystemCgaStringPrint("\nFAULT TYPE: SINGLE STEP");
00182     SystemCgaStringPrint("\nSINGLE STEP IS FOR DEBUG USE.");
00183     SystemCgaStringPrint("\nSYSTEM HALT");
00184     SystemHalt();
00185 }

void InterruptCpuInt2Handler ( void   ) 

Definition at line 186 of file interrupt.c.

00186                                   {
00187     SystemCgaInit();
00188     SystemCgaStringPrint("Cpu fault 2");
00189     SystemCgaStringPrint("\nFAULT TYPE: NON MASKABLE INTERRUPT");
00190     SystemCgaStringPrint("\nNMI IS NOT SUPPORTED.");
00191     SystemCgaStringPrint("\nSYSTEM HALT");
00192     SystemHalt();
00193 }

void InterruptCpuInt3Handler ( void   ) 

Definition at line 194 of file interrupt.c.

00194                                   {
00195     SystemCgaInit();
00196     SystemCgaStringPrint("Cpu fault 3");
00197     SystemCgaStringPrint("\nFAULT TYPE: BREAK POINT");
00198     SystemCgaStringPrint("\nBREAK POINT IS FOR DEBUG USE.");
00199     SystemCgaStringPrint("\nSYSTEM HALT");
00200     SystemHalt();
00201 }

void InterruptCpuInt4Handler ( void   ) 

Definition at line 202 of file interrupt.c.

00202                                   {
00203     SystemCgaInit();
00204     SystemCgaStringPrint("Cpu fault 4");
00205     SystemCgaStringPrint("\nFAULT TYPE: OVERFLOW");
00206     SystemCgaStringPrint("\nSYSTEM HALT");
00207     SystemHalt();
00208 }

void InterruptCpuInt5Handler ( void   ) 

Definition at line 209 of file interrupt.c.

00209                                   {
00210     SystemCgaInit();
00211     SystemCgaStringPrint("Cpu fault 5");
00212     SystemCgaStringPrint("\nFAULT TYPE: BOUND");
00213     SystemCgaStringPrint("\nSYSTEM HALT");
00214     SystemHalt();
00215 }

void InterruptCpuInt6Handler ( void   ) 

Definition at line 216 of file interrupt.c.

00216                                   {
00217     SystemCgaInit();
00218     SystemCgaStringPrint("Cpu fault 6");
00219     SystemCgaStringPrint("\nFAULT TYPE: INVALID OP CODE");
00220     SystemCgaStringPrint("\nSYSTEM HALT");
00221     SystemHalt();
00222 }

void InterruptCpuInt7Handler ( void   ) 

Definition at line 223 of file interrupt.c.

00223                                   {
00224     SystemCgaInit();
00225     SystemCgaStringPrint("Cpu fault 7");
00226     SystemCgaStringPrint("\nFAULT TYPE: NO FPU");
00227     SystemCgaStringPrint("\nSYSTEM HALT");
00228     SystemHalt();
00229 }

void InterruptCpuInt8Handler ( void   ) 

Definition at line 230 of file interrupt.c.

00230                                   {
00231     SystemCgaInit();
00232     SystemCgaStringPrint("Cpu fault 8");
00233     SystemCgaStringPrint("\nFAULT TYPE: DOUBLE FAULT");
00234     SystemCgaStringPrint("\nSYSTEM HALT");
00235     SystemHalt();
00236 }

void InterruptCpuInt9Handler ( void   ) 

Definition at line 237 of file interrupt.c.

00237                                   {
00238     SystemCgaInit();
00239     SystemCgaStringPrint("Cpu fault 9");
00240     SystemCgaStringPrint("\nFAULT TYPE: FPU SEGMENT OVERFLOW");
00241     SystemCgaStringPrint("\nSYSTEM HALT");
00242     SystemHalt();
00243 }

void InterruptCpuIntHandlerSet ( U8  IntNumber,
INT_HANDLER  IntHandler 
)

Definition at line 53 of file interrupt.c.

00053                                                                    {
00054     if(IntNumber>=20) return;                 //invalid cpu fault int number
00055     CpuIntHandlersTable[IntNumber]=IntHandler;
00056 }

void InterruptIdtEntrySet ( U8  IntNumber,
U8  IdtType,
INT_HANDLER  Handler,
U8  IdtDpl 
)

Definition at line 68 of file interrupt.c.

00068                                                                                 {
00069     GATE* pGate;
00070     U32 Base;
00071 
00072     pGate=&IdtTable[IntNumber];
00073     Base=(U32)Handler;
00074     pGate->OffsetLow=Base&0x0000ffff;
00075     pGate->Selector=IDT_SELECTOR;
00076     pGate->Dcount=0x00;
00077     pGate->Attribute=(IDT_P<<7)|(IdtDpl<<5)|IdtType;
00078     pGate->OffsetHigh=(Base>>16)&0x0000ffff;
00079 }

void InterruptIdtTableFill ( void   ) 

Definition at line 81 of file interrupt.c.

00081                                 {
00082     InterruptIdtEntrySet(INT_CPU_DIVIDE_BY_0,        INT_GATE_32,CpuIntExecutorTable[0],DPL_3);
00083     InterruptIdtEntrySet(INT_CPU_SINGLE_STEP,        INT_GATE_32,CpuIntExecutorTable[1],DPL_3);
00084     InterruptIdtEntrySet(INT_CPU_NMI,                INT_GATE_32,CpuIntExecutorTable[2],DPL_3);
00085     InterruptIdtEntrySet(INT_CPU_BREAKPOINT,         INT_GATE_32,CpuIntExecutorTable[3],DPL_3);
00086     InterruptIdtEntrySet(INT_CPU_OVERFLOW,       INT_GATE_32,CpuIntExecutorTable[4],DPL_3);
00087     InterruptIdtEntrySet(INT_CPU_BOUND,          INT_GATE_32,CpuIntExecutorTable[5],DPL_3);
00088     InterruptIdtEntrySet(INT_CPU_INVALID_OPCODE,     INT_GATE_32,CpuIntExecutorTable[6],DPL_3);
00089     InterruptIdtEntrySet(INT_CPU_NO_FPU,             INT_GATE_32,CpuIntExecutorTable[7],DPL_3);
00090     InterruptIdtEntrySet(INT_CPU_DOUBLE_FAULT,     INT_GATE_32,CpuIntExecutorTable[8],DPL_3);
00091     InterruptIdtEntrySet(INT_CPU_FPU_SEGMENT_OVERFLOW, INT_GATE_32,CpuIntExecutorTable[9],DPL_3);
00092     InterruptIdtEntrySet(INT_CPU_INVAL_TSS,      INT_GATE_32,CpuIntExecutorTable[10],DPL_3);
00093     InterruptIdtEntrySet(INT_CPU_INVALID_SEGMENT,  INT_GATE_32,CpuIntExecutorTable[11],DPL_3);
00094     InterruptIdtEntrySet(INT_CPU_STACK_FAULT,      INT_GATE_32,CpuIntExecutorTable[12],DPL_3);
00095     InterruptIdtEntrySet(INT_CPU_PROTECTION,         INT_GATE_32,CpuIntExecutorTable[13],DPL_3);
00096     InterruptIdtEntrySet(INT_CPU_PAGE_FAULT,         INT_GATE_32,CpuIntExecutorTable[14],DPL_3);
00097     //InterruptIdtEntrySet(INT_CPU_UNDEFINE,                 INT_GATE_32,CpuIntExecutorTable[15],DPL_3); //undefine means this int is not defined.
00098     InterruptIdtEntrySet(INT_CPU_FPU_ERROR,      INT_GATE_32,CpuIntExecutorTable[16],DPL_3);
00099     InterruptIdtEntrySet(INT_CPU_ALIGNMENT_ERROR,    INT_GATE_32,CpuIntExecutorTable[17],DPL_3);
00100     InterruptIdtEntrySet(INT_CPU_MACHINE_ERROR,  INT_GATE_32,CpuIntExecutorTable[18],DPL_3);
00101     InterruptIdtEntrySet(INT_CPU_SIMD_ERROR,         INT_GATE_32,CpuIntExecutorTable[19],DPL_3);
00102     
00103     InterruptIdtEntrySet(INT_VECTOR_IRQ0+0,      INT_GATE_32,IrqExecutorTable[0],DPL_3);
00104     InterruptIdtEntrySet(INT_VECTOR_IRQ0+1,      INT_GATE_32,IrqExecutorTable[1],DPL_3);
00105     InterruptIdtEntrySet(INT_VECTOR_IRQ0+2,      INT_GATE_32,IrqExecutorTable[2],DPL_3);
00106     InterruptIdtEntrySet(INT_VECTOR_IRQ0+3,      INT_GATE_32,IrqExecutorTable[3],DPL_3);
00107     InterruptIdtEntrySet(INT_VECTOR_IRQ0+4,      INT_GATE_32,IrqExecutorTable[4],DPL_3);
00108     InterruptIdtEntrySet(INT_VECTOR_IRQ0+5,      INT_GATE_32,IrqExecutorTable[5],DPL_3);
00109     InterruptIdtEntrySet(INT_VECTOR_IRQ0+6,      INT_GATE_32,IrqExecutorTable[6],DPL_3);
00110     InterruptIdtEntrySet(INT_VECTOR_IRQ0+7,      INT_GATE_32,IrqExecutorTable[7],DPL_3);
00111     InterruptIdtEntrySet(INT_VECTOR_IRQ8+0,      INT_GATE_32,IrqExecutorTable[8],DPL_3);
00112     InterruptIdtEntrySet(INT_VECTOR_IRQ8+1,      INT_GATE_32,IrqExecutorTable[9],DPL_3);
00113     InterruptIdtEntrySet(INT_VECTOR_IRQ8+2,      INT_GATE_32,IrqExecutorTable[10],DPL_3);
00114     InterruptIdtEntrySet(INT_VECTOR_IRQ8+3,      INT_GATE_32,IrqExecutorTable[11],DPL_3);
00115     InterruptIdtEntrySet(INT_VECTOR_IRQ8+4,      INT_GATE_32,IrqExecutorTable[12],DPL_3);
00116     InterruptIdtEntrySet(INT_VECTOR_IRQ8+5,      INT_GATE_32,IrqExecutorTable[13],DPL_3);
00117     InterruptIdtEntrySet(INT_VECTOR_IRQ8+6,      INT_GATE_32,IrqExecutorTable[14],DPL_3);
00118     InterruptIdtEntrySet(INT_VECTOR_IRQ8+7,      INT_GATE_32,IrqExecutorTable[15],DPL_3);
00119     
00120     InterruptIdtEntrySet(INT_VECTOR_OS_CSW,      INT_GATE_32,SoftwareIntExecutorTable[0],DPL_3);
00121 }

void InterruptInit ( void   ) 

Definition at line 11 of file interrupt.c.

00011                         {
00012     InterruptCpuIntHandlerSet(0,InterruptCpuInt0Handler);     // 0x00~0x1f
00013     InterruptCpuIntHandlerSet(1,InterruptCpuInt1Handler);
00014     InterruptCpuIntHandlerSet(2,InterruptCpuInt2Handler);
00015     InterruptCpuIntHandlerSet(3,InterruptCpuInt3Handler);
00016     InterruptCpuIntHandlerSet(4,InterruptCpuInt4Handler);
00017     InterruptCpuIntHandlerSet(5,InterruptCpuInt5Handler);
00018     InterruptCpuIntHandlerSet(6,InterruptCpuInt6Handler);
00019     InterruptCpuIntHandlerSet(7,InterruptCpuInt7Handler);
00020     InterruptCpuIntHandlerSet(8,InterruptCpuInt8Handler);
00021     InterruptCpuIntHandlerSet(9,InterruptCpuInt9Handler);
00022     InterruptCpuIntHandlerSet(10,InterruptCpuInt10Handler);
00023     InterruptCpuIntHandlerSet(11,InterruptCpuInt11Handler);
00024     InterruptCpuIntHandlerSet(12,InterruptCpuInt12Handler);
00025     InterruptCpuIntHandlerSet(13,InterruptCpuInt13Handler);
00026     InterruptCpuIntHandlerSet(14,InterruptCpuInt14Handler);
00027     InterruptCpuIntHandlerSet(15,InterruptCpuInt15Handler);
00028     InterruptCpuIntHandlerSet(16,InterruptCpuInt16Handler);
00029     InterruptCpuIntHandlerSet(17,InterruptCpuInt17Handler);
00030     InterruptCpuIntHandlerSet(18,InterruptCpuInt18Handler);
00031     InterruptCpuIntHandlerSet(19,InterruptCpuInt19Handler);
00032     
00033     InterruptIrqHandlerSet(0,InterruptIrq0Handler);  //0x20~0x2f
00034     InterruptIrqHandlerSet(1,InterruptIrq1Handler);
00035     InterruptIrqHandlerSet(2,InterruptIrq2Handler);
00036     InterruptIrqHandlerSet(3,InterruptIrq3Handler);
00037     InterruptIrqHandlerSet(4,InterruptIrq4Handler);
00038     InterruptIrqHandlerSet(5,InterruptIrq5Handler);
00039     InterruptIrqHandlerSet(6,InterruptIrq6Handler);
00040     InterruptIrqHandlerSet(7,InterruptIrq7Handler);
00041     InterruptIrqHandlerSet(8,InterruptIrq8Handler);
00042     InterruptIrqHandlerSet(9,InterruptIrq9Handler);
00043     InterruptIrqHandlerSet(10,InterruptIrq10Handler);
00044     InterruptIrqHandlerSet(11,InterruptIrq11Handler);
00045     InterruptIrqHandlerSet(12,InterruptIrq12Handler);
00046     InterruptIrqHandlerSet(13,InterruptIrq13Handler);
00047     InterruptIrqHandlerSet(14,InterruptIrq14Handler);
00048     InterruptIrqHandlerSet(15,InterruptIrq15Handler);
00049     
00050     InterruptSoftwareIntHandlerSet(0,InterruptSoftwareInt48Handler); //0x30~
00051 }

void InterruptIrq0Handler ( void   ) 

Definition at line 123 of file interrupt.c.

00123                                {
00124 }

void InterruptIrq10Handler ( void   ) 

Definition at line 153 of file interrupt.c.

00153                                 {
00154 }

void InterruptIrq11Handler ( void   ) 

Definition at line 156 of file interrupt.c.

00156                                 {
00157 }

void InterruptIrq12Handler ( void   ) 

Definition at line 159 of file interrupt.c.

00159                                 {
00160 }

void InterruptIrq13Handler ( void   ) 

Definition at line 162 of file interrupt.c.

00162                                 {
00163 }

void InterruptIrq14Handler ( void   ) 

Definition at line 165 of file interrupt.c.

00165                                 {
00166 }

void InterruptIrq15Handler ( void   ) 

Definition at line 168 of file interrupt.c.

00168                                 {
00169 }

void InterruptIrq1Handler ( void   ) 

Definition at line 126 of file interrupt.c.

00126                                {
00127 }

void InterruptIrq2Handler ( void   ) 

Definition at line 129 of file interrupt.c.

00129                                {
00130 }

void InterruptIrq3Handler ( void   ) 

Definition at line 132 of file interrupt.c.

00132                                {
00133 }

void InterruptIrq4Handler ( void   ) 

Definition at line 135 of file interrupt.c.

00135                                {
00136 }

void InterruptIrq5Handler ( void   ) 

Definition at line 138 of file interrupt.c.

00138                                {
00139 }

void InterruptIrq6Handler ( void   ) 

Definition at line 141 of file interrupt.c.

00141                                {
00142 }

void InterruptIrq7Handler ( void   ) 

Definition at line 144 of file interrupt.c.

00144                                {
00145 }

void InterruptIrq8Handler ( void   ) 

Definition at line 147 of file interrupt.c.

00147                                {
00148 }

void InterruptIrq9Handler ( void   ) 

Definition at line 150 of file interrupt.c.

00150                                {
00151 }

void InterruptIrqHandlerSet ( U8  IrqNumber,
INT_HANDLER  IrqHandler 
)

Definition at line 58 of file interrupt.c.

00058                                                                 {
00059     if(IrqNumber>=16) return;                 //invalid irq number
00060     IrqHandlersTable[IrqNumber]=IrqHandler;
00061 }

void InterruptSoftwareInt48Handler ( void   ) 

Definition at line 315 of file interrupt.c.

00315                                         {
00316     OsSchedulerNextTaskFind();                          
00317 }

void InterruptSoftwareIntHandlerSet ( U8  IntNumber,
INT_HANDLER  IntHandler 
)

Definition at line 63 of file interrupt.c.

00063                                                                         {
00064     if(IntNumber>=1) return;                 //invalid int number
00065     SoftwareIntHandlersTable[IntNumber]=IntHandler;
00066 }


Generated on Sat Apr 10 23:28:06 2010 for 80X86 MULTI-TASKING OPERATION SYSTEM by  doxygen 1.5.9