📄 irq.c
字号:
#include "irq.h"// Fake functions!void expect_irqs(void){#if TRY_INTERRUPTS PRINTF("expect_irqs: DIsabled!\n");#else int i; for (i=1; i<500; i++) { // call ISR directly. dp_dsp_isr(); if (Read_mdm_byte(0x3c)) PRINTF("z"); usleep(1000); // Wait 1 milliseconds. } PRINTF(".\n");#endif}int dp_dsp_isr(void){ int i, todo; // edi = 0xd7 i = dp_int_regread(0xd7); todo = i & 0xff; // printf( "[ISR:%x]", todo); if ((!todo) || (todo == 0xff)) goto failexit; // ---------------------------------- // Not in asm code! //if (todo == 8) //printf( "+" ); // What is the significance of todo = 8? //else //printf( "[ISR:%x]", todo); // ---------------------------------- if (x_dsp_mars == 1) Write_mdm_word(0x3c, 0x101); dp_int_regwrite(0xd7, 0xff); // esi = 0xd8 if (todo & 2) process_ring(); if (todo & 8) { dp_int_regwrite(0xD8, 8); dp_byte_c = dp_int_regread(0x32); dp_byte_d = dp_int_regread(0x33); dp_byte_e = dp_int_regread(0x34); dp_byte_f = dp_int_regread(0x35); } //printf("dp_byte_f = %x.\n", dp_byte_f); if (todo & 4) process_v34(); if (todo & 0x40) { int i; i = dp_int_regread(0xbc); // esi = 0xbd dp_int_regwrite(0xbd, i); dp_int_regwrite(0xbd, ~i); // they used not on lower byte only if (i & 0x18) { printf( "What do you want to do with cellphone?\n" );#if 0 cell_isr(); x_wakeup();#endif } } // E52 dp_int_regwrite(0xd7, dp_bamil_rd7); outb_p(BaseValue, BaseAddressIndex); return 1; failexit: //printf( "ISR failed :(\n" ); outb_p(BaseValue, BaseAddressIndex); return 0;}void process_ring(void){#if LT_DEBUG printf( "Ring came!\n" );#endif dp_int_regwrite(0xd8, 0xff); if (dp_ring_int_count > 1) { dp_bamil_rd7 = 2; dp_ring_int = 1; dp_init_local_phone_timer(); return; } dp_ring_int_count++; if ((dp_sleep == 1) && (dp_ring_int_count == 1)) dp_regwrite(0xCB, 8); x_wakeup();}/*// Jamies invention.inline voiddp_restore_regs_after_interrupt (void){ int reg = dp_current_reg; unsigned short index_port = BaseAddress; if (!(reg <= 0x17f || (reg >= 0x1a0 && reg <= 0x1cf))) index_port += 2; outb_p ((unsigned char) reg, index_port);}// Jamies version.int dp_dsp_isr (void){ unsigned char isr = dp_int_regread (0xd7); if (isr == 0 || isr == 0xff) { dp_restore_regs_after_interrupt (); return 0; } if (isr==8) { // PRINTF( "+" ); } else PRINTF( "Unexpected interrupt: %x\n", isr ); if (x_dsp_mars) Write_mdm_word (0x3c, 0x101); dp_int_regwrite (0xd7, 0xff); if (isr & 0x02) { dp_int_regwrite (0xd8, 0xff); if (dp_ring_int_count > 1) { dp_bamil_rd7 |= 2; dp_ring_int = 1; dp_init_local_phone_timer (); } else { if (dp_sleep && dp_ring_int_count == 1) dp_regwrite (0xcb, 0x08); x_wakeup (); } } if (isr & 0x08) { dp_int_regwrite (0xd8, 0x08); dp_byte_c = dp_int_regread (0x32); dp_byte_d = dp_int_regread (0x33); dp_byte_e = dp_int_regread (0x34); dp_byte_f = dp_int_regread (0x35); } if (isr & 0x04) { if (dp_int_regread (0xb6) & 0x10) { if (S (0x6b) == 1 && V34Mode == 0) io_dual_port_rx (); else dual_port_rx (); } if (dp_int_regread (0xb6) & 0x01) dual_port_tx (); } if (isr & 0x40) { dp_int_regwrite (0xbd, dp_int_regread (0xbc)); if (isr & 0x18) { //cell_isr (); x_wakeup (); } } dp_int_regwrite (0xd7, dp_bamil_rd7); dp_restore_regs_after_interrupt (); return 1;}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -