static void timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) { /* Clear the interrupt. */ int val; int status; REG32(TCIR) |= TCIR_TC0IP; #ifdef CONFIG_REMOTE_DEBUG /* call the generic one */ if (kdb_port_info.state) { /* need to init device first */ status = serial_in(&kdb_port_info,UART_LSR); if (status) { if (status & (UART_LSR_BI | UART_LSR_FE)) serial_out(&kdb_port_info,UART_LSR_BI,status); else { val=serial_in(&kdb_port_info, UART_RX); if(val ==(int)'\003') set_async_breakpoint(read_32bit_cp0_register(CP0_EPC)); } } } #endif do_timer(regs); }
/* KGDB interrupt handler */ asmlinkage void excite_kgdb_inthdl(void) { if (unlikely( ((titan_readl(UAIIR) & 0x7) == 4) && ((titan_readl(UARBR) & 0xff) == 0x3))) set_async_breakpoint(®s->cp0_epc); }
static void sb1250_kgdb_interrupt(void) { /* * Clear break-change status (allow some time for the remote * host to stop the break, since we would see another * interrupt on the end-of-break too) */ kstat_this_cpu.irqs[kgdb_irq]++; mdelay(500); duart_out(R_DUART_CMD, V_DUART_MISC_CMD_RESET_BREAK_INT | M_DUART_RX_EN | M_DUART_TX_EN); set_async_breakpoint(&get_irq_regs()->cp0_epc); }
void bcm1480_kgdb_interrupt(struct pt_regs *regs) { /* * Clear break-change status (allow some time for the remote * host to stop the break, since we would see another * interrupt on the end-of-break too) */ kstat.irqs[smp_processor_id()][kgdb_irq]++; mdelay(500); duart_out(R_DUART_CMD, V_DUART_MISC_CMD_RESET_BREAK_INT | M_DUART_RX_EN | M_DUART_TX_EN); set_async_breakpoint(®s->cp0_epc); }