int arch_defterm_init(void) { omap3_uart_base = vmm_host_iomap(OMAP3_UART_BASE, 0x1000); uart_lowlevel_init("st16654", omap3_uart_base, 4, OMAP3_UART_BAUD, OMAP3_UART_INCLK); return VMM_OK; }
int arch_defterm_init(void) { uart_base = isa_vbase + 0x3F8; uart_lowlevel_init(uart_base, 1, 115200, 1843200); return VMM_OK; }
static int uart_driver_probe(struct vmm_device *dev,const struct vmm_devid *devid) { int rc; const char *attr; struct vmm_chardev *cd; struct uart_port *port; cd = vmm_malloc(sizeof(struct vmm_chardev)); if(!cd) { rc = VMM_EFAIL; goto free_nothing; } vmm_memset(cd, 0, sizeof(struct vmm_chardev)); port = vmm_malloc(sizeof(struct uart_port)); if(!port) { rc = VMM_EFAIL; goto free_chardev; } vmm_memset(port, 0, sizeof(struct uart_port)); vmm_strcpy(cd->name, dev->node->name); cd->dev = dev; cd->ioctl = NULL; cd->read = uart_read; cd->write = uart_write; cd->priv = port; rc = vmm_devdrv_ioremap(dev, &port->base, 0); if(rc) { goto free_port; } attr = vmm_devtree_attrval(dev->node, "reg_align"); if (attr) { port->reg_align = *((u32 *)attr); } else { port->reg_align = 1; } attr = vmm_devtree_attrval(dev->node, "reg_offset"); if (attr) { port->base += *((u32 *)attr); } attr = vmm_devtree_attrval(dev->node, "baudrate"); if(!attr) { rc = VMM_EFAIL; goto free_port; } port->baudrate = *((u32 *)attr); port->input_clock = vmm_devdrv_clock_rate(dev); /* Call low-level init function */ uart_lowlevel_init(port->base, port->reg_align, port->baudrate, port->input_clock); rc = vmm_chardev_register(cd); if(rc) { goto free_port; } return VMM_OK; free_port: vmm_free(port); free_chardev: vmm_free(cd); free_nothing: return rc; }