bool_t console_stdio_set(const char * in, const char * out, const char * err) { struct console * cin, * cout, * cerr; if(!in || !out || !err) return FALSE; cin = search_console(in); if(!cin || !cin->getcode) return FALSE; cout = search_console(out); if(!cout || !cout->putcode) return FALSE; cerr = search_console(err); if(!cerr || !cerr->putcode) return FALSE; console_stdin = cin; console_stdout = cout; console_stderr = cerr; return TRUE; }
bool_t register_console(struct console * console) { struct console_list * list; list = malloc(sizeof(struct console_list)); if(!list || !console) { free(list); return FALSE; } if(!console->name || (!console->getcode && !console->putcode) || search_console(console->name)) { free(list); return FALSE; } list->console = console; list_add(&list->entry, &console_list->entry); if((console_stdin == NULL) && (console->getcode)) console_stdin = console; if((console_stdout == NULL) && (console->putcode)) console_stdout = console; if((console_stderr == NULL) && (console->putcode)) console_stderr = console; return TRUE; }
bool_t console_set(const char * name) { struct console_t * c = search_console(name); irq_flags_t flags; if(c) { spin_lock_irqsave(&__console_lock, flags); __console = c; spin_unlock_irqrestore(&__console_lock, flags); return TRUE; } return FALSE; }
bool_t unregister_console_uart(struct uart_t * uart) { struct console_t * console; console = search_console(uart->name); if(!console) return FALSE; if(!unregister_console(console)) return FALSE; free(console->priv); free(console->name); free(console); return TRUE; }
/* * unregister framebuffer driver */ bool_t unregister_framebuffer(struct fb * fb) { struct chrdev * dev; struct console * console; struct fb_console_info * info; struct fb * driver; u8_t brightness; if(!fb || !fb->info || !fb->info->name) return FALSE; dev = search_chrdev_with_type(fb->info->name, CHR_DEV_FRAMEBUFFER); if(!dev) return FALSE; console = search_console((char *)fb->info->name); if(console) info = (struct fb_console_info *)console->priv; else return FALSE; driver = (struct fb *)(dev->driver); if(driver) { if(driver->ioctl) { brightness = 0x00; (driver->ioctl)(driver, IOCTL_SET_FB_BACKLIGHT, &brightness); } if(driver->exit) (driver->exit)(driver); } if(!unregister_console(console)) return FALSE; if(!unregister_chrdev(dev->name)) return FALSE; free(info->cell); free(info); free(console); free(dev); return TRUE; }
bool_t unregister_console_input(struct input_t * input) { struct console_t * console; struct console_input_data_t * dat; console = search_console(input->name); if(!console) return FALSE; dat = (struct console_input_data_t *)console->priv; if(!unregister_console(console)) return FALSE; fifo_free(dat->fifo); free(dat); free(console->name); free(console); return TRUE; }
bool_t unregister_console_framebuffer(struct fb_t * fb) { struct console_t * console; struct console_fb_data_t * dat; console = search_console(fb->name); if(!console) return FALSE; dat = (struct console_fb_data_t *)console->priv; if(!unregister_console(console)) return FALSE; free(dat->cell); free(dat); free(console->name); free(console); return TRUE; }