static void duart_init(int clk_divisor, int data, int parity, int stop) { duart_out(R_DUART_MODE_REG_1, data | parity); duart_out(R_DUART_MODE_REG_2, stop); duart_out(R_DUART_CLK_SEL, clk_divisor); duart_out(R_DUART_CMD, M_DUART_RX_EN | M_DUART_TX_EN); /* enable rx and tx */ }
void putDebugChar(unsigned char c) { if (!duart_initialized) { duart_initialized = 1; duart_init(CLK_DIVISOR, DATA_BITS, PARITY, STOP_BITS); } while ((duart_in(R_DUART_STATUS) & M_DUART_TX_RDY) == 0); duart_out(R_DUART_TX_HOLD, c); }
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); }