int _braille_register_console(struct console *console, struct console_cmdline *c) { int rtn = 0; if (c->brl_options) { console->flags |= CON_BRL; rtn = braille_register_console(console, c->index, c->options, c->brl_options); } return rtn; }
/* * The console driver calls this routine during kernel initialization * to register the console printing procedure with printk() and to * print any messages that were printed by the kernel before the * console driver was initialized. */ void register_console(struct console *console) { int i; unsigned long flags; struct console *bootconsole = NULL; if (console_drivers) { if (console->flags & CON_BOOT) return; if (console_drivers->flags & CON_BOOT) bootconsole = console_drivers; } if (preferred_console < 0 || bootconsole || !console_drivers) preferred_console = selected_console; if (console->early_setup) console->early_setup(); /* * See if we want to use this console driver. If we * didn't select a console we take the first one * that registers here. */ if (preferred_console < 0) { if (console->index < 0) console->index = 0; if (console->setup == NULL || console->setup(console, NULL) == 0) { console->flags |= CON_ENABLED; if (console->device) { console->flags |= CON_CONSDEV; preferred_console = 0; } } } /* * See if this console matches one we selected on * the command line. */ for (i = 0; i < MAX_CMDLINECONSOLES && console_cmdline[i].name[0]; i++) { if (strcmp(console_cmdline[i].name, console->name) != 0) continue; if (console->index >= 0 && console->index != console_cmdline[i].index) continue; if (console->index < 0) console->index = console_cmdline[i].index; #ifdef CONFIG_A11Y_BRAILLE_CONSOLE if (console_cmdline[i].brl_options) { console->flags |= CON_BRL; braille_register_console(console, console_cmdline[i].index, console_cmdline[i].options, console_cmdline[i].brl_options); return; } #endif if (console->setup && console->setup(console, console_cmdline[i].options) != 0) break; console->flags |= CON_ENABLED; console->index = console_cmdline[i].index; if (i == selected_console) { console->flags |= CON_CONSDEV; preferred_console = selected_console; } break; } if (!(console->flags & CON_ENABLED)) return; if (bootconsole && (console->flags & CON_CONSDEV)) { printk(KERN_INFO "console handover: boot [%s%d] -> real [%s%d]\n", bootconsole->name, bootconsole->index, console->name, console->index); unregister_console(bootconsole); console->flags &= ~CON_PRINTBUFFER; } else { printk(KERN_INFO "console [%s%d] enabled\n", console->name, console->index); } /* * Put this console in the list - keep the * preferred driver at the head of the list. */ acquire_console_sem(); if ((console->flags & CON_CONSDEV) || console_drivers == NULL) { console->next = console_drivers; console_drivers = console; if (console->next) console->next->flags &= ~CON_CONSDEV; } else { console->next = console_drivers->next; console_drivers->next = console; } if (console->flags & CON_PRINTBUFFER) { /* * release_console_sem() will print out the buffered messages * for us. */ spin_lock_irqsave(&logbuf_lock, flags); con_start = log_start; spin_unlock_irqrestore(&logbuf_lock, flags); } release_console_sem(); }