bool_t register_bus_uart(struct uart_t * uart) { struct bus_t * bus; if(!uart || !uart->name) return FALSE; bus = malloc(sizeof(struct bus_t)); if(!bus) return FALSE; bus->name = strdup(uart->name); bus->type = BUS_TYPE_UART; bus->driver = uart; bus->kobj = kobj_alloc_directory(bus->name); if(!register_bus(bus)) { kobj_remove_self(bus->kobj); free(bus->name); free(bus); return FALSE; } if(uart->init) (uart->init)(uart); return TRUE; }
bool_t register_bus_i2c(struct i2c_t * i2c) { struct bus_t * bus; if(!i2c || !i2c->name) return FALSE; bus = malloc(sizeof(struct bus_t)); if(!bus) return FALSE; bus->name = strdup(i2c->name); bus->type = BUS_TYPE_I2C; bus->driver = i2c; bus->kobj = kobj_alloc_directory(bus->name); if(!register_bus(bus)) { kobj_remove_self(bus->kobj); free(bus->name); free(bus); return FALSE; } if(i2c->init) (i2c->init)(i2c); return TRUE; }
static INITCALL console_init() { register_bus(&console_bus, "console"); register_driver(&console_driver); vram_init(con_global); keyboard_init(con_global); con_global->device.bus = &console_bus; return 0; }