void __init kgdb_config (void) { extern int (*generic_putDebugChar)(char); extern char (*generic_getDebugChar)(void); char *argptr; int line, speed; argptr = prom_getcmdline(); if ((argptr = strstr(argptr, "kgdb=ttyS")) != NULL) { argptr += strlen("kgdb=ttyS"); if (*argptr != '0' && *argptr != '1') printk("KGDB: Unknown serial line /dev/ttyS%c, " "falling back to /dev/ttyS1\n", *argptr); line = *argptr == '0' ? 0 : 1; printk("KGDB: Using serial line /dev/ttyS%d for session\n", line); speed = 0; if (*++argptr == ',') { int c; while ((c = *++argptr) && ('0' <= c && c <= '9')) speed = speed * 10 + c - '0'; } #ifdef CONFIG_MIPS_ATLAS if (line == 1) { speed = saa9730_kgdb_hook(speed); generic_putDebugChar = saa9730_putDebugChar; generic_getDebugChar = saa9730_getDebugChar; } else #endif { speed = rs_kgdb_hook(line, speed); generic_putDebugChar = rs_putDebugChar; generic_getDebugChar = rs_getDebugChar; } pr_info("KGDB: Using serial line /dev/ttyS%d at %d for " "session, please connect your debugger\n", line ? 1 : 0, speed); { char *s; for (s = "Please connect GDB to this port\r\n"; *s; ) generic_putDebugChar (*s++); } /* Breakpoint is invoked after interrupts are initialised */ } }
int putDebugChar(char c) { return generic_putDebugChar(c); }